当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、Hadoop完全分布式部署(手动部署)
    • 1. 下载hadoop
    • 2. 上传安装包
    • 2. 解压hadoop安装包
    • 3. 配置hadoop配置文件
      • 3.1 虚拟机hadoop1修改hadoop配置文件
        • 3.1.1 修改 hadoop-env.sh 配置文件
        • 3.3.2 修改 core-site.xml 配置文件
        • 3.3.3 修改 hdfs-site.xml 配置文件
        • 3.3.4 修改 mapred-site.xml 配置文件
        • 3.3.5 修改 yarn-site.xml 配置文件
        • 3.3.6 修改 workers 配置文件
      • 3.2 虚拟机hadoop2安装并配置hadoop
      • 3.3 虚拟机hadoop3安装并配置hadoop
    • 4. 配置hadoop环境变量
      • 4.1 配置虚拟机hadoop1的hadoop环境变量
      • 4.2 配置虚拟机hadoop2的hadoop环境变量
      • 4.3 配置虚拟机hadoop3的hadoop环境变量
    • 5. 格式化HDFS(Hadoop分布式文件系统)
    • 6. hadoop集群启动和停止
      • 6.1 启动 hadoop 集群
      • 6.2 停止 hadoop 集群
  • 二、使用shell脚本自动部署Hadoop完全分布式(选看)
    • 1. 下载hadoop
    • 2. 上传安装包
    • 3. 使用shell脚本自动部署Hadoop完全分布式
      • 3.1 创建 hadoop1_hadoop_install_config.sh 脚本文件并添加脚本内容
      • 3.2 添加可执行权限
      • 3.3 执行脚本
    • 4. 加载环境变量
    • 5. hadoop集群启动和停止
      • 5.1 启动 hadoop 集群
      • 5.2 停止 hadoop 集群


前言

  1. 介绍在虚拟机hadoop1、hadoop2和hadoop3部署完全分布式Hadoop
  2. 部署规划:
    hadoop1hadoop2hadoop3
    HDFSNameNodeSecondaryNameNode
    DataNode
    DataNode
    YARNResourceManagerNodeManagerNodeManager
  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目录。

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文件追加如下内容。

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

在这里插入图片描述

查看文件内容是否添加成功。

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 文件。

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 文件。

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 文件。

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 文件。

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 文件。

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。

scp -r /export/servers/hadoop-3.3.0/ hadoop2:/export/servers/

在这里插入图片描述

3.3 虚拟机hadoop3安装并配置hadoop

在虚拟机hadoop1使用scp命令把虚拟机hadoop1的hadoop的安装目录复制到虚拟机hadoop3的相同目录下,就相当于在hadoop3安装并配置了hadoop。

scp -r /export/servers/hadoop-3.3.0/ hadoop3:/export/servers/

在这里插入图片描述

4. 配置hadoop环境变量

4.1 配置虚拟机hadoop1的hadoop环境变量

在虚拟机hadoop1使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

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的环境变量生效。

source /etc/profile

在这里插入图片描述

4.2 配置虚拟机hadoop2的hadoop环境变量

在虚拟机hadoop2使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

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的环境变量生效。

source /etc/profile

在这里插入图片描述

4.3 配置虚拟机hadoop3的hadoop环境变量

在虚拟机hadoop3使用echo命令向环境变量配置文件/etc/profile追加环境变量内容。

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的环境变量生效。

source /etc/profile

在这里插入图片描述

5. 格式化HDFS(Hadoop分布式文件系统)

在虚拟机hadoop1执行如下命令格式化Hadoop分布式文件系统HDFS。

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。

start-all.sh

注意:命令的全路径启动为/export/servers/hadoop-3.3.0/sbin/start-all.sh,之所以可以使用start-all.sh直接启动是因为我们设置了环境变量。

在这里插入图片描述

方法二:在虚拟机Hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs

start-dfs.sh

单独启动 yarn

start-yarn.sh

hadoop集群启动之后使用如下命名分别在虚拟机hadoop1、虚拟机hadoop2和虚拟机hadoop3执行如下命令查看对应进程是否正常。

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。

stop-all.sh

在这里插入图片描述

方法二:如果需要停止 hadoop 集群运行,在虚拟机hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs

stop-dfs.sh

单独启动 yarn

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脚本文件

touch /export/shell/hadoop1_hadoop_install_config.sh

添加如下内容:

#!/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" ] ; thenPATH=\$PATH:\$1elsePATH=\$1:\$PATHfiesac
}if [ -x /usr/bin/id ]; thenif [ -z "\$EUID" ]; then# ksh workaroundEUID=`/usr/bin/id -u`UID=`/usr/bin/id -ru`fiUSER="`/usr/bin/id -un`"LOGNAME=\$USERMAIL="/var/spool/mail/\$USER"
fi# Path manipulation
if [ "\$EUID" = "0" ]; thenpathmunge /usr/sbinpathmunge /usr/local/sbin
elsepathmunge /usr/local/sbin afterpathmunge /usr/sbin after
fiHOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "\$HISTCONTROL" = "ignorespace" ] ; thenexport HISTCONTROL=ignoreboth
elseexport HISTCONTROL=ignoredups
fiexport 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`" ]; thenumask 002
elseumask 022
fifor i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; doif [ -r "\$i" ]; thenif [ "\${-#*i}" != "\$-" ]; then. "\$i"else. "\$i" >/dev/nullfifi
doneunset i
unset -f pathmungeexport JAVA_HOME=/export/servers/jdk1.8.0_421
export PATH=\$PATH:\$JAVA_HOME/binexport 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 ]; thenecho "分发 /etc/profile 到 hadoop2 的 /etc 目录成功"
elseecho "分发 /etc/profile 到 hadoop2 的 /etc 目录失败,请检查"exit 1
fi# 分发到hadoop3
scp /etc/profile root@hadoop3:/etc/
if [ $? -eq 0 ]; thenecho "分发 /etc/profile 到 hadoop3 的 /etc 目录成功"
elseecho "分发 /etc/profile 到 hadoop3 的 /etc 目录失败,请检查"exit 1
fi# 如果临时数据目录存在则删除
if [ -d "${HADOOP_TMP_DIR}" ]; thenecho "删除自动生成的临时数据目录 ${HADOOP_TMP_DIR}..."rm -rf ${HADOOP_TMP_DIR}
fissh root@hadoop2 \
"
if [ -d \"${HADOOP_TMP_DIR}\" ]; thenecho \"删除 hadoop2 自动生成的临时数据目录 ${HADOOP_TMP_DIR}...\"rm -rf ${HADOOP_TMP_DIR}
fi
exit
"ssh root@hadoop3 \
"
if [ -d \"${HADOOP_TMP_DIR}\" ]; thenecho \"删除 hadoop3 自动生成的临时数据目录 ${HADOOP_TMP_DIR}...\"rm -rf ${HADOOP_TMP_DIR}
fi
exit
"# 检查hadoop是否已解压
if [ -d "$HADOOP_DIR/hadoop-$HADOOP_VER" ]; thenecho "hadoop安装程序已存在,正在删除原安装程序目录..."rm -rf "$HADOOP_DIR/hadoop-$HADOOP_VER"
fi# 检查hadoop安装包是否存在
if [ -f $SOFTWARE_DIR/$HADOOP_TAR ]; thenecho "hadoop安装包存在,正在解压安装包..."# 解压Hadoop安装包tar -zxvf ${HADOOP_SOFTWARE_DIR}/${HADOOP_TAR} -C ${HADOOP_DIR}echo "解压 ${HADOOP_SOFTWARE_DIR}/${HADOOP_TAR}${HADOOP_DIR} 目录成功"
elseecho "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 ]; thenecho "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop2 的 ${HADOOP_DIR} 目录成功"
elseecho "分发 ${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 ]; thenecho "分发 ${HADOOP_DIR}/hadoop-${HADOOP_VER} 到 hadoop3 的 ${HADOOP_DIR} 目录成功"
elseecho "分发 ${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 ]; thenecho "格式化HDFS成功"
elseecho "格式化HDFS失败,请检查异常并解决后重新执行此脚本"exit 1
fiecho -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添加可执行权限。

chmod +x /export/shell/hadoop1_hadoop_install_config.sh

在这里插入图片描述

3.3 执行脚本

虚拟机hadoop1上执行脚本文件自动化安装配置hadoop完全分布式。

/export/shell/hadoop1_hadoop_install_config.sh

在这里插入图片描述
在这里插入图片描述

4. 加载环境变量

根据使用shell脚本自动安装完成后的提示依次在虚拟机hadoop1、hadoop2和hadoop3执行如下命令。

source /etc/profile

在这里插入图片描述

5. hadoop集群启动和停止

5.1 启动 hadoop 集群

方法一:在虚拟机Hadoop1执行如下命令同时启动 hdfs 和 yarn。

start-all.sh

注意:命令的全路径启动为/export/servers/hadoop-3.3.0/sbin/start-all.sh,之所以可以使用start-all.sh直接启动是因为我们设置了环境变量。

在这里插入图片描述

方法二:在虚拟机Hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs

start-dfs.sh

单独启动 yarn

start-yarn.sh

hadoop集群启动之后使用如下命名分别在虚拟机hadoop1、虚拟机hadoop2和虚拟机hadoop3执行如下命令查看对应进程是否正常。

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。

stop-all.sh

在这里插入图片描述

方法二:如果需要停止 hadoop 集群运行,在虚拟机hadoop1单独启动 hdfs 和单独启动 yarn。
单独启动 hdfs

stop-dfs.sh

单独启动 yarn

stop-yarn.sh

相关文章:

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

文章目录 前言一、Hadoop完全分布式部署&#xff08;手动部署&#xff09;1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 hdfs-site…...

Spring Boot 与 Vue 共铸卓越采购管理新平台

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 &#x1f345;获取源码联系方式请查看文末&#x1f345; 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目…...

leetcode3. Longest Substring Without Repeating Characters

Given a string s, find the length of the longest substring without repeating characters. Example 1: Input: s “abcabcbb” Output: 3 Explanation: The answer is “abc”, with the length of 3. Example 2: Input: s “bbbbb” Output: 1 Explanation: The ans…...

Mongodb使用视图连接两个集合

您可以使用 $lookup 为两个集合创建一个视图&#xff0c;然后对该视图运行查询。应用程序可以查询视图&#xff0c;而无需构建或维护复杂的管道。 例子 创建两个样本集合 inventory 和 orders&#xff1a; db.inventory.insertMany( [{ prodId: 100, price: 20, quantity: 1…...

SIP是什么?

SIP&#xff08;Session Initiation Protocol&#xff0c;会话启动协议&#xff09;是一个用于建立、更改和终止多媒体会话的应用层控制协议&#xff0c;其中的会话可以是IP电话、多媒体会话或多媒体会议。 SIP是IETF多媒体数据和控制体系结构的核心协议&#xff08;最新RFC文档…...

Day 39 || 01背包、416. 分割等和子集

01背包 题目链接&#xff1a;卡码网第46题 二维解题思路&#xff1a;需要建立一个i行k列的dp数组&#xff0c;i表示每个物品&#xff0c;k代表容量&#xff0c;初始化数组子一列为0&#xff0c;第一行从背包开始能够放入起始为价值&#xff0c;其他都为0。for双循环先背包后物…...

调用detr-resnet-50进行目标检测

from transformers import DetrImageProcessor, DetrForObjectDetection import torch from PIL import Imageimage = Image.open("1.jpg") torch.set_default_device("cuda"...

Chromium 中chrome.fontSettings扩展接口定义c++

一、chrome.fontSettings 使用 chrome.fontSettings API 管理 Chrome 的字体设置。 权限 fontSettings 要使用 Font Settings API&#xff0c;您必须在扩展程序中声明 "fontSettings" 权限 清单。例如&#xff1a; {"name": "My Font Settings E…...

在Unity游戏开发在面试时会面试哪些内容?

1、请描述游戏动画有几种&#xff0c;以及其原理。 关键帧动画&#xff1a;每一帧动画序列当中包含了顶点的空间位置信息以及改变量&#xff0c;然后通过插值运算&#xff0c;得出动画效果。选中某一游戏对象&#xff0c;创建animation&#xff0c;添加属性Transform&#xff0…...

刘艳兵-DBA022-以下关于Oracle半连接的描述,哪些是正确的?

以下关于Oracle半连接的描述&#xff0c;哪些是正确的&#xff1f; A SQL中的NOT EXISTS子查询&#xff0c;通常会被转换为对应的半连接。 B SQL中的IN子查询&#xff0c;通常会被转换为对应的半连接。 C 半连接会去重 D SQL中的EXISTS子查询&#xff0c;通常会被转…...

人工智能与伦理:我们应该如何平衡科技与人性?

内容概要 在这个瞬息万变的时代&#xff0c;人工智能的迅猛发展让我们面对前所未有的伦理困境。科技进步带来了便利&#xff0c;但同时也亟需我们反思如何对待人性。尤其是在实现算法透明性时&#xff0c;我们要确保每一个决策背后都能被理解与追溯&#xff0c;这不仅是对技术…...

CRON组件一个复杂的一个简单的

CRON组件一个复杂的一个简单的 一个是复杂点的一个是简单点。 1.以简单的为例使用&#xff1a; 父组件 import CronSimple from "/views/xxx/components/cron-simple/index.vue";components: {CronSimple}<el-dialog title"调度CRON"v-if"cronV…...

自定义日志打成jar包引入项目后不生效

背景&#xff1a;写了一个请求响应日志包&#xff0c;打包后在另一个项目使用pom引入后不生效 package com.example.qqllog.aspect;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean;…...

RK3568平台开发系列讲解(中断篇)延迟工作实验

🚀返回专栏总目录 文章目录 一、什么是延迟工作二、 struct delayed_work三、延迟工作相关接口函数3.1、初始化延迟工作函数3.2、调度/取消调度 延迟工作函数四、驱动程序编写沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是延迟工作 延迟工作是一种将工作的执…...

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…...

整车功能架构 --- 智能座舱

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…...

java stream流的使用

Java中的Stream API是Java 8引入的一个重要特性&#xff0c;它提供了对集合对象进行各种非常便利、高效的聚合操作&#xff08;aggregate operation&#xff09;或大批量数据操作&#xff08;bulk data operation&#xff09;。Stream API借助于Lambda表达式&#xff0c;极大地…...

(JVM)带你一起研究JVM的语法糖功能 和 JVM的即时编译器

1. 语法糖 所谓的语法糖&#xff0c;其实就是指java编译器把*.java源码编译为*.class字节码的过程中&#xff0c;自动生成和转换的一些代码&#xff0c;主要是为了减轻程序员的负担&#xff0c;算是java编译器给我们第一个额外福利 以下代码的分析&#xff0c;借助了javap工具…...

【Linux】ClickHouse 部署

搭建Clickhouse集群时&#xff0c;需要使用Zookeeper去实现集群副本之间的同步&#xff0c;所以需要先搭建zookeeper集群 1、卸载 # 检查有哪些clickhouse依赖包&#xff1a; [rootlocalhost ~]# yum list installed | grep clickhouse# 移除依赖包&#xff1a; [rootlocalho…...

js的小知识

以下是一些 JavaScript 的小知识点&#xff0c;适合不同水平的开发者&#xff1a; 1. 变量声明 使用 let、const 和 var 声明变量。let 和 const 块级作用域&#xff0c;而 var 是函数作用域。const 声明的变量不可重新赋值&#xff0c;但对象的属性仍然可以修改。 2. 箭头函…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...