主题
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是大数据领域的绝对核心技术体系,也是绝大多数学习大数据的人的入门框架。

3. Hadoop集群角色分配
在Hadoop集群中,不同的组件会有不同的角色分配:
HDFS组件角色
- NameNode:HDFS的管理者,负责管理文件系统的命名空间和客户端的访问
- DataNode:HDFS的工作者,负责存储实际的数据块
YARN组件角色
- ResourceManager:YARN的管理者,负责集群资源的分配和管理
- NodeManager:YARN的工作者,负责单个节点的资源管理和任务执行
MapReduce组件角色
- JobTracker:MapReduce的管理者(旧版)
- TaskTracker:MapReduce的工作者(旧版)
其他辅助服务
- HistoryServer:历史服务器,记录作业执行历史
- WebAppProxyServer:代理服务器,提供Web界面访问
集群角色分配方案
| 服务器 | 角色 |
|---|---|
| node1 | NameNode, ResourceManager, HistoryServer, WebAppProxyServer |
| node2 | DataNode, NodeManager |
| node3 | DataNode, 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_HOME2. 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/logs5. 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/logs7. 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
node37. 集群分发与软链接配置
将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/hadoop8. 数据目录创建
在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-local9. 环境变量配置
在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/profile10. 集群启动与验证
格式化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:808811. 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| 功能描述 | 命令示例 |
|---|---|
| 下载Hadoop | wget 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 |
| 分发到node2 | scp -r /export/server/hadoop-3.3.0/ node2:/export/server/ |
| 格式化HDFS | hadoop namenode -format |
| 启动HDFS | start-dfs.sh |
| 启动YARN | start-yarn.sh |
| 启动历史服务器 | mapred --daemon start historyserver |
| 查看进程 | jps |
| 上传文件 | hadoop fs -put test.txt /test.txt |
| 查看文件列表 | hadoop fs -ls / |
| 查看文件内容 | hadoop fs -cat /test.txt |
| 运行WordCount | yarn jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /wordcount.txt /output |
| 停止HDFS | stop-dfs.sh |
| 停止YARN | stop-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 - 管理节点资源
安装步骤:
- 配置JDK环境
- 下载并解压Hadoop
- 配置core-site.xml(指定NameNode和临时目录)
- 配置hdfs-site.xml(副本数和NameNode地址)
- 配置yarn-site.xml和mapred-site.xml
- 格式化HDFS:
hdfs namenode -format(仅第一次)
启动命令: start-dfs.sh - 启动HDFS start-yarn.sh - 启动YARN stop-dfs.sh - 停止HDFS stop-yarn.sh - 停止YARN
Web界面:
- NameNode: http://节点IP:9870
- YARN: http://节点IP:8088
Hadoop是分布式存储和计算框架,需要ZooKeeper做高可用。
课后练习
基础练习:在三台服务器上独立安装Hadoop并配置成集群。
进阶练习:修改Hadoop的副本数为2,重新格式化HDFS并验证。
综合练习:运行一个自定义的MapReduce作业,统计日志文件中的访问次数。