1.hadoop运行原理
MapReduce
HDFS 分布式文件系统(HDFS客户端的读写流程)
写:
客户端接收用户数据,并缓存到本地
当缓存足够一个HDFS大小的时候
客户端同NameNode通讯注册一个新的块
注册成功后 NameNode给客户端返回一个DateNode的列表
客户端向列表中的第一个DateNode写入块
收到所有的DateNode确认信息后,客户端删除本地缓存
客户端继续发送下一个块
重复以上步骤 所有数据发送完成后,写操作完成
读:
客户端与NameNode通讯获取文件的块位置信息,包括块的所有冗余备份的位置信息:DateNode列表
客户端获取文件位置信息后直接同有文件块的DateNode通讯,读取文件
如果第一个DateNode无法连接,客户端将自动联系下一个DateNode
如果块数据的校验值出错,则客户端需要向NameNode报告,并自动联系下一个DateNode
客户端的hadoop环境:与集群的hadoop包一样
集群入口:core-site.xml、fs.default.name
缓存块大小:fs.block.size
存多少份:fs.replication
2.mapreduce的原理
mapreduce的原理:一个MapReduce框架由一个单独的master JobTracker和集群节点每一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,在这些slave上,master监控它们的执行,并且重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。
3.Mapreduce数据倾斜是什么意思?怎么处理?
Mapreduce数据倾斜是指我们在分片的时候导不同分片上的数据不均,导致这些分片在并行处理的时候,有的分片执行事件过长,有的执行时间过短,导致总的执行时间过长的一种现象,通常是由:1.map端的key值过多或者有空值;2.业务本身的特性;3.某些sql就有数据倾斜;4.建表的时候考虑不周等原因造成的。
处理:1.如果是大量数据的时候可以做基于map的key值离散。通过写一个for循环给过多的key打标签。
2.数据量小的时候,且输入的结果不会影响到reduce输入的结果,且不做平均值的时候,用基于map端之后shuffle端之前的reduce操作。