标签:
分布式编程相对复杂,而Hadoop本身蒙上大数据、云计算等各种面纱,让很多初学者望而却步。可事实上,Hadoop是一个很易用的分布式编程框架,经过良好封装屏蔽了很多分布式环境下的复杂问题,因此,对普通开发者来说很容易,容易到可以照葫芦画瓢。
大多数Hadoop程序的编写可以简单的依赖于一个模板及其变种。当编写一个新的MapReduce程序时,我们通常采用一个现有的MapReduce程序,通过修改达到我们希望的功能就行了。对于写大部分的Hadoop程序来说几乎就是照葫芦画瓢。
使用 Java 语言编写 MapReduce 非常方便,因为 Hadoop 的 API 提供了 Mapper 和 Reducer 抽象类,对开发人员来说,只需要继承这两个抽象类,然后实现抽象类里面的方法就可以了。
一个继承 Mapper 的静态类 MapClass:
该类实现了 map(Text key,Text value,Context context)方法,map 方法包含三个参数:
Text key:每行文件的 key 值(即引用的专利)。
Text value:每行文件的 value 值(即被引用的专利)。
Context context:Map 端的上下文。
map 方法主要就是把字符串解析成 Key-Value的形式,发给 Reduce 端来统计。
需要注意:此任务中的文件输入格式为 KeyValueTextInputFormat,所以 map 方法可以直接将 key/value 作为输出结果。
一个继承 Reducer 的静态类 ReduceClass:
该类实现了 reduce(Text key, Iterable< Text> values, Context context) 方法,reduce 方法包含三个参数:
Text key:Map 端输出的 Key 值。
Iterable< Text> values:Map 端输出的 Value 集合(相同 Key 的集合)。
Context context:Reduce 端的上下文。
reduce 方法的主要功能就是获取 map 方法的 key-value 结果,相同的 Key 发送到同一个 reduce 里处理,然后迭代 Key,把 Value 相加,结果写到 HDFS 系统里面。
驱动方法 run() 解释如下:
Configuration 类:
读取 Hadoop 的配置文件,如 site-core.xml、mapred-site.xml、hdfs-site.xml 等。也可以使用 set 方法进行重新设置,如 conf.set("fs.default.name","hdfs://single.hadoop.dajiangtai.com:9000")。
注意:set 方法设置的值会替代配置文件里面配置的值。
Job 类:
表示一个 MapReduce 任务。Job 的构造方法有两个参数,第一个参数为 Configuration,第二个参数为 Job 的名称(等同于任务的名称)。
Main调用
表示一个 MapReduce 任务。Job 的构造方法有两个参数,第一个参数为 Configuration,第二个参数为 Job 的名称(等同于任务的名称)。
标签:
原文地址:http://www.cnblogs.com/zlslch/p/5058193.html