大数据面试必背原理

2023-10-10 22:59
文章标签 数据 面试 原理 必背

本文主要是介绍大数据面试必背原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • HDFS读取过程:
    • HDFS写入流程:
    • MapReduce工作流程
    • 简列几条MapReduce的调优方法
    • 谈谈Zookeeper理解

HDFS读取过程:

在这里插入图片描述
1、客户端通过Distributed FileSystem向NameNode请求下载文件。
2、NameNode通过查询元数据,找到文件块所在的DataNode地址,返回目标文件的元数据。
3、挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
4、DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
5、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

HDFS写入流程:

在这里插入图片描述
1、客户端通过Distributed FileSystem模块向namenode请求上传文件到/user/atguigu/ss.avi这个路径文件
2、校验文件是否存在,如果存在就会报目录存在这个错误,如果不存在则相应可以上传文件
3、客户端请求第一个Block(0-128M)上传到那几个DataNode服务器上
4、返回dn1,dn2,dn3节点,表示这三个节点可以存储数据(通过负载量和距离来选择dn)
5、客户端通过调用FSDataOutPutStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信 管道建立完成。
6、dn1、dn2、dn3逐级应答客户端。
7、客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就 会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。
8、告诉namenode传输完成

MapReduce工作流程

1、输入文件分片,每一片都由一个MapTask来处理
2、Map输出的中间结果会先放在内存缓冲区中,这个缓冲区的大小默认是100M,当缓冲区中的内容达到80%时(80M)会将缓冲区的内容写到磁盘上。也就是说,一个map会输出一个或者多个这样的文件,如果一个map输出的全部内容没有超过限制,那么最终也会发生这个写磁盘的操作,只不过是写几次的问题。
3、从缓冲区写到磁盘的时候,会进行分区并排序,分区指的是某个key应该进入到哪个分区,同一分区中的key会进行排序,如果定义了Combiner的话,也会进行combine操作
4、如果一个map产生的中间结果存放到多个文件,那么这些文件最终会合并成一个文件,这个合并过程不会改变分区数量,只会减少文件数量。例如,假设分了3个区,4个文件,那么最终会合并成1个文件,3个区
5、以上只是一个map的输出,接下来进入reduce阶段
6、每个reducer对应一个ReduceTask,在真正开始reduce之前,先要从分区中抓取数据
7、相同的分区的数据会进入同一个reduce。这一步中会从所有map输出中抓取某一分区的数据,在抓取的过程中伴随着排序、合并。
8、reduce输出

简列几条MapReduce的调优方法

MapReduce优化方法主要从六个方面考虑:数据输入,Map阶段,Reduce阶段,IO传输,数据倾斜问题和常用的调优参数。

1.数据输入
1)合并小文件,在执行MR任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而任务的装载比较耗时,从而导致MR运行较慢;
2)采用combinetextinputformat来作为输入,解决输入端大量小文件的场景。
2.Map阶段
1)减少溢写次数,通过调整io.sort.mb及sort.spill.percent参数值,增大出发溢写的内存上限,减少溢写次数,从而减少磁盘IO;
2)减少合并次数,通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩减MR处理时间;
3)在map之后,不影响业务逻辑的前提下,先进行combine处理,减少IO。
3.Reduce阶段
1)合理设置map和reduce的数量,两个数量都不能太少或者太多,太少,会导致task等待时间太长,延长处理时间,太多,会导致map和reduce任务之间竞争资源,造成处理超时等错误;
2)设置map和reduce共存,调整,show start completedmaps参数,使map运行到一定程度后,reduce也开始运行,从而减少reduce等待时间;
3)规避使用reduce,因为reduce在用于连接数据集的时候会产生大量的网络消耗;
4)合理设置reduce端的buffer,可以通过设置参数来配置,使得buffer中的一部分数据可以直接输送到reduce,从而减少IO开销;MapReduce,Reduce.input.buffer.percent的默认为0.0,当值大于0时,会保留在指定比例的内存读buffer中的数据直接拿给reduce使用。
4.IO传输
1)采用数据压缩的方式,减少任务的IO时间;
2)使用seq二进制文件。

谈谈Zookeeper理解

Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题( 解决单点故障问题 )。
Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化,通过监控这些数据状态的变化,从而可以达到基于数据的集群管理
总结: Zookeeper=文件系统+通知机制

这篇关于大数据面试必背原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183685

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模