购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 MapReduce程序编写步骤

Hadoop支持多种语言开发MapReduce程序,但是对Java语言的支持最好,其提供了很多方便的Java API接口。

那么如何使用Java来编写一个MapReduce程序呢?编写一个MapReduce程序需要新建三个类:Mapper类、Reducer类、程序执行主类。当然,Mapper类和Reducer类也可以作为内部类放在程序执行主类中。具体编写步骤如下。

1. 新建Mapper类

新建一个自定义Mapper类MyMapper.java,该类需要继承MapReduce API提供的Mapper类并重写Mapper类中的map()方法,例如以下代码:

上述代码中的map()方法有三个参数,解析如下。

MapReduce框架会自动调用map()方法并向其传入所需参数的值。传入的每个<key,value>对将调用一次map()方法。

Mapper是MapReduce提供的泛型类,继承Mapper需要传入4个泛型参数,前两个参数为输入key和value的数据类型,后两个参数为输出key和value的数据类型。

Mapper类的定义源码如下:

2. 新建Reducer类

新建一个自定义Reducer类MyReducer.java,该类需要继承MapReduce API提供的Reducer类并重写Reducer类中的reduce()方法,例如以下代码:

上述代码中的reduce ()方法有三个参数,解析如下。

MapReduce框架会自动调用reduce()方法并向其传入所需参数的值。传入的每个<key,value-list>对将调用一次reduce ()方法。

与Mapper类类似,Reducer也是MapReduce提供的泛型类,继承Reducer同样需要传入4个泛型参数,前两个参数为输入key和value的数据类型,后两个参数为输出key和value的数据类型。

Reducer类的定义源码如下:

3. 新建程序执行主类

程序执行主类为MapReduce程序的入口类,主要用于启动一个MapReduce作业。

新建一个程序执行主类MyMRApplication.java,在该类的main()方法中添加任务的配置信息,并指定任务的自定义Mapper类和Reducer类,代码结构如下:

4. 提交程序到集群

提交程序之前需要启动Hadoop集群,包括HDFS和YARN。因为HDFS存储了MapReduce程序的数据来源,而YARN则负责MapReduce任务的执行、调度以及集群的资源管理。

将包含自定义的Mapper类、Reducer类和程序执行主类的Java项目打包为jar包并上传到HDFS的NameNode节点,然后执行以下命令提交任务到Hadoop集群。

上述命令中的MyMRApplication.jar为程序打包后的jar文件,com.hadoop.mr为程序执行主类MyMRApplication.java所在的包名称。

在5.6节的案例分析中,会对MapReduce的程序编写与任务提交进行详细讲解。 R5+mirH5R1k4bd1b7ySoRyJRjGb5bWEmLPi4WBYJ78J3O8akka9QQPGM/kPy8lBi

点击中间区域
呼出菜单
上一章
目录
下一章
×