并行度说明:
maptask的并行度是指map阶段有多少个并行的maptask共同处理任务
注意点:
1.因为每个切片的大小默认情况下是128M,如果一个文件是260M,那么切了128M后还剩132M,如果剩余的长度/splitSize <= 1.1,就将我们剩余的全部并入一个切片中。
2.小文件情场:默认的切片机制会造成大量的maptask处理很少的数据量,这样效率很低下:
解决方案:
a.上上策:在把小文件上传到hdfs之前就进行预处理,事先合并后在上传;
b.上策:事先将小文件进行合并(自己写合并程序);
c.中下策:修改getSplits()的逻辑,把多个小文件当成大文件来处理。
1.2运行过程说明:
1.首先由Driver向resourceManager提交请求运行一个Job命令
2.resourceManager同意之后,返回给一个jobid和存储切片,jar文件的位置
3.客户端根据返回的信息将切片和jar文件上传到hdfs的指定位置中,都是临时文件
4.Driver申请一个容器,运行进程。默认值是1.5G
5.resourceMAnager同意之后,生成容器任务,放进资源队列
6.当任务开始执行的时候,创建任务容器,mapReduceAppManager加载任务信息
7.Driver发送一个启动命令,运行程序,mapReduceAppManager接受命令,加载配置信息
8.并且向ResourceManager申请container运行maptask(yarnchild)
9.maptask领到资源之后,根据mapReduceAppManager加载的任务信息下载jar包和切片 配置文件等
10.mapTask开始运行,进行数据处理
11.当mapTask运行结束后,向resourceManager申请新的容器,运行新的yarnchild(reduce Task)
12.reduceTask开始运行,拉取数据
13.当所有的任务执行完毕之后,mapReduceAppManager向resourceManager注销本次的job,并推出程序。