Hadoop原生分布式搭建
1. 基本环境
JDK版本:JDK8 版本
集群:使用 vmware 虚拟机虚拟三台 linux节点,linux操作系统: Centos7
虚拟机环境准备三台虛拟机(静态iP、关闭防火墙、修改主机名、配置兔密登录、集群时间同步)
首先创建一台虚拟机配置好 hadoop环境变量后分别克隆出 slave1、slave2节点
关闭防火墙(所有节点)
systemctl stop firewall
配置NTP 同步
修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
修改主机名映射(master节点)
192.168.2.21 master
192.168.2.22 slave1
192.168.2.23 slave3
配置root免密并分发(master节点)
只在master节点的root用户下配置,用于分发master节点的环境变量
ssh-keygen -t rsa ##一路回车
ssh-copy-id master ##回车,输入yes,填入密码
ssh-copy-id slave1
ssh-copy-id slave2
scp -r /etc/hosts slave1:/etc
scp -r /etc/hosts slave2:/etc
新建hadoop用户,并在该用户下配置hadoop免密
useradd hadoop
passwd hadoop
#配置免密(所有节点都需执行)
ssh-keygen -t rsa
ssh-copy-id master/slave1/slave2
创建目录(所有节点)
mkdir -p /opt/soft --软件安装包
mkdir -p /opt/module --软件安装目录
修改权限
chown -R hadoop:hadoop /opt/module
安装JDK1.8
#上传jdk包到/opt/soft,并解压到/opt/module
tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt/module
#修改环境变量
vi /etc/profile
export JAVA_HOME=/opt/module/jdk1.8.0_211
export PATH=$PATH:$JAVA_HOME/bin
#刷新环境变量
source /etc/profile
分发JDK和环境变量
scp -r /opt/jdk1.8.0_211 slave1:/opt/module
scp -r /opt/jdk1.8.0_211 slave2:/opt/module
scp -r /etc/profile slave1:/etc
scp -r /etc/profile slave2:/etc
#记得在slave1、slave2刷新环境变量
2. 集群规划
组件 | master |
slave1 |
slave2 |
---|---|---|---|
IP |
192.168.2.21 |
192.168.2.22 |
192.168.2.23 |
HDFS 3.1.1 |
NameNode DataNode |
DataNode |
Secondary NameNode DataNode |
YARN |
NodeManager |
ResourceManager NodeManager |
NodeManager |
HIVE 3.1.2 |
Matestore HIVESERVER2 |
软件 | master | slave1 | slave2 |
---|---|---|---|
Hadoop | ✓ | ✓ | ✓ |
Mysql | √ | ||
Hive | √ |
3.开始安装
分发之前的所有步骤只在master节点执行,后续scp分发
下载 Hadoop
下载 Hadoop 到 /opt/soft
中
wget -P /opt/module https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz
解压 Hadoop 到 /opt/module
中
tar -zxvf /opt/soft/hadoop-3.3.2.tar.gz -C /opt/module
配置环境变量
添加环境变量到vim /etc/profile
# HADOOP
export HADOOP_HOME=/opt/module/hadoop-3.1.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使环境变量生效
source /etc/profile
使用 hadoop version
检查配置是否正常
目录结构
drwxr-xr-x bin -- 对 hadoop 操作相关命令(.cmd为windows用)
drwxr-xr-x etc -- 配置文件目录
drwxr-xr-x include -- jar包和lib一样
drwxr-xr-x lib -- hadoop本地库,存放jar包
drwxr-xr-x libexec -- 本地系统依赖库
-rw-r--r-- LICENSE.txt
-rw-r--r-- NOTICE.txt
-rw-r--r-- README.txt -- 描述文件
drwxr-xr-x sbin -- 命令(hadoop停止启动等)
drwxr-xr-x share -- 一些hadoop相关jar包及官方案例
修改核心配置文件
cd /opt/module/hadoop-3.1.1/etc/hadoop
---HDFS---
core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定 Hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.1/data/tmp</value>
</property>
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定 Hadoop 辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave2:50090</value>
</property>
---YARN---
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
yarn-site.xml
<!-- Reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
---MR---
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_211
mapred-site.xml
<!-- 指定 MR 运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
---DataNode && NodeManager 从节点---
hadoop3.0 以后 slaves 更名为 workers 了
一般在集群中你唯一地选择一台机器作为 NameNode ,一台机器作为 ResourceManager,这是 master (主)。
那么 ,集群中剩下的机器作为 DataNode 和 NodeManager。这些是 slaves (从)。
works
master
slave1
slave2
分发
scp -r /opt/module/hadoop-3.1.1 slave1:/opt/module
scp -r /opt/module/hadoop-3.1.1 slave2:/opt/module
scp -r /opt/module/hadoop-3.1.1 slave3:/opt/module
4. 集群启动
如果已经单节点方式启动了 Hadoop,可以先停止之前的启动的 NameNode 与 DataNode 进程。如果之前 NameNode 没有执行格式化这里需要执行格式化,千万不要重复执行!!
如果集群是第一次启动,需要格式化 NameNode(注意格式化之前,一定要先停 止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)
非第一次不用执行格式化 NameNode 操作!如果多次格式化会造成无法启动!
# master节点执行命令
hadoop namenode -format
格式化成功后会在 /opt/module/hadoop-3.1.1/data/tmp 目录创建文件
启动hdfs(master)
sbin/start-dfs.sh 或者 start-dfs.sh(配置环境变量后)
启动yarn(slave1)
sbin/start-yarn.sh 或者 start-yarn.sh
注意:NameNode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 YARN,应该在 ResouceManager 所在的机器上启动 YARN
脚本启动
#!/bin/bash
if [ $# -lt 1 ]
then
echo "请输入命令参数![start|stop|init]"
exit
fi
case $1 in
"start")
echo "===================启动hadoop集群==================="
echo "===============启动HDFS==================="
ssh master "/opt/module/hadoop-3.1.1/sbin/start-dfs.sh"
echo "================启动YARN=================="
ssh slave1 "/opt/module/hadoop-3.1.1/sbin/start-yarn.sh"
;;
"stop")
echo "===================关闭hadoop集群==================="
echo "===============关闭YARN==================="
ssh slave1 "/opt/module/hadoop-3.1.1/sbin/stop-yarn.sh"
echo "================关闭HDFS=================="
ssh master "/opt/module/hadoop-3.1.1/sbin/stop-dfs.sh"
;;
"init")
read -p "你正在进行集群的初始化操作!此操作将删除集群内的所有数据!是否确定?[yes/no]:" check
if [ "$check" = "yes" ]
then
echo "=================关闭Hadoop集群==================="
echo "==============关闭YARN==================="
ssh slave1 "/opt/module/hadoop-3.1.1/sbin/stop-yarn.sh"
echo "==============关闭HDFS==================="
ssh master "/opt/module/hadoop-3.1.1/sbin/stop-dfs.sh"
echo "====================删除Hadoop集群数据======================"
ssh master "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
ssh slave1 "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
ssh slave2 "rm -rf /opt/module/hadoop-3.1.1/data /opt/module/hadoop-3.1.1/logs "
echo "========================集群数据删除完毕================================"
ssh master "/opt/module/hadoop-3.1.1/bin/hdfs namenode -format"
fi
;;
*)
echo "参数错误,可允许的参数:[start|stop|init]"
;;
esac
5. 单节点启动
建议使用集群群起
HDFS单节点启动
启动 master 的 NameNode 和 Datanode
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
启动 slave1 和 slave2 的 Datenode
hadoop-daemon.sh start datanode
启动 NameNode 后可以在浏览器打开控制台
http://master:50070/ 主节点:50070
Yarn 集群单节点启动
建议使用集群群起
启动 Yarn 主节点
Yarn集群放在了 slave1 上。所以需要在 slave1 进行操作
yarn-daemon.sh start resourcemanager
启动 NodeManager 从节点
master 、slave1、slave2 都启用从节点
yarn-daemon.sh start nodemanager
6. 核查
Yarn 集群控制面板
控制面板安装在 resourceManager 的节点
历史日志服务器
在 Yarn 中运行的任务产生的日志数据不能查看,为了查看程序的历史运行情况,需要配置一下历史日志服务器。
配置日志服务器
master节点
配置 mapred-site.xml
<!-- 历史服务器地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 历史服务器web地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
分发 mapred-site.xml 到其他节点
scp -r /opt/module/hadoop-3.1.1/etc/hadoop/mapred-site.xml slave1:/opt/module/hadoop-3.1.1/etc/hadoop
scp -r /opt/module/hadoop-3.1.1/etc/hadoop/mapred-site.xml slave2:/opt/module/hadoop-3.1.1/etc/hadoop
master 启动历史服务器
mr-jobhistory-daemon.sh start historyserver
访问历史服务器
http://master:19889
配置日志的聚集
日志聚集:应用(job)运行完成以后,将应用运行日志信息从各个 task 汇总上传到 HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager、 ResourceManager和 HistoryManager
配置 yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分发 yarn-site.xml 到其他节点
停止 yarn 集群,slave1 节点
stop-yarn.sh
重启 JobHistoryServer,master
mr-jobhistory-daemon.sh stop historyserver
mr-jobhistory-daemon.sh start historyserver
启动 yarn 集群,slave1 节点
start-yarn.sh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类