跳转到内容

Hadoop分布式集群安装部署

课程介绍

最后我们学习Hadoop分布式集群的安装部署。Hadoop是大数据生态的核心框架,包括HDFS分布式文件系统、YARN资源管理和MapReduce计算框架。Hadoop适合存储海量数据和处理大数据。安装Hadoop需要先配置好集群环境,包括JDK、SSH免密登录等。然后下载Hadoop安装包,解压并创建软链接,修改配置文件(如core-site.xml、hdfs-site.xml、yarn-site.xml等),配置集群角色(NameNode、DataNode)。配置完成后,格式化HDFS,启动集群,最后通过Web界面查看集群状态。

2. Hadoop概述

Hadoop是一个由Apache基金会开发的分布式系统基础架构,主要解决了海量数据存储和海量数据分析计算问题。

核心组件:

  • HDFS (Hadoop Distributed File System):提供分布式海量数据的存储能力
  • YARN (Yet Another Resource Negotiator):提供分布式集群资源管理能力
  • MapReduce:提供分布式海量数据的计算能力

应用场景:

  • 大规模数据存储
  • 数据仓库
  • 日志分析
  • 机器学习
  • 实时数据处理

NOTE

Hadoop是大数据领域的绝对核心技术体系,也是绝大多数学习大数据的人的入门框架。

Hadoop核心组件架构


3. Hadoop集群角色分配

在Hadoop集群中,不同的组件会有不同的角色分配:

HDFS组件角色

  • NameNode:HDFS的管理者,负责管理文件系统的命名空间和客户端的访问
  • DataNode:HDFS的工作者,负责存储实际的数据块

YARN组件角色

  • ResourceManager:YARN的管理者,负责集群资源的分配和管理
  • NodeManager:YARN的工作者,负责单个节点的资源管理和任务执行

MapReduce组件角色

  • JobTracker:MapReduce的管理者(旧版)
  • TaskTracker:MapReduce的工作者(旧版)

其他辅助服务

  • HistoryServer:历史服务器,记录作业执行历史
  • WebAppProxyServer:代理服务器,提供Web界面访问

集群角色分配方案

服务器角色
node1NameNode, ResourceManager, HistoryServer, WebAppProxyServer
node2DataNode, NodeManager
node3DataNode, NodeManager

IMPORTANT

Node1承担了较多的管理角色,建议分配至少4GB内存;Node2和Node3承担工作角色,建议分配至少2GB内存。


4. 安装前准备

环境要求

  • 集群服务器:至少3台Linux服务器(本课程使用node1、node2、node3)
  • JDK环境:已安装JDK 1.8或以上版本
  • 网络配置
    • 三台服务器之间可以互相通信
    • 已配置主机名映射
    • 已配置SSH免密登录
    • 已关闭防火墙
  • 目录结构
    • 已创建/export/server/目录用于安装软件
  • 内存配置
    • node1:4GB或以上
    • node2:2GB或以上
    • node3:2GB或以上

内存调整方法

  • 关闭虚拟机
bash
# 在所有节点执行
poweroff
  • 修改虚拟机内存配置(通过VMware Workstation界面)
  • 重新启动虚拟机

5. Hadoop安装步骤

步骤1:下载Hadoop安装包

在node1服务器上执行:

bash
# 切换到安装目录
cd /export/server/

# 下载Hadoop安装包
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

步骤2:解压安装包

bash
# 解压安装包
tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/

# 查看解压结果
ls -l /export/server/

步骤3:创建软链接

为了方便后续操作,创建一个指向Hadoop安装目录的软链接:

bash
# 创建软链接
ln -s /export/server/hadoop-3.3.0 /export/server/hadoop

# 验证软链接
ls -l /export/server/

6. 核心配置文件修改

Hadoop的配置文件位于/export/server/hadoop/etc/hadoop/目录下,需要修改以下核心配置文件:

1. hadoop-env.sh

bash
# 进入配置目录
cd /export/server/hadoop/etc/hadoop/

# 编辑配置文件
vim hadoop-env.sh

在文件头部添加以下内容:

bash
# Hadoop环境变量配置
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
export YARN_LOG_DIR=$HADOOP_HOME/logs
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME

2. core-site.xml

bash
# 编辑配置文件
vim core-site.xml

清空文件并添加以下内容:

xml
<configuration>
    <!-- 指定HDFS的NameNode地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>
    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/server/hadoop/data/tmp</value>
    </property>
    <!-- 文件缓冲区大小 -->
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>

3. hdfs-site.xml

bash
# 编辑配置文件
vim hdfs-site.xml

清空文件并添加以下内容:

xml
<configuration>
    <!-- 文件权限设置 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>true</value>
    </property>
    <!-- 文件默认权限 -->
    <property>
        <name>dfs.datanode.data.dir.perm</name>
        <value>700</value>
    </property>
    <!-- NameNode数据存储目录 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/export/server/hadoop/data/nn</value>
    </property>
    <!-- DataNode数据存储目录 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/export/server/hadoop/data/dn</value>
    </property>
    <!-- 副本数量 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!-- 文件块大小 -->
    <property>
        <name>dfs.blocksize</name>
        <value>134217728</value>
    </property>
    <!-- NameNode网页访问地址 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>node1:9870</value>
    </property>
    <!-- NameNode安全网页访问地址 -->
    <property>
        <name>dfs.namenode.https-address</name>
        <value>node1:9871</value>
    </property>
    <!-- NameNode RPC监听地址 -->
    <property>
        <name>dfs.namenode.rpc-address</name>
        <value>node1:8020</value>
    </property>
    <!-- 文件系统元数据操作线程数 -->
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>
</configuration>

4. mapred-env.sh

bash
# 编辑配置文件
vim mapred-env.sh

在文件头部添加以下内容:

bash
# MapReduce环境变量配置
export JAVA_HOME=/export/server/jdk
export HADOOP_MAPRED_HOME=/export/server/hadoop
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

5. mapred-site.xml

bash
# 编辑配置文件
vim mapred-site.xml

清空文件并添加以下内容:

xml
<configuration>
    <!-- MapReduce运行框架 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- MapReduce历史服务器地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
    </property>
    <!-- MapReduce历史服务器网页访问地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
    </property>
    <!-- 历史记录保留时间(秒) -->
    <property>
        <name>mapreduce.jobhistory.retention.ms</name>
        <value>604800000</value>
    </property>
    <!-- 中间输出压缩 -->
    <property>
        <name>mapreduce.map.output.compress</name>
        <value>true</value>
    </property>
    <!-- 压缩类型 -->
    <property>
        <name>mapreduce.map.output.compress.codec</name>
        <value>org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
</configuration>

6. yarn-env.sh

bash
# 编辑配置文件
vim yarn-env.sh

在文件头部添加以下内容:

bash
# YARN环境变量配置
export JAVA_HOME=/export/server/jdk
export HADOOP_YARN_HOME=/export/server/hadoop
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_LOG_DIR=$HADOOP_HOME/logs
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

7. yarn-site.xml

bash
# 编辑配置文件
vim yarn-site.xml

清空文件并添加以下内容:

xml
<configuration>
    <!-- YARN ResourceManager地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
    </property>
    <!-- NodeManager上运行的附属服务 -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- ResourceManager Web界面访问地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node1:8088</value>
    </property>
    <!-- NodeManager本地目录 -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/export/server/hadoop/data/nm-local</value>
    </property>
    <!-- NodeManager日志目录 -->
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/export/server/hadoop/data/nm-log</value>
    </property>
    <!-- 日志保留时间(秒) -->
    <property>
        <name>yarn.nodemanager.log.retain-seconds</name>
        <value>604800</value>
    </property>
    <!-- 资源管理器调度器 -->
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
</configuration>

8. workers

bash
# 编辑配置文件
vim workers

清空文件并添加以下内容:

node1
node2
node3

7. 集群分发与软链接配置

将Hadoop分发到其他节点

bash
# 分发到node2
scp -r /export/server/hadoop-3.3.0/ node2:/export/server/

# 分发到node3
scp -r /export/server/hadoop-3.3.0/ node3:/export/server/

在其他节点创建软链接

在node2上执行:

bash
ln -s /export/server/hadoop-3.3.0 /export/server/hadoop

在node3上执行:

bash
ln -s /export/server/hadoop-3.3.0 /export/server/hadoop

8. 数据目录创建

在node1上创建数据目录

bash
mkdir -p /export/server/hadoop/data/nn
mkdir -p /export/server/hadoop/data/dn
mkdir -p /export/server/hadoop/data/nm-log
mkdir -p /export/server/hadoop/data/nm-local

在node2上创建数据目录

bash
mkdir -p /export/server/hadoop/data/dn
mkdir -p /export/server/hadoop/data/nm-log
mkdir -p /export/server/hadoop/data/nm-local

在node3上创建数据目录

bash
mkdir -p /export/server/hadoop/data/dn
mkdir -p /export/server/hadoop/data/nm-log
mkdir -p /export/server/hadoop/data/nm-local

9. 环境变量配置

在node1上配置环境变量

bash
# 编辑全局环境变量文件
vim /etc/profile

# 在文件末尾添加以下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 使环境变量生效
source /etc/profile

在node2上配置环境变量

bash
# 编辑全局环境变量文件
vim /etc/profile

# 在文件末尾添加以下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 使环境变量生效
source /etc/profile

在node3上配置环境变量

bash
# 编辑全局环境变量文件
vim /etc/profile

# 在文件末尾添加以下内容
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 使环境变量生效
source /etc/profile

10. 集群启动与验证

格式化HDFS

bash
# 在node1上执行
hadoop namenode -format

启动HDFS集群

bash
# 在node1上执行
start-dfs.sh

启动YARN集群

bash
# 在node1上执行
start-yarn.sh

启动历史服务器

bash
# 在node1上执行
mapred --daemon start historyserver

验证集群状态

查看进程:

bash
# 在node1上执行
jps

# 在node2上执行
jps

# 在node3上执行
jps

查看HDFS Web界面:

http://node1:9870

查看YARN Web界面:

http://node1:8088

11. Hadoop功能测试

测试HDFS文件操作

bash
# 创建测试文件
echo "yege it test" > test.txt

# 上传文件到HDFS
hadoop fs -put test.txt /test.txt

# 查看HDFS文件列表
hadoop fs -ls /

# 查看文件内容
hadoop fs -cat /test.txt

# 删除本地文件
rm -f test.txt

# 再次查看HDFS文件内容
hadoop fs -cat /test.txt

测试MapReduce作业

bash
# 创建测试数据
echo -e "yege\nit test\nyege\nhadoop" > wordcount.txt

# 上传测试数据到HDFS
hadoop fs -put wordcount.txt /wordcount.txt

# 运行WordCount示例
yarn jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount.txt /output

# 查看结果
hadoop fs -cat /output/part-r-00000

功能描述命令示例
下载Hadoopwget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
解压安装包tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/
创建软链接ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
分发到node2scp -r /export/server/hadoop-3.3.0/ node2:/export/server/
格式化HDFShadoop namenode -format
启动HDFSstart-dfs.sh
启动YARNstart-yarn.sh
启动历史服务器mapred --daemon start historyserver
查看进程jps
上传文件hadoop fs -put test.txt /test.txt
查看文件列表hadoop fs -ls /
查看文件内容hadoop fs -cat /test.txt
运行WordCountyarn jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount.txt /output
停止HDFSstop-dfs.sh
停止YARNstop-yarn.sh
停止历史服务器mapred --daemon stop historyserver

12. 常见问题与解决方案

问题描述可能原因解决方案
格式化HDFS时出错JAVA_HOME未配置或配置错误检查JAVA_HOME环境变量配置
启动HDFS时出错防火墙未关闭关闭防火墙或开放相关端口
DataNode无法启动DataNode的clusterID与NameNode不一致删除DataNode数据目录并重新格式化
YARN无法启动内存不足调整虚拟机内存配置
Web界面无法访问防火墙未关闭或端口未开放关闭防火墙或开放相关端口
MapReduce作业失败资源不足调整YARN的资源配置










扩展阅读

NOTE

课后请完成所有练习,并尝试搭建一个Hadoop集群,为后续学习大数据处理框架做好准备。


课程总结

这节课我们学了Hadoop分布式集群的安装部署。

Hadoop集群角色:

  • NameNode - 管理HDFS元数据
  • DataNode - 存储实际数据
  • ResourceManager - 管理YARN资源
  • NodeManager - 管理节点资源

安装步骤:

  1. 配置JDK环境
  2. 下载并解压Hadoop
  3. 配置core-site.xml(指定NameNode和临时目录)
  4. 配置hdfs-site.xml(副本数和NameNode地址)
  5. 配置yarn-site.xml和mapred-site.xml
  6. 格式化HDFS:hdfs namenode -format(仅第一次)

启动命令: start-dfs.sh - 启动HDFS start-yarn.sh - 启动YARN stop-dfs.sh - 停止HDFS stop-yarn.sh - 停止YARN

Web界面:

Hadoop是分布式存储和计算框架,需要ZooKeeper做高可用。

课后练习

  • 基础练习:在三台服务器上独立安装Hadoop并配置成集群。

  • 进阶练习:修改Hadoop的副本数为2,重新格式化HDFS并验证。

  • 综合练习:运行一个自定义的MapReduce作业,统计日志文件中的访问次数。


评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径