简介
本教程将指导你完成在 Hadoop 分布式文件系统(HDFS)中存储的数据上执行 MapReduce 作业的过程。你将学习如何设置 Hadoop 环境,并使用强大的 Hadoop 框架运行 MapReduce 作业来处理和分析大规模数据。
本教程将指导你完成在 Hadoop 分布式文件系统(HDFS)中存储的数据上执行 MapReduce 作业的过程。你将学习如何设置 Hadoop 环境,并使用强大的 Hadoop 框架运行 MapReduce 作业来处理和分析大规模数据。
Hadoop 是一个开源软件框架,用于在分布式计算环境中存储和处理大型数据集。它旨在从单台服务器扩展到数千台机器,每台机器都提供本地计算和存储功能。Hadoop 基于谷歌文件系统(GFS)和 MapReduce 编程模型。
MapReduce 是一种编程模型和软件框架,用于在分布式计算环境中处理大型数据集。它由两个主要任务组成:Map 任务和 Reduce 任务。Map 任务获取输入数据并将其转换为一组键值对,而 Reduce 任务获取 Map 任务的输出并将这些数据元组合并为一组更小的元组。
Hadoop 和 MapReduce 在各种行业中都有广泛应用,包括:
Hadoop 需要系统上安装 Java。你可以使用以下命令安装最新版本的 Java:
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk
从官方网站下载最新版本的 Hadoop:https://hadoop.apache.org/releases.html
使用以下命令解压下载的文件:
tar -xzf hadoop-3.3.4.tar.gz
在文本编辑器中打开 .bashrc
文件:
nano ~/.bashrc
在文件中添加以下行:
export HADOOP_HOME=/path/to/hadoop-3.3.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存文件并退出文本编辑器。
重新加载 .bashrc
文件:
source ~/.bashrc
导航到 Hadoop 配置目录:
cd $HADOOP_HOME/etc/hadoop
打开 core-site.xml
文件并添加以下配置:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
打开 hdfs-site.xml
文件并添加以下配置:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
保存配置文件。
初始化 HDFS 名称节点:
hdfs namenode -format
启动 HDFS 守护进程:
start-dfs.sh
验证 HDFS 是否正在运行:
jps
你应该看到 NameNode
、DataNode
和 SecondaryNameNode
进程正在运行。
恭喜!你现在已经在 Ubuntu 22.04 系统上设置好了 Hadoop 环境。
在 HDFS 中创建一个目录来存储输入数据:
hdfs dfs -mkdir /input
将输入数据复制到 HDFS 目录:
hdfs dfs -put /path/to/input/data /input
在你喜欢的 IDE 中创建一个新的 Java 项目。
将 Hadoop 依赖项添加到你的项目中:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.4</version>
</dependency>
</dependencies>
为你的 MapReduce 作业创建一个新的 Java 类:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static class WordCountMapper extends Mapper<Object, Text, Text, IntWritable> {
// 实现 map 逻辑
}
public static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
// 实现 reduce 逻辑
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path("/input"));
FileOutputFormat.setOutputPath(job, new Path("/output"));
System.exit(job.waitForCompletion(true)? 0 : 1);
}
}
编译 MapReduce 作业:
mvn clean package
运行 MapReduce 作业:
hadoop jar target/word-count-1.0-SNAPSHOT.jar WordCount
在 HDFS 输出目录中检查输出:
hdfs dfs -ls /output
hdfs dfs -cat /output/part-r-00000
恭喜!你已经使用 Hadoop 在 HDFS 数据上成功执行了一个 MapReduce 作业。
在本 Hadoop 教程中,你已经学习了如何准备 Hadoop 环境以及在 HDFS 数据上执行 MapReduce 作业。通过理解 Hadoop 和 MapReduce 的基本原理,你现在可以利用这个分布式计算框架的强大功能来高效地处理和分析海量数据集。