1.3 Hadoop的部署模式


文档摘要

1.3 Hadoop的部署模式 1.3 Hadoop的部署模式 1.3.1 单机模式 (Standalone Mode) 概述 单机模式是 Hadoop 最简单的部署模式,也被称为本地模式。在这种模式下,Hadoop 的所有组件,包括 NameNode、DataNode、ResourceManager 和 NodeManager,都运行在同一个 Java 虚拟机(JVM)进程中。它不使用 HDFS 分布式文件系统,而是使用本地操作系统的文件系统。单机模式主要用于开发、测试和学习目的,不适用于生产环境。 特点 简单易用: 安装配置极其简单,几乎无需额外配置即可运行。 资源消耗低: 所有组件共享同一个 JVM,资源消耗相对较低。

1.3 Hadoop的部署模式

1.3 Hadoop的部署模式

1.3.1 单机模式 (Standalone Mode)

概述

单机模式是 Hadoop 最简单的部署模式,也被称为本地模式。在这种模式下,Hadoop 的所有组件,包括 NameNode、DataNode、ResourceManager 和 NodeManager,都运行在同一个 Java 虚拟机(JVM)进程中。它不使用 HDFS 分布式文件系统,而是使用本地操作系统的文件系统。单机模式主要用于开发、测试和学习目的,不适用于生产环境。

特点

  • 简单易用: 安装配置极其简单,几乎无需额外配置即可运行。

  • 资源消耗低: 所有组件共享同一个 JVM,资源消耗相对较低。

  • 性能受限: 由于所有组件运行在单个进程中,且使用本地文件系统,性能受到单机资源的限制,无法体现 Hadoop 分布式计算的优势。

  • 不具备分布式特性: 不涉及网络通信和分布式数据管理,无法模拟真正的分布式环境。

适用场景

  • Hadoop 初学者: 快速了解 Hadoop 的基本概念和运行流程。

  • 开发环境: 在本地机器上快速测试 MapReduce 程序或 Spark 应用。

  • 单元测试: 进行小规模的数据处理和算法验证。

代码实践与详解

在单机模式下,Hadoop 的配置几乎是开箱即用的。通常情况下,下载 Hadoop 发行版后,无需修改任何配置文件即可直接运行。

步骤 1: 下载 Hadoop 发行版

首先,你需要从 Apache Hadoop 官网下载 Hadoop 的二进制发行版。选择一个稳定的版本,例如 Hadoop 3.x 或 Hadoop 2.x。

步骤 2: 解压 Hadoop 发行版

将下载的压缩包解压到你本地的某个目录,例如 /usr/local/hadoop

tar -xzf hadoop-x.y.z.tar.gz -C /usr/local/ cd /usr/local/hadoop-x.y.z mv hadoop-x.y.z hadoop # 可选:重命名文件夹为 hadoop cd hadoop

步骤 3: 设置环境变量 (可选)

为了方便使用 Hadoop 命令,可以将 Hadoop 的 binsbin 目录添加到系统的 PATH 环境变量中。编辑 ~/.bashrc~/.zshrc 文件,添加以下内容:

export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后执行 source ~/.bashrcsource ~/.zshrc 使环境变量生效。

步骤 4: 运行 Hadoop 示例

在单机模式下,可以直接运行 Hadoop 提供的示例程序来验证安装是否成功。例如,运行 grep 示例程序:

mkdir input echo "Hello World Hadoop" > input/file01.txt hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-x.y.z.jar grep input output 'World' cat output/*

代码详解

  • mkdir input: 创建名为 input 的目录,用于存放输入文件。

  • echo "Hello World Hadoop" > input/file01.txt: 在 input 目录下创建一个名为 file01.txt 的文件,并写入内容 "Hello World Hadoop"。

  • hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-x.y.z.jar grep input output 'World': 运行 Hadoop 示例程序 grep

    • share/hadoop/mapreduce/hadoop-mapreduce-examples-x.y.z.jar: Hadoop 示例程序 JAR 包的路径。

    • grep: 要运行的示例程序的名称,这里是 grep 示例。

    • input: 输入数据所在的目录。

    • output: 输出结果存放的目录。

    • 'World': grep 程序要搜索的关键词。

  • cat output/*: 查看输出结果。

Mermaid Graph TD 图

总结

单机模式是 Hadoop 最简单的部署方式,适用于快速入门和本地开发测试。它无需复杂的配置,但性能和功能都受到限制,不适合生产环境。

1.3.2 伪分布式模式 (Pseudo-Distributed Mode)

概述

伪分布式模式仍然是在单个机器上部署 Hadoop,但与单机模式不同的是,Hadoop 的每个主要组件(NameNode, DataNode, ResourceManager, NodeManager)都在独立的 JVM 进程中运行。虽然所有进程都在同一台机器上,但它们模拟了分布式环境的运行方式,使用 HDFS 分布式文件系统 进行数据存储和管理。伪分布式模式更接近真实的分布式集群,适合学习和小型测试

特点

  • 模拟分布式环境: 组件独立运行,使用 HDFS,初步体现分布式特性。

  • 配置相对简单: 相比完全分布式模式,配置仍然相对简单,易于搭建。

  • 资源共享: 所有组件共享单机资源,性能仍然受限,但比单机模式有所提升。

  • 网络通信: 虽然在同一台机器上,但组件之间通过网络进行通信,模拟分布式集群的网络交互。

适用场景

  • 学习 Hadoop 分布式原理: 理解 HDFS 和 MapReduce 的分布式运行机制。

  • 中小型测试环境: 测试 Hadoop 应用的分布式功能和基本性能。

  • 单机资源有限情况下的分布式模拟: 在没有多台机器的情况下,模拟分布式环境进行开发和测试。

代码实践与详解

伪分布式模式需要进行一些配置才能运行。以下是在 Ubuntu 系统上配置伪分布式模式的步骤。

步骤 1: 配置环境变量 (同单机模式)

参考单机模式的步骤 3,设置 Hadoop 环境变量。

步骤 2: 配置 Hadoop 配置文件

需要修改 Hadoop 的核心配置文件,包括 core-site.xmlhdfs-site.xmlyarn-site.xml。这些配置文件位于 $HADOOP_HOME/etc/hadoop 目录下。

  • core-site.xml: 配置 Hadoop 核心参数,例如文件系统 URI。
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
* `fs.defaultFS`: 指定默认的文件系统 URI 为 HDFS,地址为 `hdfs://localhost:9000`。
  • hdfs-site.xml: 配置 HDFS 相关参数,例如数据副本数。
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
* `dfs.replication`: 设置数据副本数为 1,因为是伪分布式,只需要一个副本。
  • yarn-site.xml: 配置 YARN (Yet Another Resource Negotiator) 资源管理器相关参数。
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> </configuration>
* `yarn.nodemanager.aux-services`: 指定 NodeManager 的辅助服务为 `mapreduce_shuffle`,用于 MapReduce 的 shuffle 过程。 * `yarn.nodemanager.env-whitelist`: 配置 NodeManager 的环境变量白名单,确保必要的环境变量被传递给容器。

步骤 3: 格式化 NameNode

首次运行伪分布式模式前,需要格式化 NameNode。这会初始化 HDFS 文件系统。

hdfs namenode -format

注意: 格式化 NameNode 操作只需要执行一次,除非需要重新初始化 HDFS 文件系统。 频繁格式化 NameNode 会导致数据丢失。

步骤 4: 启动 Hadoop 组件

使用 start-dfs.shstart-yarn.sh 脚本启动 HDFS 和 YARN 组件。

start-dfs.sh start-yarn.sh

启动完成后,可以通过 jps 命令查看运行中的 Java 进程,应该可以看到 NameNode、DataNode、ResourceManager 和 NodeManager 等进程。

步骤 5: 运行 Hadoop 示例 (同单机模式)

参考单机模式的步骤 4,运行 Hadoop 示例程序。此时,数据将存储在 HDFS 文件系统中。

步骤 6: 停止 Hadoop 组件

使用 stop-dfs.shstop-yarn.sh 脚本停止 HDFS 和 YARN 组件。

stop-dfs.sh stop-yarn.sh

代码详解

  • hdfs namenode -format: 格式化 NameNode,初始化 HDFS 文件系统。

  • start-dfs.sh: 启动 HDFS 相关组件,包括 NameNode 和 DataNode。

  • start-yarn.sh: 启动 YARN 相关组件,包括 ResourceManager 和 NodeManager。

  • stop-dfs.sh: 停止 HDFS 组件。

  • stop-yarn.sh: 停止 YARN 组件。

Mermaid Graph TD 图

总结

伪分布式模式比单机模式更接近真实的分布式环境,能够初步体验 Hadoop 的分布式特性。配置相对简单,适用于学习和小型测试。但仍然受到单机资源限制,性能和扩展性有限。

1.3.3 完全分布式模式 (Fully-Distributed Mode)

概述

完全分布式模式是 Hadoop 最真实的部署模式,也是生产环境中最常用的模式。在这种模式下,Hadoop 集群由多台机器组成,每台机器承担不同的角色和功能。通常,集群中会有一台或多台机器作为主节点 (Master Nodes) 运行 NameNode 和 ResourceManager 等控制组件,其余机器作为工作节点 (Worker Nodes) 运行 DataNode 和 NodeManager 等数据处理组件。完全分布式模式充分发挥了 Hadoop 的分布式计算和存储能力,具有高可扩展性、高可用性和高性能

特点

  • 真实分布式环境: 多台机器协同工作,充分体现 Hadoop 分布式特性。

  • 高可扩展性: 可以通过增加机器来扩展集群的存储和计算能力。

  • 高可用性: 可以通过配置主备节点和数据冗余机制提高集群的可用性和容错性。

  • 高性能: 多台机器并行处理数据,提高数据处理效率。

  • 配置复杂: 相比单机和伪分布式模式,配置更加复杂,需要考虑网络配置、节点管理、安全配置等。

  • 资源需求高: 需要多台机器和相应的硬件资源。

适用场景

  • 生产环境: 处理大规模数据集,提供稳定可靠的数据存储和计算服务。

  • 大数据分析: 进行复杂的数据分析和挖掘任务。

  • 企业级应用: 构建大型数据仓库、数据湖等应用。

代码实践与详解 (简要概述)

完全分布式模式的部署较为复杂,涉及多台机器的配置和协同工作。以下是部署完全分布式模式的简要步骤和关键配置要点。

步骤 1: 准备多台机器

  • 硬件配置: 根据集群规模和负载需求,选择合适的服务器硬件配置,包括 CPU、内存、磁盘和网络。

  • 操作系统: 建议使用 Linux 系统,例如 CentOS、Ubuntu 等。

  • 网络配置: 确保集群中所有机器之间网络互通,配置静态 IP 地址或 DNS 解析。

步骤 2: 安装 JDK 和 Hadoop

在所有机器上安装相同版本的 JDK 和 Hadoop。可以参考单机模式的步骤 1 和 2 进行安装和解压。

步骤 3: 配置 Hadoop 配置文件

  • core-site.xml: 配置 fs.defaultFS 指向 NameNode 的地址,例如 hdfs://<namenode-hostname>:<port>
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://namenode01:9000</value> </property> </configuration>
  • hdfs-site.xml: 配置 HDFS 相关参数,例如数据副本数 (dfs.replication)、NameNode 和 DataNode 的数据存储目录 (dfs.namenode.name.dir, dfs.datanode.data.dir)。
<configuration> <property> <name>dfs.replication</name> <value>3</value> <!-- 生产环境建议至少 3 个副本 --> </property> <property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/hdfs/namenode</value> <!-- NameNode 数据目录 --> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/hdfs/datanode</value> <!-- DataNode 数据目录 --> </property> </configuration>
  • yarn-site.xml: 配置 YARN 相关参数,例如 ResourceManager 的地址 (yarn.resourcemanager.hostname)、NodeManager 的资源配置 (yarn.nodemanager.resource.cpu-vcores, yarn.nodemanager.resource.memory-mb) 等。
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>resourcemanager01</value> <!-- ResourceManager 主机名 --> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>8</value> <!-- NodeManager 可用 CPU 核数 --> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> <!-- NodeManager 可用内存大小 (MB) --> </property> </configuration>
  • mapred-site.xml: 配置 MapReduce 相关参数,例如 JobHistoryServer 的地址 (mapreduce.jobhistory.address)、MapReduce 框架类型 (mapreduce.framework.name)。
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>jobhistoryserver01:10020</value> <!-- JobHistoryServer 主机名和端口 --> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>jobhistoryserver01:19888</value> <!-- JobHistoryServer Web UI 地址 --> </property> </configuration>
  • workers (slaves): 在 NameNode 和 ResourceManager 所在机器上,配置 workers 文件 (或 slaves 文件,取决于 Hadoop 版本)。该文件列出所有 DataNode 和 NodeManager 所在机器的主机名或 IP 地址,每行一个。
datanode01 datanode02 datanode03 ...

步骤 4: 配置 SSH 免密码登录

在主节点机器上配置 SSH 免密码登录到所有工作节点机器,方便主节点管理和控制工作节点。

步骤 5: 格式化 NameNode (在 NameNode 机器上)

hdfs namenode -format

步骤 6: 启动 Hadoop 集群

  • 在 NameNode 机器上启动 HDFS 组件:
start-dfs.sh
  • 在 ResourceManager 机器上启动 YARN 组件:
start-yarn.sh
  • 在 JobHistoryServer 机器上启动 JobHistoryServer 组件 (可选,用于查看 MapReduce 作业历史信息):
mr-jobhistory-daemon.sh start historyserver

步骤 7: 验证集群状态

  • 访问 NameNode Web UI (通常在 http://<namenode-hostname>:9870http://<namenode-hostname>:50070) 查看 HDFS 集群状态。

  • 访问 ResourceManager Web UI (通常在 http://<resourcemanager-hostname>:8088) 查看 YARN 集群状态。

  • 使用 hdfs dfsadmin -report 命令查看 HDFS 报告。

  • 运行 Hadoop 示例程序进行测试。

步骤 8: 停止 Hadoop 集群

  • 在 ResourceManager 机器上停止 YARN 组件:
stop-yarn.sh
  • 在 NameNode 机器上停止 HDFS 组件:
stop-dfs.sh
  • 在 JobHistoryServer 机器上停止 JobHistoryServer 组件 (如果启动了):
mr-jobhistory-daemon.sh stop historyserver

Mermaid Graph TD 图

总结

完全分布式模式是 Hadoop 最强大的部署模式,适用于生产环境和大规模数据处理。它具有高可扩展性、高可用性和高性能,但配置和管理也更加复杂。在实际应用中,通常会借助集群管理工具 (例如 Apache Ambari, Cloudera Manager, Hortonworks Data Platform 等) 来简化 Hadoop 集群的部署、管理和监控。

1.3.4 部署模式选择建议

选择 Hadoop 的部署模式需要根据实际的应用场景和需求进行权衡。

  • 学习和入门: 单机模式 是最快速、最简单的选择,可以快速了解 Hadoop 的基本概念和操作。

  • 开发和小型测试: 伪分布式模式 更接近真实环境,可以初步测试分布式应用的功能和性能。

  • 生产环境: 完全分布式模式 是唯一合适的选择,能够提供高可用性、高扩展性和高性能的数据存储和计算能力。

在实际生产环境中,为了提高集群的可用性和容错性,通常会采用高可用 (HA) 部署 的完全分布式模式,例如配置主备 NameNode主备 ResourceManager,以及使用数据多副本机制。此外,还需要考虑集群的安全配置、监控和管理等方面,以确保 Hadoop 集群的稳定运行和高效利用。

总结

本章节详细介绍了 Hadoop 的三种主要部署模式:单机模式、伪分布式模式和完全分布式模式。每种模式都有其特点、适用场景和配置方法。理解不同部署模式的差异和优缺点,有助于根据实际需求选择合适的部署方案,并更好地利用 Hadoop 的强大功能。从简单的单机模式入门,逐步过渡到伪分布式模式和完全分布式模式,可以帮助读者循序渐进地掌握 Hadoop 的部署和应用。


发布者: 作者: 转发
评论区 (0)
U