操作文档参考:
http://hadoop.apache.org/docs/r2.6.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

MapReduce处理流程:

输入: 一系列的键值对<k1,v1>
map: map<k1,v1>转换成<k2,v2>
reduce: <k2,v2>转换成<k3,v3>
输出: 一系列的键值对<k3,v3>

流程解析:读取文件 splitting拆分 mapping计算 shuffling洗牌排序 汇总 结果统计

wordCount源码解析:

1.wordCount代码如下:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WordCount {//自定义mapper处理类public static class MyMapper extends Mapper<LongWritable, Text, Text, LongWritable> {//map:分割任务。 编程模型中的Mapping@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {LongWritable one = new LongWritable(1);//接收到每一行数据String line = value.toString();//按照指定的分隔符进行拆分String[] words = line.split(" ");//遍历每个单词,并且通过context把map的处理结果进行输出for (String word : words) {context.write(new Text(word), one);}}}//自定义reducer处理类(map的输出作为reduce的输入)public static class MyReducer extends Reducer<Text, LongWritable, Text, LongWritable> {@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {//设置统计的初始值为0long sum = 0;for (LongWritable value : values) {sum += value.get();}//统计最终的结果context.write(key, new LongWritable(sum));}}//处理作业public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {//创建Configuration对象Configuration cfg = new Configuration();//创建jobJob job = Job.getInstance(cfg, "wordcount");//设置job的处理类job.setJarByClass(WordCount.class);//设置map相关的job.setMapperClass(MyMapper.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//设置reduce相关的/*** 深入了解Combiners编程(相当于Map端的Reduce)每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少 传输到reducer的数据量。combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能。如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner, 先完成的map会在本地聚合,提升速度。注意:Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致, 且不影响最终结果的场景。比如累加,最大值等。*/job.setCombinerClass(MyReducer.class);job.setReducerClass(MyReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//判断输入和输出目录是否存在FileSystem fs = FileSystem.get(cfg);if (!fs.exists(new Path(args[0]))) {System.out.println("您要处理的目录不存在!");}//输出路径如果事先存在,程序会报错。fs.deleteOnExit( new Path(args[1]));//设置作业处理的输入路径FileInputFormat.addInputPath(job, new Path(args[0]));//设置作业处理的输出路径FileOutputFormat.setOutputPath(job, new Path(args[1]));//执行作业boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

2.wordCount代码编辑完毕后,给项目添加主类:File-Project Structure

3.package打成jar包,到target取出jar包,传到Ubuntu。
4.虚拟机Ubuntu启动。启动dfs,jps查看检查:

start-dfs.sh
jps


dfs启动成功后可到IP+50070访问到:

5.启动yarn:

start-yarn.sh

yarn启动成功后可访问到IP+8088网址:

6.把编辑好的文件hello.txt(数据模拟)先上传到虚拟机的opt下,再上传到hadoop的input下,并查看

hadoop dfs -put /opt/hello.txt /input
hadoop dfs -text /input/hello.txt
#查看显示的内容如下:
deer bear river
car car river
Deer car bear

7.把打包好的jar放到app的temp路径下,运行jar包:

hadoop jar test-hdfs-1.0-SNAPSHOT.jar com.kgc.WordCount /input /output



8.执行完毕,可在50070网页查看到增加了output文件夹,里面还多了2个文件,可查看到对hello.txt的内容进行了计数统计:
查看:

hadoop dfs -cat /output/part-r-00000


在任务运行过程中查看 http://192.168.1.14:8088 ,可以看到任务的状态

MapReduce处理流程wordCount源码解析和操作流程相关推荐

  1. MapReduce的分片机制源码解析

    目录 一.分⽚的概念 二.分片大小的选择 三.源码解析 1)FileSplit源码解析 2)FileInputFormat源码解析 3)TextInputFormat源码解析 4) LineRecor ...

  2. HDFS追本溯源:HDFS操作的逻辑流程与源码解析

    转自:http://www.it165.net/admin/html/201404/2726.html 本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口 ...

  3. 源码解析 --skywalking agent 插件加载流程

    1. 插件 目前很多框架,都采用框架 + 插件的模式开发. 如DataX.FlinkX通过插件支持众多异构数据源, Skywalking通过插件实现针对很多软件如redis.mysql.dubbo等方 ...

  4. Android之AsyncTask源码解析

    转载请标明出处:[顾林海的博客] 个人开发的微信小程序,目前功能是书籍推荐,后续会完善一些新功能,希望大家多多支持! ##前言 AsyncTask是一种轻量级的异步任务类,内部封装了Thread和Ha ...

  5. OkHttp3源码解析(三)——连接池复用

    OKHttp3源码解析系列 OkHttp3源码解析(一)之请求流程 OkHttp3源码解析(二)--拦截器链和缓存策略 本文基于OkHttp3的3.11.0版本 implementation 'com ...

  6. netty依赖_Netty系列之源码解析(一)

    接下来的时间灯塔君持续更新Netty系列一共九篇 当前:Netty 源码解析(一)开始 Netty 源码解析(二): Netty 的 Channel Netty 源码解析(三): Netty 的 Fu ...

  7. webpack那些事:浅入深出-源码解析构建优化

    基础知识回顾 入口(entry) module.exports = {entry: './path/to/my/entry/file.js' }; //或者 module.exports = {ent ...

  8. Myth源码解析系列之六- 订单下单流程源码解析(发起者)

    前面一章我们走完了服务启动的源码,这次我们进入下单流程的源码解析~ 订单下单流程源码解析(发起者) 首先保证myth-demo-springcloud-order.myth-demo-springcl ...

  9. Glide的源码解析(一)(附方法调用图)

    前言 上一篇博客讲了Glide的基本使用,知其然,也要知其所以然,这篇博客一起来学习Glide的源码.如果不知道Glide的基本使用,可以看上一篇博客:http://blog.csdn.net/luo ...

  10. 渣渣菜鸡的 ElasticSearch 源码解析 —— 启动流程(上)

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/08/11/es-code02/ 前提 上篇文章写了 ElasticSearch 源码解析 -- ...

最新文章

  1. 使用curl操作InfluxDB
  2. python怎么读取pdf为文本_python怎么读取pdf文本内容
  3. 走线画直线_画画教程,只用1支铅笔,教你画一幅毛绒小熊
  4. OLTP与OLAP介绍
  5. arch linux安装和dwm窗口管理器安装
  6. 安装VMware虚拟机及镜像文件
  7. 永不消逝的电波(一):无线电入门篇
  8. 关于tomcat启动报错Error deploying web application directory [C:\......]出现的其中一种问题解决:
  9. 【TPU和GPU,谁将一统AI芯片】摩尔定律之后一万倍,10万+热文引爆激辩
  10. oracle11g自动内存管理好吗,Oracle11G新特性的研究之【自动内存管理】
  11. 电脑端如何多开微信 如何用命令行打开程序(将快捷方式复制到C:\Windows\System32目录下)
  12. hin2vec 异质信息网络表示学习 个人笔记
  13. 职业生涯发展理论(精)
  14. 您的证书可以申请个人所得税的退税么?
  15. mysql slow query_Mysql 开启 Slow 慢查询
  16. SuperPoint特征检测算法TrainEvaluate教程
  17. 十年学会程序设计(十年磨一剑)
  18. 『精品素材』20套免费的网页小图标素材下载
  19. VTN系列多通道振弦模拟信号采集仪
  20. ubuntu免费下载----百度网盘

热门文章

  1. 迅雷方舟与花瓣:不一样的“瀑布流”
  2. 三角函数回忆:三角恒等式、三角曲线、三角形的边角关系
  3. android 动画-补间动画
  4. k2-fsa differentiable Finite State Acceptor(Dan 的 toturial总结)
  5. Lumen 中对 Dingo API 异常接管并自定义响应结果
  6. centos7更新nvidia显卡驱动
  7. re.sub()用法的详细介绍
  8. 商品历史价格查询网站分享
  9. 项目 | Java+PhantomJs爬虫实战——半次元 下载高清原图
  10. 练一练思维缜密程度。有程式xyz+yzz=532,其中x、y、z都是整数,用c++编写一个程序,求x、y、z分别代表什么数字