0
点赞
收藏
分享

微信扫一扫

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

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

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

YARN 集群和 MapReduce 原理及应用

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 应用开发的步骤。

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

  • windows 本地执行:不需要打 jar 包
  • linux 集群环境执行:需要打 jar 包,提交到集群服务器上通过命令调用执行
windows 本地执行
1. 创建 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 (
举报

相关推荐

0 条评论