MapReduce Java API
MapReduce是Hadoop的一个核心组成框架
一个MapReduce任务主要包括两部分:Map任务和Reduce任务。
Map任务负责对数据的获取、分割与处理,其核心执行方法为map()方法;
Reduce任务负责对Map任务的结果进行汇总,其核心执行方法为reduce()方法。
MapReduce将并行计算过程高度抽象到了map()方法和reduce()方法中,程序员只需负责这两个方法的编写工作,而并行程序中的其他复杂问题(如分布式存储、工作调度、负载均衡、容错处理等)均可由MapReduce框架代为处理
MapReduce程序编写步骤
Hadoop支持多种语言开发MapReduce程序,但是对Java语言的支持最好,其提供了很多方便的Java API接口。
那么如何使用Java来编写一个MapReduce程序呢?编写一个MapReduce程序需要新建三个类:Mapper类、Reducer类、程序执行主类。当然,Mapper类和Reducer类也可以作为内部类放在程序执行主类中。
1. 新建Mapper类
新建一个自定义Mapper类MyMapper.java,该类需要继承MapReduce API提供的Mapper类并重写Mapper类中的map()方法,例如以下代码:
1 2 3 4 5 6 | public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> { //重新map()函数 public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //业务逻辑 } } |
2. 新建Reducer类
新建一个自定义Reducer类MyReducer.java,该类需要继承MapReduce API提供的Reducer类并重写Reducer类中的reduce()方法,例如以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class MyReducer extends Reducer<MyKeyPair, IntWritable, Text, IntWritable> { /** * 重写reduce()方法 */ public void reduce(MyKeyPair key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //定义Text类型的输出key Text outKey = new Text(); //迭代输出<key,value>对 for (IntWritable value : values) { outKey.set(key.getFirst()); context.write(outKey, value); } } } |
3. 新建程序执行主类
程序执行主类为MapReduce程序的入口类,主要用于启动一个MapReduce作业。
新建一个程序执行主类MyMRApplication.java,在该类的main()方法中添加任务的配置信息,并指定任务的自定义Mapper类和Reducer类,代码结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class MyMRApplication { public static void main(String[] args) throws Exception { //构建Configuration实例 Configuration conf = new Configuration(); //其它配置信息代码... //获得Job实例0 Job job = Job.getInstance(conf, "My job name" ); //其它job配置代码... //设置MapperReduce处理类 job.setMapperClass(MyMapper. class ); // job.setCombinerClass(MyReducer.class); //设置输入和输出目录... //提交任务 } } |
4. 提交程序到集群
提交程序之前需要启动Hadoop集群,包括HDFS和YARN。因为HDFS存储了MapReduce程序的数据来源,而YARN则负责MapReduce任务的执行、调度以及集群的资源管理。
将包含自定义的Mapper类、Reducer类和程序执行主类的Java项目打包为jar包并上传到HDFS的NameNode节点,然后执行以下命令提交任务到Hadoop集群。
1 | hadoop jar MyMRApplication.jar com.hadoop.mr.MyMRApplication |
上述命令中的MyMRApplication.jar为程序打包后的jar文件,com.hadoop.mr为程序执行主类MyMRApplication.java所在的包名称。
书籍:Hadoop大数据技术开发实战 第5章 MapReduce
https://gitee.com/caoyeoo0/xc-springboot/blob/hadoopApi/src/main/java/com/xc/xcspringboot/test/WordCount.java
https://gitee.com/caoyeoo0/xc-springboot/blob/hadoopApi/src/main/java/com/xc/xcspringboot/test/Dedup.java
https://gitee.com/caoyeoo0/xc-springboot/blob/hadoopApi/src/main/java/com/xc/xcspringboot/test/Score.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2021-11-09 COLA 4.0 整洁面向对象分层架构