8天学习hadoop的视频学习笔记(1)--mr程序的几种提交运行模式以及shuffle机制

1.mr程序的几种提交运行模式(windows本地的和集群的,我都没去实践成功)
1.1本地模式运行
(1)在windows的eclpise里面直接运行main方法,就会将job提交给本地执行器lcoaljobrunner执行
—输入输出数据可以放在本地路径下(D:/wc/data)
也可以放在hdfs中
(2)在linux的eclpise里面直接运行main方法,但是不要添加yarn相关的配置,就会将job提交给本地执行器lcoaljobrunner执行
—输入输出数据可以放在本地路径下(D:/wc/data)
也可以放在hdfs中
1.2集群模式运行
(1)将工程打包成jar包,上传到服务器,然后用hadoop命令执行(不能dubug调试)
(2)在linux的eclpise中直接运行main方法,也可以提交到集群中去运行,但要进行下面配置:
—在工程src目录下加入mapred-site.xml,yarn-site.xml配置文件
—将工程打包成jar包,然后同时在main方法中添加conf.set(“mapreduce.job.jar”, “wc.jar”);
(3)在windows的eclpise中直接运行main方法,也可以提交到集群中去运行,但因为平台不兼容,需要做很多配置,比如:
–在windows中存放本地hadoop包(解压好的)
–配置系统环境变量HADOOP_HOME和PATH
–修改YarnRunner这个类的源码
------(所以不建议在windows做)
2. Shuffle的大致流程为:Maptask会不断收集我们的map()方法输出的kv对,放到内存缓冲区中,当缓冲区达到饱和的时候(默认占比为0.8)就会溢出到磁盘中,如果map的输出结果很多,则会有多个溢出文件,多个溢出文件会被合并成一个大的溢出文件,在文件溢出、合并的过程中,都要调用partitoner进行分组和针对key进行排序(默认是按照Key的hash值对Partitoner个数取模),之后reducetask根据自己的分区号,去各个maptask机器上取相应的结果分区数据,reducetask会将这些文件再进行合并(归并排序)。
合并成大文件后,shuffle的过程也就结束了,后面进入reducetask的逻辑运算过程(从文件中取出每一个键值对的Group,调用UDF函数(用户自定义的方法))
---- Shuffle 中的缓冲区大小会影响到 mapreduce 程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快,正是因为Shuffle的过程中要不断的将文件从磁盘写入到内存,再从内存写入到磁盘,从而导致了Hadoop中MapReduce执行效率相对于Storm等一些实时计算来说比较低下的原因。

你可能感兴趣的:(个人学习记录)