• 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()方法,例如以下代码:

    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()方法,例如以下代码:

    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类,代码结构如下:

    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集群。

    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

  • 相关阅读:
    support STL Viewer with WordPress On SAE
    个人自建网店(WordPress WooCommerce on SAE)集成支付宝支付
    问题解决: WordPress on SAE注册邮件无法发送
    移除Strorefront站点footer上的Storefront Design By WooThemes字样
    添加站点图标: 为SAE上的WordPress站点添加自己的Favicon
    在SAE上搭建自定义版本WordPress, 并用SAE Storage代替WordPress Uploads
    swift + xcode 新手上路
    Mac Yosemite下Android Studio环境问题集合
    分支(选择)语句
    Java入门
  • 原文地址:https://www.cnblogs.com/ooo0/p/16874152.html
Copyright © 2020-2023  润新知