写在前面: 我是
「nicedays」
,一枚喜爱做特效,听音乐,分享技术的大数据开发猿
。这名字是来自world order乐队的一首HAVE A NICE DAY
。如今,走到现在很多坎坷和不顺,如今终于明白nice day是需要自己赋予的。
白驹过隙,时光荏苒,珍惜当下~~
写博客一方面是对自己学习的一点点总结及记录
,另一方面则是希望能够帮助更多对大数据感兴趣的朋友。如果你也对大数据与机器学习
感兴趣,可以关注我的动态https://blog.csdn.net/qq_35050438
,让我们一起挖掘数据与人工智能的价值~
一:Inputformat的数据多种处理方式:
FileInputFormat:–处理文件
TextInputFormat:
- <偏移量,行数据>----LineRecordReader
KeyValueTextInputFormat:
- <分隔符前,分隔符后>----KeyValueLineRecordReader
NLineInputFormat:
- <偏移量,行数据>----LineRecordReader
CombineTextInputFormat:
- 用于处理小文件过多场景,将多个小文件逻辑规划到一个切片中。<偏移量,行数据>----LineRecordReader(跨文件了)
DBInputFormat:
SequenceFileInputFormat:
TableInputFormat:
二:Combiner类令人忽视的点:
- Combiner组件的父类是Reducer
- 但是Combiner是运行再MapTask节点上的
三:从Yarn角度看MapReduce流程:(再详细版)
第一步: Client向RM提交job请求,RM的app manager返回jobId和hdfs地址,Client将运行作业资源(分片信息,jar包,配置信息等)资源上传到hdfs上。
第二步: 上传成功后,再向RM的app manager去申请执行作业的请求,app manager把请求转发给Scheduler调度器,调度器将请求放入调度队列,当到执行到某个请求时,调度器通知app manager区某个datanode上开辟一个容器container,通过nodemanager调用container去创建一个appmaster。
第三步: appmaster去拉取hdfs路径的提交文件信息来创建Map和reducetask,同时map和reduce执行需要计算资源,appmaster通过rpc协议通过轮询的方式向调度器申请运行map和reducetask计算资源,然后appmaster此时可以去通知nodemanager,让其启动任务了。
第四步: 任务从共享的hdfs上拉取执行的资源,开始任务,每个任务计算完毕后,map和reducetask将文件结果上传到hdfs的路径上,并向AppMaster发送成功信息,AppMaster向RM发送请求,请求注销自己,然后调度器再去执行下一个任务。