hadoop组件学习总结

### 1、hadoop

​    hadoop是一个分布式系统基础架构

​        集群:多个机器共同完成一件事

​         分布式:多个机器共同完成一件事,然后不同机器作用不同,各司其职

​    hadoop三大组件:

​        hdfs:高可靠,高吞吐量的分布式文件存储系统

​        mapReduce:一个分布式的离线并行计算框架

​        YARN:作业调度与资源管理平台

​    除了三大组件之外hadoop还提供了common工具模块用于支持其他模块的操作

### 2、HDFS

​    高可靠(多副本机制)、高吞吐的分布式文件存储系统

​    集群启动命令:安装目录下   ./sbin/start-dfs.sh

​    读写端口:9000

​    webui端口:50070

#### 2.1、组件

​    Namenode:主节点

​        作用:存储文件的元数据(描述数据的数据)信息

​               处理客户端读写请求

​               维护文件的多副本

​    DataNode:数据节点

​        作用:具体存储数据的节点,执行数据读写操作,负责数据校验和

​    Secondarynamenode:辅助节点

​            作用: 用来辅助主节点管理元数据信息,

​                             定期合并主节点的Edits()文件和fsimage()文件并推送给namenode

​    client:客户端

​        作用:将文件切分成一个个block,然后按块上传、

​                            与namenode交互获取存放文件的datanode位置

​                与datanode交互。读写数据

###### 注意:高可用模式下没有secondaryNameNode节点,此时由standby状态下的namenode

###### ​        负责辅助管理元数据信息,此时namenode节点之间的数据同步由journalNode负责

#### 2.2、特点

​    高可靠(多副本、自动回复),高吞吐,分布式、适合大数据处理、部署成本低(可部署在廉价机器上)

​    适合一次写入多次读取的场景,且不支持文件修改但可以删除

#### 2.3、缺点

​    不适合大量小文件存储:因为hdfs存储的基本单位是block块,一个block块大小是128M

​    不适合低延迟的数据访问

​    不支持数据修改

#### 2.4、hdfs 写流程

​    1、客户端上传文件,首先向namenode发送请求上传文件,namenode会进行验证目标文件是否存在或父目录是否存在

​    2、验证通过后、回复客户端可以上传

​    3、客户端接到可以上传的回复后,会向namenode询问第一个block块上传到哪几个节点

​    4、namenode返回客户端可用的datanode节点地址,并保存元数据信息

​    5、客户端请求写入第一个节点,第一个节点会与第二个节点建立通道、第二个节点会与第三个节点建立通道,以此类推直到通道全部打通

​    6、各节点逐级应答客户端,通道建立

​    7、客户端开始写数据到第一个datanode上,datanode存储数据到本地并且将数据通过通道传递到下一个datanode,以此类推

​    8、当前block传输完成后,客户端再次请求上传下一个block块​    

#### 2.5、hdfs 读流程

​    1、客户端向namenode请求下载文件

​    2、namenode通过查询元数据,找到文件所在datanode地址返回给客户端

​    3、客户端就近选择一台datanode,请求读取第一块数据

​    4、datanode传输第一块数据数据给客户端

​    5、客户端继续就近选择datanode请求后续数据块,直到数据块全部下载成功

​    6、客户端将所有数据块下载后,在本地将所有块拼接成一个文件

#### 2.6、namenode和secondarynamenode工作原理

​    namenode工作原理:

​    1、第一次启动namenode格式化后,创建fsimage镜像文件(存储的是元数据)和edits(存储的是生成元数据的操作,执行后会生成元数据)编辑日志文件

​    2、nomenode接受客户端对元数据的增删改请求时并不是直接写入内存,而是会将这些请求写入编辑日志中

​    3、namenode会将存储完成的编辑日志执行一遍形成元数据写入内存,当编辑日志文件达到一定大小后,会按照编号将其重命名,并创建新的编辑文件

​    4、namenode在内存中对元数据进行更改

​    secondarynamenode工作原理:

​    1、secondarynamenode向namenode询问是否需要checkpoint,并带回询问结果

​    2、secondarynamenode根据结果(条件:定时(一般一个小时)时间到了或者编辑日志文件写满了)向namenode请求checkpoint

​    3、namenode滚动正在写的edits编辑日志文件

​    4、将滚动前的edits编辑日志文件和fsimage镜像文件拷贝到secondarynamenode

​    5、secondarynamenode 加载编辑文件和日志文件到内存进行比对合并

​    6、secondarynamenode 生成新的fsimage.checkpoint镜像文件拷贝到namenode

​    7、namenode将fsimage.checkpoint镜像文件重命名为fsimage

### 3、YARN

​    作业调度与资源管理平台

​    启动命令:安装路径下 ./sbin/start-yarn.sh

​    webUI 端口:8088

#### 3.1、集群角色

​        ResourceManager:yarn集群的管理者

​            作用:处理客户端请求、监控ApplicationMaster、监控nodeManger、负责资源分配与调度

​        NodeManager:本台机器的管理者

​            作用:管理本台机器的资源,处理来自ResourceManager的命令、和来自ApplicationMaster   

​                    的命令,并为其分配资源

​        ApplicationMaster:mapruduce任务的管理者

​            作用:负责数据切分、处理来自ResourceManager的命令、为mr任务申请资源并分配给内部       

​                   任务,负责任务的监控和容错处理

​        container:运行环境的抽象

​            作用:运行mr任务的基本单位,内部封装了mr运行需要的cpu、内存等资源以及环境变量、 

​                          启动命令等任务运行相关的信息。

#### 3.2、yarn工作流程(mr为例)

​    1、mr提交到客户端,客户端向rm申请一个Application

​    2、resourcemanger返回资源提交地址

​    3、客户端将运行所需资源提交到hdfs上

​    4、资源提交完毕。申请运行mrapplicationMaster

​    5、recourseManger将客户端请求初始化成一个task,放入他的任务队列中

​    6、其中一个nodemanger领取到这个任务后,创建容器container、并产生mrapplicationMaster

​    7、mrapplicationMaster从hdfs拷贝程序运行所需资源

​    8、mrapplicationMaster向rm申请maptask资源

​    9、rm将指定nodemanger,这些nodemanger会领取任务创建程序运行所需的container

​    10、mrapplicationMaster给这些nodemanger发送程序启动脚本,这些nodemanger会分别启动maptask,对数据进行处理、分区、排序

​    11、mrapplicationMaster等所有maptask运行完毕后,向rm申请资源运行reduceTask

​    12、reduceTask向mapTask获取相应分区的数据进行聚合计算

​    13、程序运行完毕mrapplicationMaster向rm申请注销,释放资源

#### 3.3、yarn调度器

​    1、先进先出调度器(FIFO):一个队列。先来先运行

​    2、容量调度器:多个队列,多个任务可以同时运行,每个队列中遵循FIFO(适用于给多个组织提供服务的场景)

​    3、公平调度器:不分先后,任务过来就与当前的任务平均分配资源(对配置要求较高)

### 4、mapReduce

​    一个分布式的离线并行计算框架

#### 4.1、计算阶段

​    map(映射)阶段:读入数据并进行转换处理

​    reduce(归约)阶段:对map阶段处理的结果进行汇总

#### 4.2、特点

​    优点:易于编程、扩展性良好、具有高容错性,适合pb级以上海量数据的离线分析

​    缺点:无法做实时分析、流式计算和DAG有向图计算

#### 4.3、mapreduce工作原理

​    1、执行driver的main方法,写入数据切片规则,生成运行任务的配置文件,将程序打成jar包。准备好后将任务和相关资源提交给yarn的resourcemanger。

​    2、resourcemanger收到客户端提交的任务后,生成MRapplicationMaster,由该进程负责指挥调度刚刚提交的任务

​    3、MRapplicationMaster会解析任务。查看任务切片数量,启动相应数量的maptask

​    4、maptask,执行业务逻辑、将其负责的切片数据处理后,然后写入环形缓冲区(默认100M)(优化:增大缓冲区大小,减少溢写次数,减少磁盘io)

​    5、缓冲区占用达到一定比例时(一般是80%)开始溢写到磁盘,溢写时根据分区规则进行分区,和第一次排序(确保分区内有序)

​    6、当溢写次数过多,分区内小文件达到一定数量时,会触发shuffle,开始第一次归并并进行第二次排序,(把相同分区内小文件合并成成一个大文件,并且确保数据有序)

​    注:此时可以选择conbiner进行(map端)预聚合,可以减少网络传输次数,减少磁盘io(属于优化)

​    7、当map阶段结束后MRapplicationMaster会根据分区数,启动相应数量的reduceTask,各个reduceTask会从各个maptas拷贝相同分区的数据,然后进行第二次归并,和第三次排序

​    8、读取归并后的文件,调用reduce方法实现聚合逻辑

#### 4.4、优化

​    1、尽可能的使用map join 而不使用reduce join (减少磁盘io和网络传输)

​    2、自定义分区方式(写一个类集成partioner类),防止数据倾斜

​    3、合理设置map和reduce数量

​    4、增大环形缓冲区大小,减少溢写次数

​    5、map后、在不影响业务逻辑的前提下使用combiner在map端进行预聚合,减少网络传输

​    6、增大merge文件的数目,减少归并文件的次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值