杰瑞科技汇

Hadoop 2教程,核心技术与实战指南?

  1. Hadoop 2.x 核心架构演进:理解为什么 Hadoop 2.x 如此重要。
  2. 环境准备:搭建 Hadoop 2.x 的运行环境(伪分布式模式)。
  3. HDFS 核心操作:分布式文件系统的常用命令。
  4. YARN 核心概念:理解新的资源管理框架。
  5. MapReduce on YARN:如何在 YARN 上运行一个经典的 WordCount 程序。
  6. 总结与展望

Hadoop 2.x 核心架构演进:从 1.x 到 2.x

在 Hadoop 1.x 中,架构相对简单,主要由 HDFSMapReduce 两部分组成,但存在一个严重问题:MapReduce 的 JobTracker 同时承担了资源管理和任务调度两大职责,成为了性能瓶颈,导致集群难以扩展。

Hadoop 2教程,核心技术与实战指南?-图1
(图片来源网络,侵删)

Hadoop 2.x 的核心改进就是引入了 YARN,将资源管理和任务调度分离,实现了更通用、更强大的资源管理框架。

Hadoop 1.x 架构

  • JobTracker: 负责整个作业的调度和监控,管理 TaskTracker 的资源,它是一个单点故障源,且负载过高。
  • TaskTracker: 负责执行具体的任务(Map Task 和 Reduce Task),并向 JobTracker 汇报心跳和任务状态。

Hadoop 2.x (YARN) 架构

YARN 将 JobTracker 的功能拆分成了两个独立的组件:

  1. ResourceManager (RM)

    • 全局资源管理者:负责整个集群的资源管理和分配。
    • 它接收来自客户端的作业请求,并在 NodeManager 的帮助下为作业分配容器。
    • 它是一个全局唯一的进程,是集群的“大脑”。
  2. NodeManager (NM)

    Hadoop 2教程,核心技术与实战指南?-图2
    (图片来源网络,侵删)
    • 单节点资源管理者:负责集群中单个节点的资源管理和任务执行。
    • 它会监控自己节点的资源(CPU、内存)并向 RM 汇报。
    • 它接收来自 AM 的任务,并负责启动和监控容器 中的任务。
  3. ApplicationMaster (AM)

    • 应用程序管家:每个应用程序(如一个 MapReduce 作业)都有自己的 AM。
    • 它的生命周期与应用程序相同,AM 的主要职责是与 RM 协商资源,并与 NM 协作来执行和监控任务。
    • MapReduce 的 AM 会与 RM 协商获取 Map 和 Reduce Task 所需的容器,然后让 NM 在这些容器中启动 Task。

YARN 的优势

  • 通用性:YARN 不仅仅可以运行 MapReduce,还可以运行 Spark、Flink、Hive 等多种计算框架,真正实现了“计算与存储分离”。
  • 可扩展性:资源管理和任务调度分离,集群可以轻松扩展到数千个节点。
  • 高可用性:RM 可以配置为 Active/Standby 模式,避免了单点故障。

环境准备:伪分布式模式安装

伪分布式模式是学习和开发 Hadoop 最便捷的方式,它在单个机器上模拟了多节点的集群环境,所有的 Hadoop 进程(NameNode, DataNode, ResourceManager, NodeManager 等)都在这台机器上以独立进程的形式运行。

1 系统要求

  • 操作系统: Linux (推荐 CentOS 7/8 或 Ubuntu 18.04/20.04)
  • Java: Hadoop 2.x 要求 Java 7 或更高版本,推荐使用 OpenJDK 7/8。
  • Hadoop: 下载稳定版本,如 Hadoop 2.10.x。

2 安装步骤

步骤 1: 创建 Hadoop 用户

sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo usermod -aG sudo hadoop

切换到 hadoop 用户:

su - hadoop

步骤 2: 安装 Java

# Ubuntu
sudo apt update
sudo apt install openjdk-8-jdk -y
# CentOS
sudo yum install java-1.8.0-openjdk-devel -y

配置环境变量 ~/.bashrc:

echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

验证安装:java -version

步骤 3: 下载并解压 Hadoop

wget https://archive.apache.org/dist/hadoop/core/hadoop-2.10.1/hadoop-2.10.1.tar.gz
tar -xzvf hadoop-2.10.1.tar.gz
mv hadoop-2.10.1 ~/hadoop

配置环境变量 ~/.bashrc:

echo 'export HADOOP_HOME=/home/hadoop/hadoop' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc

验证安装:hadoop version

步骤 4: 配置 Hadoop 进入 Hadoop 配置目录 cd ~/hadoop/etc/hadoop/,修改以下核心文件:

  1. core-site.xml:

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
  2. hdfs-site.xml:

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value> <!-- 伪分布式模式,副本数为1 -->
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:///home/hadoop/hadoop_data/namenode</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:///home/hadoop/hadoop_data/datanode</value>
        </property>
    </configuration>

    注意:创建上述目录 mkdir -p ~/hadoop_data/{namenode,datanode}

  3. yarn-site.xml:

    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>localhost</value>
        </property>
    </configuration>
  4. mapred-site.xml (需要从 mapred-site.xml.template 复制):

    cp mapred-site.xml.template mapred-site.xml

    然后编辑 mapred-site.xml:

    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

步骤 5: 配免密登录 Hadoop 进程之间需要通信,配置 SSH 免密登录。

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

测试免密登录:ssh localhost

步骤 6: 格式化 HDFS 并启动集群

# 格式化文件系统(首次启动必须执行,后续不要轻易执行)
hdfs namenode -format
# 启动 HDFS
start-dfs.sh
# 启动 YARN
start-yarn.sh

步骤 7: 验证集群 使用 jps 命令检查进程:

jps

你应该能看到以下进程(顺序可能不同):

  • NameNode
  • DataNode
  • SecondaryNameNode
  • ResourceManager
  • NodeManager

访问 Web UI:

  • HDFS: http://localhost:9870
  • YARN: http://localhost:8088

HDFS 核心操作

HDFS (Hadoop Distributed File System) 是 Hadoop 的存储基石。

1 基本命令

  • 创建目录:
    hdfs dfs -mkdir /input
  • 上传本地文件到 HDFS:
    # 假设有一个本地文件 local.txt
    hdfs dfs -put local.txt /input/
  • 查看 HDFS 文件列表:
    hdfs dfs -ls /input
  • 查看 HDFS 文件内容:
    hdfs dfs -cat /input/local.txt
  • 从 HDFS 下载文件到本地:
    hdfs dfs -get /input/local.txt downloaded.txt
  • 删除 HDFS 文件/目录:
    hdfs dfs -rm -r /input

YARN 核心概念

  • Container (容器): YARN 资源分配的基本单位,它包含了一组资源(如 vCPU, 内存)以及运行任务所需的环境信息。
  • Application (应用程序): 一个完整的计算任务,比如一个 MapReduce 作业、一个 Spark 应用。
  • ApplicationMaster (AM): 每个应用一个,负责向 RM 申请资源,并与 NM 协作来执行任务。
  • ResourceManager (RM): 集群的“大脑”,负责全局资源调度。
  • NodeManager (NM): 每个节点一个,负责节点的资源管理和任务执行。

YARN 运行一个应用的生命周期:

  1. 客户端向 RM 提交一个应用。
  2. RM 为该应用分配一个容器,并在其中启动 AM。
  3. AM 向 RM 注册自己,并开始向 RM 申请运行任务所需的资源。
  4. RM 根据集群资源情况,将可用的容器分配给 AM。
  5. AM 与对应的 NM 通信,指示 NM 在分配的容器中启动任务。
  6. NM 启动任务,并将任务的状态和进度汇报给 AM。
  7. AM 将任务的状态和进度汇报给 RM,客户端可以通过 RM 查看应用状态。
  8. 所有任务完成后,AM 注销,RM 回收该应用的资源。

MapReduce on YARN:WordCount 示例

我们将运行 Hadoop 自带的 WordCount 示例程序。

步骤 1: 准备输入数据 我们使用 HDFS 上的 /input 目录作为输入,如果没有数据,可以创建一个。

# 在 HDFS 的 /input 目录下创建一个文件
echo "hello world hello hadoop" | hdfs dfs -put - /input/test.txt
echo "mapreduce is powerful" | hdfs dfs -appendToFile - /input/test.txt

步骤 2: 运行 WordCount 程序 Hadoop 的 JAR 包中包含了示例程序。

hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.1.jar wordcount /input /output
  • hadoop-mapreduce-examples-2.10.1.jar: 包含示例程序的 JAR 包。
  • wordcount: 要运行的类名。
  • /input: 输入数据目录。
  • /output: 输出结果目录(该目录不能事先存在)。

步骤 3: 查看结果 程序运行成功后,结果会存放在 /output 目录下,通常会有一个 part-r-00000 文件。

hdfs dfs -cat /output/part-r-00000

你将看到类似下面的输出:

hadoop     1
hello      2
is         1
mapreduce  1
powerful   1
world      1

步骤 4: 在 YARN Web UI 上查看 打开浏览器访问 http://localhost:8088,你可以在 "Applications" 标签页下看到刚刚运行的 "wordcount" 作业,点击可以查看详细的任务日志、资源使用情况等。


总结与展望

恭喜你!你已经成功搭建了 Hadoop 2.x 伪分布式集群,并运行了第一个 MapReduce 作业,理解了其核心架构。

回顾要点:

  • Hadoop 2.x 的核心是 YARN,它实现了资源管理和任务调度的分离,带来了通用性和可扩展性。
  • HDFS 是分布式存储的基础。
  • YARN 是分布式计算的资源管理平台,MapReduce、Spark 等都运行在它之上。

下一步可以学习什么?

  1. 真正的集群部署: 了解如何配置多个节点,实现高可用(HA)和联邦。
  2. 更高级的 MapReduce: 学习自定义 Mapper 和 Reducer,处理复杂的数据逻辑。
  3. Spark: 学习如何在 YARN 上运行 Spark,这是目前更主流的大数据处理框架。
  4. Hive 和 HBase: 学习基于 HDFS 的数据仓库(Hive)和 NoSQL 数据库(HBase)。
  5. Hadoop 生态系统: 探索 ZooKeeper, Flume, Sqoop, Kafka 等其他组件。

这份教程为你打下了坚实的基础,希望对你学习 Hadoop 有所帮助!

分享:
扫描分享到社交APP
上一篇
下一篇