hadoop
hadoop 是什么
hadoop是一个分布式系统基础架构,主要解决海量数据存储和计算问题。
hadoop 优势
多副本机制保证系统可靠性,处理节点可以动态添加/删除保证系统的可扩展性,MapReduce并行工作保证系统的高效性,失败任务默认重新分配4次执行保证系统的容错性。
hadoop 组成部分
HDFS存储数据,MapReduce分析计算数据,Yarn根据计算任务分发资源。
HDFS 组成部分
NameNode:管理文件块名称列表和对应文件块所在的DataNode,副本数量,权限信息。
DataNode:文件块数据存储的节点,NameNode上维护的信息是DataNode主动发给NameNode的,默认6个小时和hadoop重启会发送。还会主动发送心跳机制,NameNode默认在10分钟+30秒没有收到心跳则判断该DataNode节点不可用。
SecondaryNameNode:NameNode节点的辅助管理节点,辅助追加日志和元数据的合并。
MapReduce 组成部分
Map阶段:并行处理传入数据
Reduce阶段:并行根据分区拉起Map输出结果进行汇总等处理,输出结果。
Shuffle阶段:Map阶段到Reduce阶段的中间部分,主要设置分区或根据key值进行排序/合并或中间文件压缩传输等操作。
Yarn 组成部分
ResourceManager:系统总资源管理器,负责分配任务所需要的资源信息。
NodeManager:任务具体处理地方
Application Master:任务的运行老大,负责任务的执行。
Container:容器封装任务运行要的资源。
hadoop 目录结构
bin目录:存放HDFS,MapReduce,Yarn的操作脚本
etc目录:存放关于HDFS,MapReduce,Yarn,集群等hadoop配置文件。
data目录:存放执行MapReduce函数的执行结果
lib目录:存放hadoop的本地库
sbin目录:存放hadoop启动/停止的脚本
share目录:存放hadoop的依赖库,官方文档 /案例等信息
HDFS文件块大小
HDFS文件块的大小默认为128M,可以修改dfs.blocksize来修改。设置文件块大小的标准和文件块在NameNode节点寻址时间和文件块传输到DataNode磁盘的时间有关,一般磁盘传输时间是寻找时间的100倍。
HDFS写入文件流程
- 客户端发送一个上传请求时,第一步发送请求给NameNode节点,确认上传路径是否存在,是否满足创建文件夹权限。
- 满足后,第二步根据文件块大小进行切片,发送请求给NameNode请求文件块存储的DataNode节点信息。NameNode根据就近原则选择DataNode节点信息返回。
- 第三步建立文件块传输通道将文件存入返回的DataNode节点中。
HDFS读取文件流程
- NameNode根据读取文件路径返回该文件的文件块和DataNode的映射信息给客户端。
- 客户端根据映射信息和就近原则选择DataNode节点读取文件块,组成最后要读取的文件。
HDFS副本选择位置
副本默认为3份
- 第一份副本放在HDFS客户端所在的DataNode节点,如果HDFS客户端在集群外则随机
- 第二份副本放在第一份副本不同机架的DataNode节点
- 第三份副本放在第二份副本同一机架不同的DataNode节点
自定义bean对象序列化
- 实现Writable接口
- 设置空参构造
- 实现序列化方法和反序列化方法,两者顺序必须一致
- 重写toString方法设置备案对象输出结果
- 如果bean对象为key值还要实现Comparable接口,因为shuffle过程必须排序。
Map任务数量和Reduce任务数量
Map任务数量由切片数量决定。切片大小默认为文件块大小128M,每个文件单独计算切片数量。
Reduce任务数量由分区数量决定。没有设置默认为1个,可以实现接口自定义分区逻辑。设置0为没有Reduce任务,已Map输出为输出信息。
MapReduce执行流程
- 客户端提交前,先将文件进行处理,生成切片Job.split,执行顺序Job.xml,运行jar等临时文件。
- Yarn 根据切片数据分配Map任务数量资源信息执行Map任务。
- Map任务执行输出数据通过分区处理放入环形缓存区中,环形缓冲区一半存数据,一半存索引,默认大小为100M,当容量超过80%反向回写,并将其80%数据进行快排。同时将溢出的数据进行归并排序写入文件并保证分区内有序。
- 当Map任务全部执行完成后,Reduce任务根据分区开始拉取Map任务输出结果,将key值相同的value值放在一起执行Reduce任务,根据输出类型生成文件。
MapJoin和ReduceJoin
关于两个文件数据根据主键关联处理数据方法。
ReduceJoin:自定义bean对象包含文件A和B的全部信息,然后在Reduce任务进行处理。容易导致数据倾斜,不建议使用。
MapJoin:将小文件B的信息存放缓存中,在Map任务中进行处理。
Yarn执行流程
客户端提交一个请求给ResourceManager资源管理器,RM会创建一个Task任务进入队列,然后NodeManager从队列中领取到Task任务后,从HDFS中获取切片,jar等信息创建一个任务容器包含任务管理者MRAppmaster,任务管理者再次向RM申请执行Map和Reduce任务的NodeManager来执行任务。
Yarn调度器
- FIFO调度器:单队列,根据提交作业顺序执行,先来先执行
- 容量调度器:多队列,队列资源根据占用资源少的先分配原则使用,作业资源根据优先级和提交时间决定,容器资源根据就近原则分配。
- 公平调度器:多队列,优先选择资源缺额比例大的使用。
本文详细介绍了Hadoop 4.0的核心组成部分,包括HDFS、MapReduce和YARN。阐述了HDFS的文件块大小、写入和读取流程,以及副本选择策略。此外,还探讨了MapReduce的执行流程,MapJoin和ReduceJoin的差异,以及YARN的执行流程和调度器的工作原理。Hadoop的优势在于其分布式、容错性和可扩展性。

1917

被折叠的 条评论
为什么被折叠?



