IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hadoop源码分析(一) -> 正文阅读

[大数据]Hadoop源码分析(一)

2021SC@SDUSC

要分析Hadoop中MapReduce部分的源码,我们需要先了解MapReduce的基本流程:
在这里插入图片描述

以 Hadoop 带的 wordcount 为例子(下面是启动行):

hadoop jar hadoop-0.19.0-examples.jar wordcount /usr/input /usr/output

用户提交一个任务以后,该任务由 JobTracker 协调,先执行 Map 阶段(图中 M1,M2 和 M3),然后执行 Reduce 阶段(图中 R1 和 R2)。Map 阶段和 Reduce 阶段动作都受TaskTracker监控,并运行在独立于TaskTracker的Java虚拟机中。

我们的输入和输出都是 HDFS 上的目录(如上图所示)。输入由 InputFormat 接口描述,它的实现如 ASCII 文件,JDBC 数据库等,分删处理对应的数据源,并提供了数据的一些特征。通过 InputFormat 实现,可以获取 InputSplit 接口的实现,这个实现用于对数据进行划分(图中的 splite1 刡 splite5,就是划分以后的结果),同时从 InputFormat 也可以获取 RecordReader接口的实现,并从输入中生成<k,v>对。

有了<k,v>,就可以开始做 map 操作了。map 操作通过 context.collect(最终通过 OutputCollector. collect)将结果写入 context 中。当 Mapper 的输出被收集后,它们会被 Partitioner 类以指定的方式区分地写出到输出文件里。我们可以为 Mapper 提供 Combiner,在 Mapper输出它的<k,v>时,键值对不会被马上写到输出里,他们会被收集在 list 里(一个 key 值一个 list),当写入一定数量的键值对时,这部
分缓冲会被 Combiner 中迕行合并,然后再输出刡 Partitioner 中(图中 M1 的黄颜色部分对应着 Combiner 和 Partitioner)。

Map 的动作做完以后,进入 Reduce 阶段。返个阶段分 3 个步骤:混洗(Shuffle),排序(sort)和 reduce。

混洗阶段,Hadoop 的 MapReduce 框架会根据 Map 结果中的 key,将相关的结果传输到某一个 Reducer 上(多个 Mapper产生的同一个 key 的中间结果分布在不同的机器上,这一步结束后,他们传输都到了处理返个 key 的 Reducer 的机器上)。这个步骤中的文件传输使用了HTTP 协议。

排序和混洗是一块进行的,这个阶段将来自不同 Mapper 具有相同 key 值的<key,value>对合并到一起。Reduce 阶段,上面通过 Shuffle 和 sort 后得到的<key, (list of values)>会送到 Reducer. reduce 方法中处理,输出的结果通过 OutputFormat,输出到 DFS 中。

以上就是MapReduce的基本流程。

下面分析 org.apache.hadoop.mapreduce.Job 类:

Job类本身是继承自JobContextImpl,并实现了JobContext接口。JobContextImpl是JobContext接口的一个简单实现,给Job类中的相关方法提供了一系列的默认实现。
Job类本身提供的构造函数如下:

Job()
Job(Configuration)
Job(Configuration, String)
Job(Cluster)
Job(Cluster, Configuration)
Job(Cluster, JobStatus, Configuration)

在前3个构造函数的实现中,最终会由configuration生成新的cluster类,从而调用第5个构造函数,而第4和第6个构造函数也会调用第5个构造函数,因此,第5个构造函数是实际上Job类构造的实现。Cluster类提供了访问map/reduce cluster的一系列方法。而Configuration类提供了对于配置信息的访问方法。

除了上面列出的构造函数,Job类还提供了一系列对应的工厂方法:

getInstance()
getInstance(Configuration)
getInstance(Configuration, String)
getInstance(Cluster)
getInstance(Cluster, Configuration)
getInstance(Cluster, JobStatus, Configuration)

通过job类提供的构造函数,我们可以创建一个job对象,利用job类的一些方法,我们可以设置相应的属性,使job对象正常运行,以下是job类中常用的方法:

  1.  job.setJarByClass(WordCount.class)
    

在Java doc中,对于这个function的注释是:Set the Jar by finding where a given class came from,即通过对应的类来设置Jar。

同时,Job类还提供另外一个方法,直接设值Job的Jar文件:setJar(String jar),通过指定全路径,直接设值Job的jar文件。

  1.  job.setMapperClass(TokenizerMapper.class);
    

该方法用来设置Job的Mapper,这里,输入的参数应该是一个Mapper类的子类的class属性。

  1. job.setCombinerClass(IntSumReducer.class);
    

该方法用来设置Job的Combiner。

  1. job.setReducerClass(IntSumReducer.class);
    

用于设置Job的Reducer。

  1. job.setOutputKeyClass(Text.class);
    

用于设置Job的输出Key值所属的类。

  1. job.setOutputValueClass(IntWritable.class);
    

对应第五点,用于设置Job的输出Value值所属的类。

  1. FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    

这里,我们要注意,FileInputFormat的全路径是org.apache.hadoop.mapreduce.lib.input.FileInputFormat,因为原来也有一个FileInputFormat在mapred包下面,那个类已经是Deprecated的类,在新的版本当中,采用org.apache.hadoop.mapreduce.lib.input.FileInputFormat来替换。addInputPath函数将输入的path加入到job的INPUT_DIR中去。FileInputFormat类提供了几个类似的类来实现相关的功能,如:setInputPaths(Job, String),addInputPaths(Job, String),setInputPaths(Job, Path…),addInputPath(Job, Path)。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:35:16  更:2021-10-11 17:37:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:55:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码