首页 > 编程语言 >大数据之 MapReduce 相关的 Java API 应用

大数据之 MapReduce 相关的 Java API 应用

时间:2024-04-02 09:32:52浏览次数:32  
标签:Mapper Java MapReduce hadoop job API apache org

注意:本文基于前两篇教程

Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤

YARN 集群和 MapReduce 原理及应用

MapReduce 是 Apache Hadoop 项目中的一种编程模型,用于大规模数据集的并行处理。在 Hadoop 中,MapReduce 使用 Java API 来编写 Map 和 Reduce 函数。

API 简介

以下是 MapReduce 相关的核心 Java API 类和接口的概览::

  1. Mapper:

    • org.apache.hadoop.mapreduce.Mapper: 定义了映射阶段的接口,程序员需要实现这个接口来处理输入数据并生成中间键值对。
    public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
         
        // 实现map方法
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
         
            // ... 处理逻辑 ...
        }
    }
    

    2.Reducer:

    • org.apache.hadoop.mapreduce.Reducer: 定义了归约阶段的接口,程序员需要实现这个接口来聚合Mapper产生的中间键值对。
        public class MyReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
         
           // 实现reduce方法
           protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
         
               // ... 聚合逻辑 ...
           }
       }  
    
  2. Job:

    • org.apache.hadoop.mapreduce.Job: 代表一个MapReduce作业,用来设置作业的各种属性,包括输入输出路径、mapper和reducer类、job配置等,并提交作业到集群运行。
    Job job = Job.getInstance(conf, "my-job");
    job.setJarByClass(MyJob.class);
    job.setMapperClass(MyMapper.class);
    job.setReducerClass(MyReducer.class);
    FileInputFormat.addInputPath(job, new Path(inputPath));
    FileOutputFormat.setOutputPath(job, new Path(outputPath));
    job.waitForCompletion(true);
    
  3. InputFormat:

  • org.apache.hadoop.mapreduce.lib.input.TextInputFormat 等,定义了如何从输入源读取数据并切分成键值对供给Mapper。
  1. OutputFormat:
  • org.apache.hadoop.mapreduce.lib.output.TextOutputFormat 等,定义了如何将Reducer的输出写入到HDFS或其他存储系统中。
  1. Writable:
  • Hadoop中用于序列化和反序列化的基类,例如 LongWritable, Text, IntWritable 等,用于在MapReduce过程中传输和持久化数据。
  1. Configuration:
  • org.apache.hadoop.conf.Configuration 类用于保存和加载作业的配置参数。
  1. Context:
  • 在Mapper和Reducer中可用的对象,提供与上下文交互的能力,如写入键值对、报告进度和状态等。
  1. RecordReaderRecordWriter:

    • 分别负责读取输入文件数据并转换为键值对(由InputFormat提供),以及将Reducer的输出写出到目标文件(由OutputFormat提供)。

通过以上这些API组件,开发者可以构建出复杂的批处理任务,利用Hadoop分布式计算能力处理海量数据。

API 应用开发

MapReduce 应用开发步骤:

  1. 创建 Mapper 类
  2. 创建 Reducer 类
  3. 设置和提交 Job

下面我们以单词数量统计为例,来学习 MapReduce 应用开发的步骤。

这里我们分两种方式来执行作业:

  • windows 本地执行:不需要打 jar 包
  • linux 集群环境执行:需要打 jar 包,提交到集群服务器上通过命令调用执行
windows 本地执行
1. 创建 Mapper 类

Mapper 类是用来处理输入数据并生成中间键值对的

package com.demo2;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * 分片和映射
 * 按行分片
 */
public class WordCounterMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
   
    /**
     * 每个分片都会调用一次 map() 方法
     * @param key
     * @param value
     * @param context
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, LongWritable>.Context context)
          throws IOException, InterruptedException {
   
       //按行切片出来的字符串
       String values = value.toString();
       System.out.println("::"+values);

       //按空白字符分割 提取单词
       String[] wArr = values.split("\\s+");

       //每个单词做
       for (

标签:Mapper,Java,MapReduce,hadoop,job,API,apache,org
From: https://blog.csdn.net/zp8126/article/details/137249538

相关文章

  • 【附源码】JAVA计算机毕业设计汪汪喵宠物寄养中心系统设计与开发(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。人们对宠物的关爱和投入也越来越多,这导致了宠物服务行业的迅速发展。其中,宠......
  • 【附源码】JAVA计算机毕业设计网上扶贫农产品销售系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着互联网技术的迅速发展,传统的农产品销售模式已经不能满足现代消费者的需求。尤其是在扶贫领域,由于地理位置偏远、信息不对称等因素,贫困地区的农产品往往难以打......
  • 2024java攻克了抖音视频去水印视频下载(绝对好使)
    publicstaticvoidmain(String[]args)throwsIOException{System.out.println("----抖音去水印解析----");System.out.println("\n请输入从抖音复制的视频链接:");Scannersc=newScanner(System.in);//Stringinfo=sc.nextLine();......
  • 【附源码】JAVA计算机毕业设计网络安全知识学习系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息技术飞速发展的今天,网络安全已经成为社会关注的热点问题。随着网络应用的普及和互联网技术的不断进步,网络攻击、数据泄露、恶意软件等安全威胁日......
  • 【附源码】JAVA计算机毕业设计网上购物系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代商业交易中不可或缺的一部分。网上购物系统作为电子商务平台的典型代表,以其便捷性、高效性和丰富的商品......
  • 【附源码】JAVA计算机毕业设计网上购物中心(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已成为现代社会中不可或缺的一部分。网络购物因其便捷性、高效性和多样性,受到了广大消费者的喜爱。传统的购物方式需......
  • 【附源码】JAVA计算机毕业设计网上花店系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代社会中一个重要的商业活动形式。网络购物作为电子商务的重要组成部分,以其方便快捷的特点深受广大消费者......
  • 【附源码】JAVA计算机毕业设计网上图书销售系统(源码+mysql+文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代社会中不可或缺的一部分。在线购物系统因其方便快捷的特点被广大消费者接受和喜爱。特别是在图书行业,网......
  • Java:注解
    Java中的注解(Annotations)是一种用于提供元数据的特殊接口,它们可以被用于给代码添加信息,而这些信息可以在编译时、类加载时或运行时被读取,并且可以影响程序的行为。注解不会直接影响程序的逻辑,但它们可以被编译器或运行时环境用来生成额外的代码、进行类型检查或者在运行时进......
  • 学习java第三十天
    Spring容器扩展机制IoC容器负责管理容器中所有bean的生命周期,而在bean生命周期的不同阶段,Spring提供了不同的扩展点来改变bean的命运。在容器的启动阶段,BeanFactoryPostProcessor允许我们在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做一些额外的操作,比......