注意:本文基于前两篇教程
Linux 系统 CentOS7 上搭建 Hadoop HDFS集群详细步骤
MapReduce 是 Apache Hadoop 项目中的一种编程模型,用于大规模数据集的并行处理。在 Hadoop 中,MapReduce 使用 Java API 来编写 Map 和 Reduce 函数。
API 简介
以下是 MapReduce 相关的核心 Java API 类和接口的概览::
-
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 { // ... 聚合逻辑 ... } }
-
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);
-
InputFormat:
- 如
org.apache.hadoop.mapreduce.lib.input.TextInputFormat
等,定义了如何从输入源读取数据并切分成键值对供给Mapper。
- OutputFormat:
- 如
org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
等,定义了如何将Reducer的输出写入到HDFS或其他存储系统中。
- Writable:
- Hadoop中用于序列化和反序列化的基类,例如
LongWritable
,Text
,IntWritable
等,用于在MapReduce过程中传输和持久化数据。
- Configuration:
org.apache.hadoop.conf.Configuration
类用于保存和加载作业的配置参数。
- Context:
- 在Mapper和Reducer中可用的对象,提供与上下文交互的能力,如写入键值对、报告进度和状态等。
-
RecordReader 和 RecordWriter:
- 分别负责读取输入文件数据并转换为键值对(由InputFormat提供),以及将Reducer的输出写出到目标文件(由OutputFormat提供)。
通过以上这些API组件,开发者可以构建出复杂的批处理任务,利用Hadoop分布式计算能力处理海量数据。
API 应用开发
MapReduce 应用开发步骤:
- 创建 Mapper 类
- 创建 Reducer 类
- 设置和提交 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