Hadoop 单机模式

classDiagram

Hadoop 单机模式是一种用于学习和开发目的的 Hadoop 配置方式。它允许用户在自己的计算机上模拟 Hadoop 集群的功能,从而可以在不具备真正分布式环境的情况下进行 Hadoop 应用的开发和测试。

在 Hadoop 单机模式中,所有的 Hadoop 组件都运行在单个节点上,包括 HDFS(Hadoop 分布式文件系统)和 MapReduce(Hadoop 分布式计算框架)。这使得用户能够以较小规模的数据集进行实验,而无需投入大量的硬件资源。这对于初学者来说非常有用,因为他们可以在没有大规模集群的情况下,逐步学习和理解 Hadoop 的基本概念和操作。

接下来,我们将介绍如何在 Hadoop 单机模式下设置和运行一个简单的示例。

环境准备

首先,你需要下载并安装 Java 开发工具包(JDK)。Hadoop 是用 Java 编写的,并且需要 Java 环境来运行。你可以从 Oracle 官方网站上下载适合你操作系统的 JDK 版本,并按照官方文档进行安装。

在安装完 JDK 后,你还需要下载并安装 Hadoop。你可以从 Hadoop 官方网站上下载最新版本的 Hadoop 安装包,并按照官方文档进行安装。在安装过程中,你需要指定 Hadoop 的安装路径,并将其添加到系统的环境变量中。

Hadoop 单机模式配置

一旦你完成了 Hadoop 的安装,你需要对 Hadoop 进行一些配置,以便在单机模式下运行。以下是一些常见的配置步骤:

  1. 打开 Hadoop 安装目录中的 hadoop-env.sh 文件,找到 JAVA_HOME 的配置行,并设置正确的 Java 安装路径。
export JAVA_HOME=/path/to/your/java/home
  1. 打开 Hadoop 安装目录中的 core-site.xml 文件,添加以下配置以指定 HDFS 的默认文件系统和临时目录:
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/path/to/your/hadoop/tmp</value>
  </property>
</configuration>
  1. 打开 Hadoop 安装目录中的 hdfs-site.xml 文件,添加以下配置以指定 HDFS 数据存储目录:
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/path/to/your/hadoop/data/nameNode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/path/to/your/hadoop/data/dataNode</value>
  </property>
</configuration>

运行 Hadoop 单机模式

完成配置后,你可以启动 Hadoop 单机模式并运行一个简单的示例程序。

首先,你需要格式化 HDFS,这将创建必要的目录结构和文件:

$ hdfs namenode -format

接下来,你可以启动 HDFS 和 MapReduce:

$ start-dfs.sh
$ start-yarn.sh

现在,你可以将一些数据上传到 HDFS,并运行一个简单的 MapReduce 作业来处理这些数据。

首先,创建一个输入目录并将一些文本文件复制到该目录中:

$ hdfs dfs -mkdir /input
$ hdfs dfs -put /path/to/your/local/files/* /input

创建一个 MapReduce 的 Java 类,用于处理输入数据:

import java.io.IOException;
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.File