文章目录
- 前言
- 一、Hadoop完全分布式部署(手动部署)
-
- [1. 下载hadoop](#1. 下载hadoop)
- [2. 上传安装包](#2. 上传安装包)
- [2. 解压hadoop安装包](#2. 解压hadoop安装包)
- [3. 配置hadoop配置文件](#3. 配置hadoop配置文件)
-
- [3.1 虚拟机hadoop1修改hadoop配置文件](#3.1 虚拟机hadoop1修改hadoop配置文件)
-
- [3.1.1 修改 hadoop-env.sh 配置文件](#3.1.1 修改 hadoop-env.sh 配置文件)
- [3.3.2 修改 core-site.xml 配置文件](#3.3.2 修改 core-site.xml 配置文件)
- [3.3.3 修改 hdfs-site.xml 配置文件](#3.3.3 修改 hdfs-site.xml 配置文件)
- [3.3.4 修改 mapred-site.xml 配置文件](#3.3.4 修改 mapred-site.xml 配置文件)
- [3.3.5 修改 yarn-site.xml 配置文件](#3.3.5 修改 yarn-site.xml 配置文件)
- [3.3.6 修改 workers 配置文件](#3.3.6 修改 workers 配置文件)
- [3.2 虚拟机hadoop2安装并配置hadoop](#3.2 虚拟机hadoop2安装并配置hadoop)
- [3.3 虚拟机hadoop3安装并配置hadoop](#3.3 虚拟机hadoop3安装并配置hadoop)
- [4. 配置hadoop环境变量](#4. 配置hadoop环境变量)
-
- [4.1 配置虚拟机hadoop1的hadoop环境变量](#4.1 配置虚拟机hadoop1的hadoop环境变量)
- [4.2 配置虚拟机hadoop2的hadoop环境变量](#4.2 配置虚拟机hadoop2的hadoop环境变量)
- [4.3 配置虚拟机hadoop3的hadoop环境变量](#4.3 配置虚拟机hadoop3的hadoop环境变量)
- [5. 格式化HDFS(Hadoop分布式文件系统)](#5. 格式化HDFS(Hadoop分布式文件系统))
- [6. hadoop集群启动和停止](#6. hadoop集群启动和停止)
-
- [6.1 启动 hadoop 集群](#6.1 启动 hadoop 集群)
- [6.2 停止 hadoop 集群](#6.2 停止 hadoop 集群)
- 二、使用shell脚本自动部署Hadoop完全分布式(选看)
-
- [1. 下载hadoop](#1. 下载hadoop)
- [2. 上传安装包](#2. 上传安装包)
- [3. 使用shell脚本自动部署Hadoop完全分布式](#3. 使用shell脚本自动部署Hadoop完全分布式)
-
- [3.1 创建 hadoop1_hadoop_install_config.sh 脚本文件并添加脚本内容](#3.1 创建 hadoop1_hadoop_install_config.sh 脚本文件并添加脚本内容)
- [3.2 添加可执行权限](#3.2 添加可执行权限)
- [3.3 执行脚本](#3.3 执行脚本)
- [4. 加载环境变量](#4. 加载环境变量)
- [5. hadoop集群启动和停止](#5. hadoop集群启动和停止)
-
- [5.1 启动 hadoop 集群](#5.1 启动 hadoop 集群)
- [5.2 停止 hadoop 集群](#5.2 停止 hadoop 集群)
前言
-
介绍在虚拟机hadoop1、hadoop2和hadoop3部署完全分布式Hadoop
-
部署规划:
hadoop1 hadoop2 hadoop3 HDFS NameNode SecondaryNameNode DataNode DataNode YARN ResourceManager NodeManager NodeManager -
配置hadoop配置文件
-
配置hadoop环境变量
-
访问hadoop对应Web UI
-
提供shell脚本自动化安装hadoop完全分布式
一、Hadoop完全分布式部署(手动部署)
1. 下载hadoop
点击下载hadoop3.3.0安装包:https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
2. 上传安装包
通过拖移的方式将下载的hadoop安装包hadoop-3.3.0.tar.gz上传至虚拟机hadoop1的/export/software目录。
2. 解压hadoop安装包
在虚拟机Hadoop1上传完成后将hadoop安装包通过解压方式安装至/export/servers目录。
shell
tar -zxvf /export/software/hadoop-3.3.0.tar.gz -C /export/servers/
解压完成如下图所示。
3. 配置hadoop配置文件
3.1 虚拟机hadoop1修改hadoop配置文件
3.1.1 修改 hadoop-env.sh 配置文件
在虚拟机Hadoop1修改hadoop运行时环境变量配置文件/export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
,使用echo命令向hadoop-env.sh文件追加如下内容。
shell
echo >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export JAVA_HOME=/export/servers/jdk1.8.0_421' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export HDFS_NAMENODE_USER=root' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export HDFS_DATANODE_USER=root' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export HDFS_SECONDARYNAMENODE_USER=root' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export YARN_RESOURCEMANAGER_USER=root' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
echo 'export YARN_NODEMANAGER_USER=root' >> /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
查看文件内容是否添加成功。
shell
cat /export/servers/hadoop-3.3.0/etc/hadoop/hadoop-env.sh
3.3.2 修改 core-site.xml 配置文件
在虚拟机Hadoop1修改hadoop核心配置文件/export/servers/hadoop-3.3.0/etc/hadoop/core-site.xml
,使用echo命令把配置内容重定向并写入到 /export/servers/hadoop-3.3.0/etc/hadoop/core-site.xml 文件。
shell
echo \
'<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定Hadoop集群的默认文件系统名称 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<!-- 设置Hadoop临时目录的位置,用于存储各种临时文件 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 当通过Web界面访问Hadoop集群时,默认的用户名 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 允许哪些主机上的用户可以作为代理用户执行操作 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value> <!-- * 表示任何主机 -->
</property>
<!-- 定义哪个组的用户可以作为代理用户执行操作 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value> <!-- * 表示所有组的用户 -->
</property>
<!-- 设置回收站功能的保留时间间隔,单位为分钟 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value> <!-- 1440分钟等于1天 -->
</property>
</configuration>'\
> /export/servers/hadoop-3.3.0/etc/hadoop/core-site.xml
3.3.3 修改 hdfs-site.xml 配置文件
在虚拟机Hadoop1修改hdfs的配置文件/export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml
,使用cat命令把配置内容重定向并写入到 /export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml 文件。
shell
cat >/export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9868</value>
</property>
</configuration>
EOF
3.3.4 修改 mapred-site.xml 配置文件
在虚拟机Hadoop1修改mapreduce的配置文件/export/servers/hadoop-3.3.0/etc/hadoop/mapred-site.xml
,使用cat命令把配置内容重定向并写入到 /export/servers/hadoop-3.3.0/etc/hadoop/mapred-site.xml 文件。
shell
cat >/export/servers/hadoop-3.3.0/etc/hadoop/mapred-site.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.Webapp.address</name>
<value>hadoop1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/export/servers/hadoop-3.3.0</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/export/servers/hadoop-3.3.0</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/export/servers/hadoop-3.3.0</value>
</property>
</configuration>
EOF
3.3.5 修改 yarn-site.xml 配置文件
在虚拟机Hadoop1修改yarn的配置文件/export/servers/hadoop-3.3.0/etc/hadoop/yarn-site.xml
,使用cat命令把配置内容重定向并写入到 /export/servers/hadoop-3.3.0/etc/hadoop/yarn-site.xml 文件。
shell
cat >/export/servers/hadoop-3.3.0/etc/hadoop/yarn-site.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop1:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
EOF
3.3.6 修改 workers 配置文件
在虚拟机Hadoop1修改hadoop的从节点服务器配置文件/export/servers/hadoop-3.3.0/etc/hadoop/workers
,使用cat命令把配置内容重定向并写入到 /export/servers/hadoop-3.3.0/etc/hadoop/workers 文件。
shell
cat >/export/servers/hadoop-3.3.0/etc/hadoop/workers <<EOF
hadoop2
hadoop3
EOF
3.2 虚拟机hadoop2安装并配置hadoop
在虚拟机hadoop1使用scp命令把虚拟机hadoop1的hadoop的安装目录复制到虚拟机hadoop2的相同目录下,就相当于在hadoop2安装并配置了hadoop。
shell
scp -r /export/servers/hadoop-3.3.0/ hadoop2:/export/servers/
3.3 虚拟机hadoop3安装并配置hadoop
在虚拟机hadoop1使用scp命令把虚拟机hadoop1的hadoop的安装目录复制到虚拟机hadoop3的相同目录下,就相当于在hadoop3安装并配置了hadoop。
shell
scp -r /export/servers/hadoop-3.3.0/ hadoop3:/export/servers/
4. 配置hadoop环境变量
4.1 配置虚拟机hadoop1的hadoop环境变量
在虚拟机hadoop1使用echo
命令向环境变量配置文件/etc/profile
追加环境变量内容。
shell
echo >> /etc/profile
echo 'export HADOOP_HOME=/export/servers/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用hadoop的环境变量生效。
shell
source /etc/profile
4.2 配置虚拟机hadoop2的hadoop环境变量
在虚拟机hadoop2使用echo
命令向环境变量配置文件/etc/profile
追加环境变量内容。
shell
echo >> /etc/profile
echo 'export HADOOP_HOME=/export/servers/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用hadoop的环境变量生效。
shell
source /etc/profile
4.3 配置虚拟机hadoop3的hadoop环境变量
在虚拟机hadoop3使用echo
命令向环境变量配置文件/etc/profile
追加环境变量内容。
shell
echo >> /etc/profile
echo 'export HADOOP_HOME=/export/servers/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
配置环境变量后,需要使用如下命令加载环境变量配置文件/etc/profile,使用hadoop的环境变量生效。
shell
source /etc/profile
5. 格式化HDFS(Hadoop分布式文件系统)
在虚拟机hadoop1执行如下命令格式化Hadoop分布式文件系统HDFS。
shell
hdfs namenode -format
注意:如果在格式化过程中遇到如下提示,输入
n
并按回车键,然后依次在虚拟机hadoop1、hadoop2和hadoop3 执行rm -rf /export/data/hadoop-3.3.0
删除之前生成的数据保存目录,再在虚拟机hadoop1执行hdfs namenode -format
重新格式化文件系统。
格式化成功如下图所示,会提示我们存储目录 /export/data/hadoop-3.3.0/dfs/name 已经成功格式化 。
6. hadoop集群启动和停止
6.1 启动 hadoop 集群
方法一:在虚拟机Hadoop1执行如下命令同时启动 hdfs 和 yarn。
shell
start-all.sh
注意:命令的全路径启动为
/export/servers/hadoop-3.3.0/sbin/start-all.sh
,之所以可以使用start-all.sh
直接启动是因为我们设置了环境变量。
方法二 :在虚拟机Hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs
shell
start-dfs.sh
单独启动 yarn
shell
start-yarn.sh
hadoop集群启动之后使用如下命名分别在虚拟机hadoop1、虚拟机hadoop2和虚拟机hadoop3执行如下命令查看对应进程是否正常。
shelljps -l
正常如下图所示。
访问 HDFS(NameNode)的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.160:9870
进行访问,如下图。
检查DataNode是否正常,正常如下图所示。
访问 HDFS(Secondary NameNode)的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.161:9868
进行访问,如下图。
访问 YARN 的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.160:8088
进行访问,如下图。
6.2 停止 hadoop 集群
方法一:如果需要停止 hadoop 集群运行,在虚拟机hadoop1执行如下命令同时停止 hdfs 和 yarn。
shell
stop-all.sh
方法二 :如果需要停止 hadoop 集群运行,在虚拟机hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs
shell
stop-dfs.sh
单独启动 yarn
shell
stop-yarn.sh
二、使用shell脚本自动部署Hadoop完全分布式(选看)
1. 下载hadoop
点击下载hadoop3.3.0安装包:https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
2. 上传安装包
通过拖移的方式将下载的hadoop安装包hadoop-3.3.0.tar.gz上传至虚拟机hadoop1的/export/software目录。
3. 使用shell脚本自动部署Hadoop完全分布式
3.1 创建 hadoop1_hadoop_install_config.sh 脚本文件并添加脚本内容
在虚拟机hadoop1 上创建/export/shell/hadoop1_hadoop_install_config.sh
脚本文件
shell
touch /export/shell/hadoop1_hadoop_install_config.sh
添加如下内容:
shell
#!/bin/bash
# 定义常量
HADOOP_DIR="/export/servers"
HADOOP_VER="3.3.0"
HADOOP_TAR="hadoop-${HADOOP_VER}.tar.gz"
HADOOP_SOFTWARE_DIR="/export/software"
JAVA_PATH="/export/servers/jdk1.8.0_421"
HADOOP_TMP_DIR="/export/data/hadoop-${HADOOP_VER}"
DATA_DIR="/export/data"
SOFTWARE_DIR="/export/software"
SERVERS_DIR="/export/servers"
cat > /etc/profile << EOF
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ":\${PATH}:" in
*:"\$1":*)
;;
*)
if [ "\$2" = "after" ] ; then
PATH=\$PATH:\$1
else
PATH=\$1:\$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z "\$EUID" ]; then
# ksh workaround
EUID=`/usr/bin/id -u`
UID=`/usr/bin/id -ru`
fi
USER="`/usr/bin/id -un`"
LOGNAME=\$USER
MAIL="/var/spool/mail/\$USER"
fi
# Path manipulation
if [ "\$EUID" = "0" ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "\$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ \$UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "\$i" ]; then
if [ "\${-#*i}" != "\$-" ]; then
. "\$i"
else
. "\$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
export JAVA_HOME=/export/servers/jdk1.8.0_421
export PATH=\$PATH:\$JAVA_HOME/bin
export HADOOP_HOME=/export/servers/hadoop-3.3.0
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF
echo "HADOOP_HOME 设置成功"
# 分发到hadoop2
scp /etc/profile root@hadoop2:/etc/
if [ $? -eq 0 ]; then
echo "分发 /etc/profile 到 hadoop2 的 /etc 目录成功"
else
echo "分发 /etc/profile 到 hadoop2 的 /etc 目录失败,请检查"
exit 1
fi
# 分发到hadoop3
scp /etc/profile root@hadoop3:/etc/
if [ $? -eq 0 ]; then
echo "分发 /etc/profile 到 hadoop3 的 /etc 目录成功"
else
echo "分发 /etc/profile 到 hadoop3 的 /etc 目录失败,请检查"
exit 1
fi
# 如果临时数据目录存在则删除
if [ -d "${HADOOP_TMP_DIR}" ]; then
echo "删除自动生成的临时数据目录 ${HADOOP_TMP_DIR}..."
rm -rf ${HADOOP_TMP_DIR}
fi
ssh root@hadoop2 \
"
if [ -d \"${HADOOP_TMP_DIR}\" ]; then
echo \"删除 hadoop2 自动生成的临时数据目录 ${HADOOP_TMP_DIR}...\"
rm -rf ${HADOOP_TMP_DIR}
fi
exit
"
ssh root@hadoop3 \
"
if [ -d \"${HADOOP_TMP_DIR}\" ]; then
echo \"删除 hadoop3 自动生成的临时数据目录 ${HADOOP_TMP_DIR}...\"
rm -rf ${HADOOP_TMP_DIR}
fi
exit
"
# 检查hadoop是否已解压
if [ -d "$HADOOP_DIR/hadoop-$HADOOP_VER" ]; then
echo "hadoop安装程序已存在,正在删除原安装程序目录..."
rm -rf "$HADOOP_DIR/hadoop-$HADOOP_VER"
fi
# 检查hadoop安装包是否存在
if [ -f $SOFTWARE_DIR/$HADOOP_TAR ]; then
echo "hadoop安装包存在,正在解压安装包..."
# 解压Hadoop安装包
tar -zxvf ${HADOOP_SOFTWARE_DIR}/${HADOOP_TAR} -C ${HADOOP_DIR}
echo "解压 ${HADOOP_SOFTWARE_DIR}/${HADOOP_TAR} 到 ${HADOOP_DIR} 目录成功"
else
echo "hadoop安装包不存在,请先上传安装包到 ${HADOOP_SOFTWARE_DIR} 目录"
exit 1
fi
# 配置hadoop-env.sh
echo >>${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/hadoop-env.sh
echo \
"
export JAVA_HOME=/export/servers/jdk1.8.0_421
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
" \
>>${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/hadoop-env.sh
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/hadoop-env.sh 配置文件修改成功"
# 配置core-site.xml
cat >${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/core-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>${HADOOP_TMP_DIR}</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
</configuration>
EOF
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/core-site.xml 配置文件修改成功"
# 配置hdfs-site.xml
cat >${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/hdfs-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9868</value>
</property>
</configuration>
EOF
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/hdfs-site.xml 配置文件修改成功"
# 配置mapred-site.xml
cat >${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/mapred-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_DIR}/hadoop-${HADOOP_VER}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_DIR}/hadoop-${HADOOP_VER}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_DIR}/hadoop-${HADOOP_VER}</value>
</property>
</configuration>
EOF
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/mapred-site.xml 配置文件修改成功"
# 配置yarn-site.xml
cat >${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/yarn-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop1:19888/jobhistory/logs</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
EOF
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/yarn-site.xml 配置文件修改成功"
# 设置workers文件
echo -e "hadoop2\nhadoop3" >${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/workers
echo "${HADOOP_DIR}/hadoop-${HADOOP_VER}/etc/hadoop/workers 配置文件修改成功"
# 分发到hadoop2
scp -r ${HADOOP_DIR}/hadoop-${HADOOP_VER} root@hadoop2:${HADOOP_DIR}/
if [ $? -eq 0 ]; then
echo "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop2 的 ${HADOOP_DIR} 目录成功"
else
echo "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop2 的 ${HADOOP_DIR} 目录失败,请检查"
exit 1
fi
# 分发到hadoop3
scp -r ${HADOOP_DIR}/hadoop-${HADOOP_VER} root@hadoop3:${HADOOP_DIR}/
if [ $? -eq 0 ]; then
echo "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop3 的 ${HADOOP_DIR} 目录成功"
else
echo "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop3 的 ${HADOOP_DIR} 目录失败,请检查"
exit 1
fi
# 设置临时环境变量
export HADOOP_HOME=${HADOOP_DIR}/hadoop-${HADOOP_VER}
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
echo "设置hadoop临时环境变量为: \$HADOOP_HOME = ${HADOOP_HOME}"
# 格式化HDFS
echo "正在格式化HDFS..."
hdfs namenode -format
if [ $? -eq 0 ]; then
echo "格式化HDFS成功"
else
echo "格式化HDFS失败,请检查异常并解决后重新执行此脚本"
exit 1
fi
echo -e "\n-----hadoop完全分布式安装配置完成-----\n"
echo -e "1. 请手动在hadoop1、hadoop2和hadoop3执行命令 source /etc/profile 加载环境变量\n"
echo "3. 启动hadoop命令:start-all.sh, 停止hadoop命令:stop-all.sh"
exit 0
3.2 添加可执行权限
在虚拟机hadoop1 上给脚本文件/export/shell/hadoop1_hadoop_install_config.sh
添加可执行权限。
shell
chmod +x /export/shell/hadoop1_hadoop_install_config.sh
3.3 执行脚本
在虚拟机hadoop1上执行脚本文件自动化安装配置hadoop完全分布式。
shell
/export/shell/hadoop1_hadoop_install_config.sh
4. 加载环境变量
根据使用shell脚本自动安装完成后的提示依次在虚拟机hadoop1、hadoop2和hadoop3执行如下命令。
shell
source /etc/profile
5. hadoop集群启动和停止
5.1 启动 hadoop 集群
方法一:在虚拟机Hadoop1执行如下命令同时启动 hdfs 和 yarn。
shell
start-all.sh
注意:命令的全路径启动为
/export/servers/hadoop-3.3.0/sbin/start-all.sh
,之所以可以使用start-all.sh
直接启动是因为我们设置了环境变量。
方法二 :在虚拟机Hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs
shell
start-dfs.sh
单独启动 yarn
shell
start-yarn.sh
hadoop集群启动之后使用如下命名分别在虚拟机hadoop1、虚拟机hadoop2和虚拟机hadoop3执行如下命令查看对应进程是否正常。
shelljps -l
正常如下图所示。
访问 HDFS(NameNode)的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.160:9870
进行访问,如下图。
检查DataNode是否正常,正常如下图所示。
访问 HDFS(Secondary NameNode)的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.161:9868
进行访问,如下图。
访问 YARN 的 Web UI 页面在启动hadoop集群后,在浏览器输入
http://192.168.121.160:8088
进行访问,如下图。
5.2 停止 hadoop 集群
方法一:如果需要停止 hadoop 集群运行,在虚拟机hadoop1执行如下命令同时停止 hdfs 和 yarn。
shell
stop-all.sh
方法二 :如果需要停止 hadoop 集群运行,在虚拟机hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs
shell
stop-dfs.sh
单独启动 yarn
shell
stop-yarn.sh