一、MapReduce1.0运行模型

二、MapReduce编程模型之执行步骤
1、准备map处理的输入数据
2、交给Mapper进行处理
3、Shuffle【规则可以自己控制】
4、Reduce处理[合并、归并]
5、输出
MapReduce处理流程
InputFormat读数据,通过Split将数据切片成InputSplit,通过RecordReader读取记录,再交给map处理,处理后输出一个临时的<k,v>键值对,再将结果交给shuffle处理,最终在reduce中将最后处理后的<k,v>键值对结果通过OutputFormat重新写回到HDFS中。

三、词频统计原理图:

Combiner能减少网络IO、提升作业的性能
Combiner的局限性:求平均数:总数 / 个数 对于含有除法的操作,需要慎重,有可能结果会不正确
四、词频统计具体代码实现[读写在HDFS和本地完成]
0、pom.xml
1、准备一个自定义的Mapper类
讯享网
2、准备一个自定义的Reducer类
读写在HDFS完成
3、准备一个任务驱动类
讯享网
4、将文件上传到HDFS的/wordcount/input中(没有创建提前创建好该文件夹)
1.txt
读写在本地中完成
将上述的第四步改为:
在工程下创建一个input文件夹

修改上述第三步的代码,只new Configuration()即可,最后把输入路径改成input、输出路径改成output即可

运行测试
运行WordCountLocalApp
得到最终结果输出:

输出结果:

五、关于自定义复杂类型的介绍
六、NullWritable介绍
若Mapper或Reducer中某个输入或输出不想输出显示,则使用NullWritable替换我们常用的类型(如Text、LongWritable)等
Plus:NullWritable.get(),返回NullWritable类型
七、自定义Partitioner介绍
默认情况下Map的输出需要做shuffle操作,将key根据一定的算法分发到Reduce上执行【如相同的key,或者具有相似特征的key】,我们也可以自定义分区写数据
基础词频计数器java

numReduceTasks:你的作业所指定的reducer的个数,决定了reduce作业输出文件的个数
HashPartitioner是MapReduce默认的分区规则
在job任务驱动类中加上一行代码:
观察output文件输出:【总共4个文件】
总结:Partitioner决定maptask输出的数据交由哪个reducetask处理
默认实现:分发的key的hash值与reduce task个数取模
八、程序修改为在Yarn上运行
第一步
那么outputPath、和inputPath则不能写死,修改为args[0]、args[1]
第二步
进入工程,执行maven打包命令
打包完成后jar包在当前项目的 target/文件夹内

在hadoop机器上执行
总结:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/4954.html