HDFS的读流程和写流程
写流程:
- 1)客户端通过dfs向namenode发送请求上传文件,namenode检查目标文件和父目录是否存在
- 2)namenode返回能否上传信息给客户端
- 3)客户端请求第一个block上传到哪些datenode
- 4)namenode返回几个datenode节点(与文件的replication副本个数有关)
- 5)客户端通过输出流请求第一个dn上传数据,第一个dn收到请求会调用第二个dn,第二个调用第三个…。建立串行通信管道。
- 6)从第一个dn到最后一个dn依次应答客户端
- 7)客户端往第一个dn上传第一个block,以packet包为单位,第一个dn收到一个packet会通过信道传输传给第二个dn,第二个dn传给第三个…每次传输packet会放入应答队列等待应答
- 8)每个block上传完成,客户端再次传输下一个block重复执行3)-7)
读流程:
- 1)客户端通过dfs请求namenode下载文件,namenode查询源数据,找到文件所在的datanode
- 2)就近选择服务器,请求读取数据(串行,一个block接一个block)
- 3)datanode以packet为单位使用输入流传输数据
- 4)客户端以packet为单位缓存数据,依次写入目标文件
Hadoop的shuffle流程
- 1)mapTask将map()处理后的kv对放入缓冲区
- 2)内存溢写入本地磁盘
- 3)溢写文件合并成大的溢出文件
- 4)溢写和合并阶段会调用partitioner进行分区和对key的归并排序
- 5)reduceTask根据分区号去结果分区取数据
- 6)reduceTask获取同一个分区的不同mapTask结果文件进行归并排序
- 7)合并成大文件提供数据给reduceTask的reduce()使用
Hadoop的shuffle优化方式有哪些
- 1)io密集型的任务多使用压缩
- 2)使用combiner提前在map阶段就执行合并减小reduce的压力
Yarn的工作机制
- 1)mapreduce程序提交到客户端所在节点
- 2)yarnRunner从resourceManager申请一个application
- 3)resourceManager返回application的资源路径返回给yarnRunner
- 4)将所运行的资源如job的配置切片以及依赖执行jar包提交到hdfs上
- 5)资源提交完成后,申请运行mrAppMaster
- 6)resourceManager将用户的请求初始化为一个task
- 7)空闲nodeManager接到task
- 8)nodeManager创建容器container,产生mrAppMaster
- 9)container从hdfs上拷贝资源到本地
- 10)mrAppMaster从resourceManager申请运行mapTask资源
- 11)resourceManager将运行mapTask分配给其他的nodeManager,其他的nodeManager接到任务并创建容器
- 12)mrAppMaster向接到任务的nodeManager发送程序启动脚本,各自启动mapTask对数据分区排序
- 13)mrAppMaster等待所有的mapTask执行完毕,向resourceManager申请容器,执行reduceTask
- 14)reduceTask从mapTask中获取相应的数据
- 15)程序执行完毕后,mrAppMaster向resourceManager申请注销自己
Zookeeper的选举机制
服务器id:myid === 事务id:tid === leader任期id:lid
三台服务器为准:1)数据全部一致;2)半数存活;3)选举要半数以上的票
第一次启动
-
依次启动
- 1)myid1启动,投自己一票<1.5,myid1保持looking状态
- 2)myid2启动,触发选举,分别投自己一票并交换选票信息,比较myid的大小myid2要大,更改选票推举myid2,此时myid2两票>1.5,选举完成myid2为leader,结束looking状态
- 3)myid3启动,发现无looking状态(此时不会更改选票信息),投自己一票交换选票信息,少数服从多数,myid2为leader,自己成为小弟
-
并行启动
- 比较myid的大小,最大的选举为leader
非第一次启动
- 1)选举触发条件
- 服务器初始化启动
- 服务器和leader断开连接
- 2)进入选举流程
- 已经存在leader,触发选举时被告知当前服务器的leader信息,不在竞争,与leader机器连接,并同步状态
- 不存在leader,触发选举,重新选票,遵循以下原则:
- 优先级:lid>tid>myid