首页 理论教育 使用HadoopMapReduce编写程序

使用HadoopMapReduce编写程序

时间:2023-11-20 理论教育 版权反馈
【摘要】:但目前所使用的是Hadoop自带的程序包,这些程序都是通过Hadoop的MapReduce框架编写的示例程序,下面利用MapReduce框架编写一个程序。4)Mapper的最终结果将以文件形式放到本地文件系统,等待Reducer获取。现在以WordCount为例介绍MapReduce编程接口。图3-9 使用Eclipse开发环境执行WordCount程序本节我们学习了Hadoop自带的例子,对Hadoop的使用有了初步了解。Hadoop通过支持MapReduce框架为应用程序提供了易于理解的并行编程模型。在早期使用Hadoop时没有正式的商业厂商支持,当遇到问题时,很难快速得到技术支持。

使用HadoopMapReduce编写程序

通过前面的讲解,我们搭建了属于自己的Hadoop分布式计算环境。但目前所使用的是Hadoop自带的程序包,这些程序都是通过Hadoop的MapReduce框架编写的示例程序,下面利用MapReduce框架编写一个程序。

MapReduce框架主要对<key,value>(键值对)进行操作,即该框架将输入参数视为一个由<key,value>组成的集合,并且输出结果也是由<key,value>组成的集合。

在Hadoop中键值与键值所对应的数据值都需要被序列化后才可以使用,Hadoop提供多种序列化键值对的方法,默认的序列化方法需要用户实现Writable接口。另外,键值一般要可排序,这就需要实现WritableComparable接口。

一个典型的MapReduce工作输入和输出如下所示:

(输入)<k1,v1>→map→<k2,v2>→combine→<k2,v2>→reduce→<k3,v3>(输出)

1)Mapper通过HDFS得到需要处理的文件。

2)对文件的每一行进行map处理。

3)Combiner(组合)对map的结果进行预处理(可选)。

4)Mapper的最终结果将以文件形式放到本地文件系统,等待Reducer获取。

5)Reducer根据具体应用逻辑向JobTracker查询所需的文件在哪个计算节点上,通过Http方式获取所需的数据。

6)Reducer根据Key值处理Mapper的输出结果。

7)Reducer将最终结果以文件形式输出到HDFS上。

现在以WordCount为例介绍MapReduce编程接口。WordCount程序的目的是统计文件中关键字出现的次数,它可以被用在搜索引擎中,针对关键字所涉及的项目进行统计。该程序的代码如代码清单3-6所示。

【代码清单3-6】

978-7-111-36687-4-Chapter03-25.jpg

978-7-111-36687-4-Chapter03-26.jpg

978-7-111-36687-4-Chapter03-27.jpg

可以使用命令编译并打包程序,如下所示。

创建wordcount_classes文件夹。(www.xing528.com)

978-7-111-36687-4-Chapter03-28.jpg

编译程序

978-7-111-36687-4-Chapter03-29.jpg

打包程序。

978-7-111-36687-4-Chapter03-30.jpg

这里使用/user/skater/wordcount/input作为输入文件夹,Mapper会遍历该文件夹下所有的文件。/user/skater/wordcount/output作为Reducer输出文件夹,输入文件夹内容如代码清单3-7所示:

【代码清单3-7】

978-7-111-36687-4-Chapter03-31.jpg

执行应用,如代码清单3-8所示。

【代码清单3-8】

978-7-111-36687-4-Chapter03-32.jpg

输出结果:

978-7-111-36687-4-Chapter03-33.jpg

我们也可以通过Eclipse集成环境执行应用。单击RunAs→RunOnHadoop,如图3-9所示选择Hadoop集群。

978-7-111-36687-4-Chapter03-34.jpg

图3-9 使用Eclipse开发环境执行WordCount程序

本节我们学习了Hadoop自带的例子,对Hadoop的使用有了初步了解。Hadoop通过支持MapReduce框架为应用程序提供了易于理解的并行编程模型。同时,Hadoop拥有比较好的社区论坛,并且代码开源,这为我们学习使用Hadoop带来了一定的便捷。

在早期使用Hadoop时没有正式的商业厂商支持,当遇到问题时,很难快速得到技术支持。笔者在使用Hadoop的过程中碰到过一些问题,其中有的问题通过它的日志文件没法立刻解决,最终通过求助于Hadoop社区、搜索、读源代码等方式解决了问题,但花费时间较长。从2011年起,Cloudera、PlatformComputing等众多公司都提供了相应的商业支持版本。但作为学习,笔者仍然推荐Hadoop,商业版本有更好的性能以及安全性,开源版本更有利于我们通过阅读源代码学习Hadoop的工作原理。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈