一、当前集群环境
CDH 6.3.3
hadoop 3.0.0
hbase 2.1.0
hive 2.1.1
impala 3.2.0
spark 2.4.0
kafka 2.2.1
scala 2.11.12
二、hadoop
1.Hdfs的工作原理(读和写)★★★★★
读:client请求namenode ,获取目标文件的元数据信息,namenode校检无误后,返回给client,client根据元数据与就近的datanode建立连接,获取block 块,并将block 块合并后,返回给client。
写:client 向 namenode发出写 的请求,namenode 检查是否路径存在,权限等,通过后,将操作写入editLog,并返回一个节点列表,给client,client根据元数据与列表中就近的DataNode进行连接,并将data与返回的节点列表一并发送给它,此后,client就与所有的DataNode节点建立 piepline管道,一个DataNode写完后会传给下一个DataNode,每个DataNode写完一个 block 后,会返回确认信息给namenode。同时进行下一个 block的写入,直到全部写入完成。
2.MapReduce的原理 ★★★★★
MR把拿到的 split 分配给相应的 task,每个task处理对应的split,split 以line的方式读取每一行数据,将这些数据加载到一个环形缓冲区中,当环形缓冲区达到 80%的时候,会将这些数据溢写到磁盘中,同时按照 k-v的方式进行分区,(默认采用hashpartition),同时在每个分区内进行排序,如果这时设置了setcombinerclass,则会对每个分区的数据进行combiner操作,还可以设置 output-compress,对数据进行压缩,最后merge,根据分区规则,将数据归并到同一个文件中,等待reduce端拉取,等到所有的maptask 任务结束后,会根据分区数量启动相应的数量的reduceTask,每个reducetask 从mapTask机器上拷贝相应分区的数据到本地的缓冲区,缓冲区不够就溢写到磁盘,待所有数据拷贝完毕后,进行归并排序,之后按照相同的key分组,最后调用 reduce() 方法进行聚合处理,生成的结果将以文件形式在hdfs中体现。
3.Yarn的工作流程 ★★★★★
1.client 提交一个任务到Yarn,包括用户程序、 相关文件、applicationMasrer程序、启动AM(applicationMaster)命令。
2.RM(Resource Manager)分配第一个 container,并与所在的 NM(nodeManager)进行 通信,要求NM在container中启动 AM。
3.AM向RM注册自己,这样用户可以通过 RM查看程序的运行状态等,然后它准备为程序的各个任务申请资源,并监控他们的 运行状态直到任务结束。
4.AM以轮询的方式通过RPC协议与RM通信,申请和领取资源。
5.AM领取到资源后,会向申请到的Container所在的NM进行通信,要求NM在container中启动任务。
6.任务启动。NM为要启动的任务配置好环境变量、jar包、二进制文件等,并将启动命令写在一个脚步中,通过改脚步运行任务。
7.NM与相应的AM保持RPC通信,汇报自身任务的运行进度与状态,以让AM在任务失败时,可以重启任务。
8.任务结束,AM向RM通信,要求注销和关闭自己。