Hadoop生态圈框架部署(四)- Hadoop完全分布式部署

文章目录

  • 前言
  • 一、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 集群)

前言

  1. 介绍在虚拟机hadoop1、hadoop2和hadoop3部署完全分布式Hadoop

  2. 部署规划:

    hadoop1 hadoop2 hadoop3
    HDFS NameNode SecondaryNameNode DataNode DataNode
    YARN ResourceManager NodeManager NodeManager
  3. 配置hadoop配置文件

  4. 配置hadoop环境变量

  5. 访问hadoop对应Web UI

  6. 提供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执行如下命令查看对应进程是否正常。

shell 复制代码
jps -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执行如下命令查看对应进程是否正常。

shell 复制代码
jps -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
相关推荐
蚊子不吸吸29 分钟前
DevOps开发运维简述
linux·运维·ci/cd·oracle·kubernetes·gitlab·devops
Tp_jh3 小时前
推荐一款非常好用的C/C++在线编译器
linux·c语言·c++·ide·单片机·unity·云原生
cleveryuoyuo4 小时前
命令行参数、环境变量、地址空间
linux
学习向前冲4 小时前
ifconfig命令-网卡名
linux·服务器·网络
WiFiMing5 小时前
nginx的基本安装与服务器配置
linux·运维·centos
Coke.涛5 小时前
DNS服务部署
linux·运维·服务器
小码哥呀5 小时前
RabbitMQ如何保证发送的消息可靠(RabbitMQ的Confirm模式和2.Return模式)
分布式·rabbitmq
Ayka5 小时前
Linux Qt 6安装Oracle QOCI SQL Driver插件(适用WSL)
linux·sql·qt·oracle·oci
数据要素X6 小时前
【数据仓库】Hive 拉链表实践
大数据·数据库·数据仓库·人工智能·hive·hadoop·安全
丶Darling.7 小时前
vscode在windows和linux如何使用cmake构建项目并make生成可执行文件,两者有什么区别
linux·windows·vscode