开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
本文是 Hadoop 集群入门笔记,涉及虚拟机集群的搭建、配置等基础操作
搭建虚拟机集群
1.模板机创建(硬件配置、操作系统安装)
硬件:利用 VMware 创建虚拟机,给定 CPU 核数、内存和硬盘大小,给硬盘分区(/boot,/swap 和 /)
软件:设置操作系统 iso 文件
2. VMware IP、模板机 IP / 主机名、host 映射
在虚拟网络编辑器中,设置 VMnet8 的子网 IP,并在 NAT 设置中修改网关 IP 至同一网段。
虚拟机 IP 、主机名和 host 映射见 Linux 网络配置的笔记。
3. 其他准备工作
-
如果虚拟机采用的是最小安装,需要自己安装 net-tool 和 vim
-
如果是桌面安装,并且要重装 JDK,可以采用下面的命令卸载 JDK
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps -
安装 epel-release
yum install -y epel-release -
关闭防火墙
systemctl stop firewalldsystemctl disable firewalld.service -
创建一个普通用户并赋予 sudo 权限(默认有),配置免密 sudo
# /etc/sudoers # 在 %wheel ALL=(ALL) ALL 行下面添加:(xiaohao 是用户名) xiaohao ALL=(ALL) NOPASSWD:ALL
4. 利用模板机克隆 3 台虚拟机
1. 分别修改各虚拟机的 IP 地址和主机名
2. 安装 JDK
-
下载所需版本的 JDK,并传输到虚拟机
-
解压:
tar -zxvf jdk-8u333-linux-x64.tar.gz -C /opt/module/ -
配置环境变量:
在
/etc/profile.d中,新建my_env.sh文件,文件内容如下#JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_333 export PATH=$PATH:$JAVA_HOME/bin执行
source /etc/profile使改动立即生效,此时命令行可使用java命令
3. 安装 Hadoop
-
下载所需版本的 Hadoop,并传输到虚拟机
-
解压:
tar -zxvf hadoop-3.3.3.tar.gz -C /opt/module/ -
配置环境变量:
修改上面创建的
my_env.sh文件,添加内容如下:#HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-3.3.3 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin执行
source /etc/profile使改动立即生效,此时命令行可使用hadoop命令
4. 向其他虚拟机分发文件的脚本(下面的代码是由 102 向 103 104 分发所需文件)
#!/bin/bash
if [ $# -lt 1 ]
then
echo 请输入要传输文件的所在路径!
exit
fi
for host in hadoop103 hadoop104
do
echo =============$host=============
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file);pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file 路径不存在
fi
done
done
集群入门
1. SSH 免密登录配置
- 在 hadoop102 上执行
ssh-keygen -t rsa生成公钥和私钥。 - 使用
ssh-copy-id hadoopxxx命令配置免密登录其他机器。
2. 集群配置
配置目标:
| hadoop102 | hadoop103 | hadoop104 | |
|---|---|---|---|
| HDFS | NameNode / DataNode | DataNode | SecondaryNameNode / DataNode |
| YARN | NodeManager | ResourceManager / NodeManager | NodeManager |
vim /opt/module/hadoop-3.3.3/etc/hadoop/core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为xiaohao(可以在网页上删除文件等) -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>xiaohao</value>
</property>
</configuration>
vim /opt/module/hadoop-3.3.3/etc/hadoop/hdfs-site.xml
<configuration>
<!-- NameNode Web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- SecondaryNameNode Web端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
vim /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
</configuration>
vim /opt/module/hadoop-3.3.3/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vim /opt/module/hadoop-3.3.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
- 同步配置文件
xsync.sh /opt/module/hadoop-3.3.3/etc/hadoop
3. 启动集群
- 第一次启动集群需要初始化
hdfs namenode -format
- 启动 HDFS 命令:
start-dfs.shps:注意 hadoop102 需要对自己也设置免密登录。 启动完成后,可以使用jps命令查看所有 Java 进程。 通过http://192.168.100.102:9870/访问 NameNode Web 端。 - 启动 Yarn (在 ResourceManager 地址所在机器上启动,这里是 hadoop103) 命令:
start-yarn.sh启动完成后,可以通过http://192.168.100.103:8088/查看 Yarn 的资源管理情况。 - 集群文件相关命令
hadoop fs -mkdir xxx创建文件夹hadoop fs -put 源路径 目标路径上传文件
4.历史服务器配置
vim /opt/module/hadoop-3.3.3/etc/hadoop/mapred-site.xml
<!-- 历史服务器内部地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器外部地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
开启历史服务器:mapred --daemon start historyserver 配置好并开启历史服务器后可以看到 Yarn 调度的任务的执行历史详情。点击下图所示的 History 按钮,进入历史详情页面。
5.日志聚集
vim /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 同步:
xsync.sh /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml - 重启 Yarn 和 HistoryServer
mapred --daemon stop historyserver
stop-yarn.sh
start-yarn.sh
mapred --daemon start historyserver
至此,可以在历史详情页面点击 Logs 查看日志详情。
6. 集群的启动 / 停止方式
- 整体命令(前提是配置好免密登录)
start-dfs.sh / stop-dfs.shstart-yarn.sh / stop-yarn.sh - 单组件命令
hdfs --daemon start / stop namenode/datanode/secondarynamenodeyarn --daemon start / stop resourcemanager / nodemanager
7. 集群启动 / 状态查看 两个常用脚本
- myhadoop.sh,用于快速启动和关闭集群
#!/bin/bash
if [ $# -lt 1 ]
then
echo "请输入参数!"
exit
fi
case $1 in
"start")
echo "==================启动 hadoop 集群================="
echo "------------------启动 hdfs -----------------------"
ssh hadoop102 "/opt/module/hadoop-3.3.3/sbin/start-dfs.sh"
echo "------------------启动 yarn -----------------------"
ssh hadoop103 "/opt/module/hadoop-3.3.3/sbin/start-yarn.sh"
echo "------------------启动 historyserver --------------"
ssh hadoop102 "/opt/module/hadoop-3.3.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo "==================关闭 hadoop 集群================="
echo "------------------关闭 hdfs -----------------------"
ssh hadoop102 "/opt/module/hadoop-3.3.3/sbin/stop-dfs.sh"
echo "------------------关闭 yarn -----------------------"
ssh hadoop103 "/opt/module/hadoop-3.3.3/sbin/stop-yarn.sh"
echo "------------------关闭 historyserver --------------"
ssh hadoop102 "/opt/module/hadoop-3.3.3/bin/mapred --daemon stop historyserver"
;;
*)
echo "输入参数有误!"
;;
esac
- jpsall.sh,用于快速查看集群 jps 状态
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ============$host============
ssh $host jps
done
8. 集群时间同步
可以指定集群内的某台机器为标准时间,其他机器定时进行时间同步。 若集群可连接外网,则会自动与外网同步时间。