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

本文详细介绍了如何使用Hadoop MapReduce的Java API进行应用开发,包括在Windows和Linux环境下执行MapReduce作业的步骤,以及常见问题的解决办法。通过创建Mapper和Reducer类,设置并提交Job,实现大数据的并行处理。示例展示了单词计数的应用,帮助读者理解MapReduce的工作原理。
摘要由CSDN通过智能技术生成

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

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 (
  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zp8126

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值