contos7.9 部署3节点 hadoop3.4 集群 非高可用

contos7.9 部署3节点 hadoop3.4 集群 非高可用

  • contos7.9 部署3节点 hadoop3.4 集群 非高可用
    • 环境信息
    • 服务器角色分配
    • 服务器配置
      • 服务器配置初始化 `init_server.sh`
      • 配置主机名映射
        • 所有节点配置 hosts文件
      • 配置免密登录
    • hadoop 安装环境配置
      • 下载安装包
        • 下载 jdk1.8
        • hadoop3.4
      • 分发安装包
      • 安装jdk1.8 `install_jdk.sh`
      • 安装 hadoop3.4
        • 部署 hadoop3.4 运行环境 `env_hadoop.sh`
        • 配置 Hadoop3.4 核心文件
          • `core-site.xml`
            • 所有节点上配置
          • `hdfs-site.xml`
            • 在NameNode节点(hadoop-0001)上配置:
            • 在DataNode节点(hadoop-0002和hadoop-0003)上:
          • `yarn-site.xml`
            • 在ResourceManager节点(hadoop-0001)上:
            • 在NodeManager节点(hadoop-0002)上:
            • 在NodeManager节点(hadoop-0003)上:
          • `mapred-site.xml`
            • 在所有节点上(因为MapReduce客户端可能需要在任何节点上运行):
          • 写入works文件
            • 在NameNode节点(hadoop-0001)上配置:
    • 启动 hadoop 集群
      • 给 hadoop 用户授权并设置免密登录
      • 在 NameNode 节点格式化 HDFS(**对于新集群或重新格式化**)
      • 启动 HDFS 的守护进程
      • 启动 YARN 守护进程
      • 查看集群状态
    • 关闭 hadoop 集群
      • 先停止 YARN 守护进程
      • 再停止 HDFS 守护进程
    • 补充不使用 works 文件的单独启动
      • 对于hdfs节点
      • 对应yarn节点
      • WebAppProxy 服务器
      • MapReduce JobHistory Server
    • 补充不使用 works 文件的单独关闭
      • 对于hdfs节点
      • 对应yarn节点
      • 停止 WebAppProxy 服务器
      • MapReduce JobHistory Server
    • 集群扩容
      • 新增一台 datanode 节点
      • 服务器配置
      • 服务器配置初始化
      • 安装jdk
      • 安装 hadoop
      • 配置hadoop
        • `core-site.xml`
        • `hdfs-site.xml`
        • `yarn-site.xml`
        • `mapred-site.xml`
      • 配置 works文件
      • 启动 hadoop 集群新节点
        • 启动 hdfs 守护进程
        • 启动 yarn 守护进程(启动 NodeManager)
        • 查看集群状态
      • 再次停止四节点集群
        • 停止 yarn 守护进程
        • 停止 hdfs 守护进程
    • 缩容集群
      • 减少一台 datanode 节点
      • 确认数据副本
      • 进入安全模式
      • 修改配置添加黑名单
      • 配置黑名单文件 `hosts.exclude`
      • 刷新集群
      • 确认退役状态
      • 停止 DataNode
      • 从配置中移除节点 hadoop-0004
      • 清理节点
      • 退出安全模式
      • Balancer 操作(可选)
      • 从配置中移除节点 hadoop-0004
      • 清理节点
      • 退出安全模式
      • Balancer 操作(可选)

contos7.9 部署3节点 hadoop3.4 集群 非高可用

环境信息

服务器IP地址配置系统jdkhadoop
hadoop-0001192.168.0.1412C4GCentOS 7.9 64bitjdk-8u421-linux-x64.tar.gzhadoop-3.4.0.tar.gz
hadoop-0002192.168.0.2222C4GCentOS 7.9 64bitjdk-8u421-linux-x64.tar.gzhadoop-3.4.0.tar.gz
hadoop-0003192.168.0.2522C4GCentOS 7.9 64bitjdk-8u421-linux-x64.tar.gzhadoop-3.4.0.tar.gz

服务器角色分配

服务器角色
hadoop-0001NameNode 和 ResourceManager,都作为 DataNode 和 NodeManagerNameNode通常单独主机,ResourceManager通常单独主机
hadoop-0002Secondary NameNode,都作为 DataNode 和 NodeManagerSecondary NameNode非NameNode主机
hadoop-0003都作为 DataNode 和 NodeManagerNodeManager运行在每个DataNode节点上

服务器配置

服务器配置初始化 init_server.sh

#!/bin/bash# 清理旧的YUM源
rm -rf /etc/yum.repos.d/*.repo# 下载华为云内部使用的YUM源文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo# 清理YUM缓存并重新生成
yum clean all
yum makecache# 安装常用软件包
yum install -y net-tools lftp rsync psmisc vim-enhanced tree vsftpd bash-completion createrepo lrzsz iproute# 停止不需要的服务
systemctl stop postfix atd tuned# 卸载不需要的软件包
yum remove -y postfix at audit tuned kexec-tools firewalld-*# 修改cloud配置文件,注释掉manage_etc_hosts: localhost这一行
sed -i '/manage_etc_hosts: localhost/s/^/#/' /etc/cloud/cloud.cfg# 检查SELinux状态,确保其为Disabled
SELINUX_STATUS=$(getenforce)
if [ "$SELINUX_STATUS" != "Disabled" ]; thenecho "SELinux is not disabled. Please disable SELinux before running this script."exit 1
fi# 检查防火墙状态,确保firewalld未启用
FIREWALLD_STATUS=$(systemctl is-active --quiet firewalld)
if [ "$FIREWALLD_STATUS" == "active" ]; thenecho "Firewalld is active. Please stop and disable firewalld before running this script."exit 1
fi# 重启服务器
echo "Rebooting the server..."
reboot
bash init_server.sh

配置主机名映射

所有节点配置 hosts文件
[root@hadoop-0001 ~]# cat /etc/hosts
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
# 把127.0.0.1对应的 主机名这行删掉
192.168.0.141   hadoop-0001
192.168.0.222   hadoop-0002
192.168.0.252   hadoop-0003for i in 192.168.0.141 192.168.0.222 192.168.0.252; do scp /etc/hosts $i:/etc/hosts; done

配置免密登录

[root@hadoop-0001 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Cs7KQUaKcghgPJ5HhTjQOf9auz4O4eliH2D7JjUvzus root@hadoop-0001
The key's randomart image is:
+---[RSA 2048]----+
|=o..o.           |
|o=+o             |
|o *o             |
|o* ..            |
|= B o.  S        |
|.= *o+o.         |
|  o.B=..         |
| .+*+o+          |
| .oBE=+o         |
+----[SHA256]-----+[root@hadoop-0001 ~]# for i in 192.168.0.141 192.168.0.222 192.168.0.252; do ssh-copy-id $i; done
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ECDSA key fingerprint is SHA256:lVwPW/z6UMHejWxQHICQD8bn/7zfKDTRwRT81GWSm9M.
ECDSA key fingerprint is MD5:7b:3d:d4:09:49:05:6a:f2:b3:60:c5:97:52:f5:4f:1e.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.141's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.0.141'"
and check to make sure that only the key(s) you wanted were added./usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.222's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.0.222'"
and check to make sure that only the key(s) you wanted were added./usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.0.252's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh '192.168.0.252'"
and check to make sure that only the key(s) you wanted were added.

hadoop 安装环境配置

下载安装包

华为镜像站点:华为开源镜像站_软件开发服务_华为云

下载 jdk1.8

hadoop支持的jdk版本:Hadoop Java 版本 - Hadoop - Apache Software Foundation

支持的 Java 版本
Apache Hadoop 3.3 及更高版本支持 Java 8 和 Java 11(仅限运行时)
请使用 Java 8 编译 Hadoop。不支持使用 Java 11 编译 Hadoop: 哈多普-16795 - Java 11 编译支持 打开
Apache Hadoop 从 3.0.x 到 3.2.x 现在仅支持 Java 82.7.x 到 2.10.x 的 Apache Hadoop 同时支持 Java 78
Linux x64 Compressed Archive139.93 MBjdk-8u421-linux-x64.tar.gz
hadoop-3.4.0.tar.gz

在这里插入图片描述

hadoop3.4

下载二进制包

Apache Download Mirrors

https://dlcdn.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz

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

分发安装包

curl -o hadoop-3.4.0.tar.gz https://dlcdn.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
for i in 192.168.0.222 192.168.0.252; do scp hadoop-3.4.0.tar.gz jdk-8u421-linux-x64.tar.gz install_jdk.sh root@$i:/root/; done

安装jdk1.8 install_jdk.sh

#!/bin/bash# 定义变量
JDK_TAR_GZ="$1"
PROFILE_BACKUP="/etc/profile.bak.$(date +%F-%T)"
JDK_INSTALL_DIR=""
INSTALLED_JDK_VERSION=""# 错误处理逻辑
handle_error() {echo "[ERROR] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1" >&2exit 1
}# 提示信息处理逻辑
handle_info() {echo "[INFO] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1"
}handle_warning() {echo "[WARNING] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1"
}# 检查是否传入了参数
if [[ -z "$JDK_TAR_GZ" ]]; thenhandle_error "未传入JDK安装包的文件名作为参数。用法:$0 jdk-文件名.tar.gz"
fi# 检查JDK安装包是否在当前目录
if [[ ! -f "$JDK_TAR_GZ" ]]; thenhandle_error "未在当前目录找到JDK安装包 $JDK_TAR_GZ。"
fi# 检查是否已经安装了JDK并获取版本
if command -v java &> /dev/null; thenINSTALLED_JDK_VERSION=$(java -version 2>&1 | head -n 1 | awk -F'[ "]+' '{print $3}')INSTALLED_JDK_VERSION_MAJOR_MINOR=$(echo "$INSTALLED_JDK_VERSION" | cut -d. -f1-2)handle_info "已安装的JDK版本信息如下:"java -versionif [[ "$INSTALLED_JDK_VERSION_MAJOR_MINOR" != "1.8" ]]; thenhandle_info "警告:已安装的JDK版本不是1.8,而是 $INSTALLED_JDK_VERSION。"# 提供卸载非JDK 1.8版本的指导if rpm -qa | grep -q "jdk|java"; thenhandle_info "发现通过rpm安装的JDK,可以使用以下命令卸载:"handle_info "rpm -e --nodeps $(rpm -qa | grep -E 'jdk|java')"elif yum list installed | grep -q "jdk|java"; thenhandle_info "发现通过yum安装的JDK,可以使用以下命令卸载:"handle_info "yum remove $(yum list installed | grep -E 'jdk|java' | awk '{print $1}')"elsehandle_info "无法确定JDK的安装方式,可能需要手动卸载。请查找相关安装文档。"firead -p "是否继续安装新版本的JDK?(y/n): " choiceif [[ "$choice" != "y" && "$choice" != "Y" ]]; thenhandle_info "取消安装。"exit 0fifi
elsehandle_info "未检测到JDK安装。"
fi# 备份/etc/profile
handle_info "开始备份/etc/profile到$PROFILE_BACKUP"
cp /etc/profile "$PROFILE_BACKUP" || handle_error "Failed to create backup of /etc/profile."
handle_info "备份/etc/profile完成"# 解压JDK安装包
handle_info "开始解压JDK安装包 $JDK_TAR_GZ 到 /usr/local/"
tar -xzf "$JDK_TAR_GZ" -C /usr/local/ || handle_error "Failed to extract $JDK_TAR_GZ file."
handle_info "解压JDK安装包完成"# 获取解压后的JDK目录名(使用find命令提高健壮性)
JDK_DIRS=($(find /usr/local/ -maxdepth 1 -type d -name "jdk[0-9]*.[0-9]*.[0-9]*_[0-9]*" 2>/dev/null))
if [[ ${#JDK_DIRS[@]} -eq 0 ]]; thenhandle_error "未找到解压后的JDK目录。"
elif [[ ${#JDK_DIRS[@]} -gt 1 ]]; thenhandle_warning "警告:发现多个可能的JDK目录,选择第一个(${JDK_DIRS[0]}):"for dir in "${JDK_DIRS[@]}"; dohandle_warning "  $dir"done
fi
JDK_INSTALL_DIR="${JDK_DIRS[0]}"# 将环境变量写入/etc/profile
handle_info "开始将环境变量写入/etc/profile"
{echo ""echo "export JAVA_HOME=$JDK_INSTALL_DIR"echo "export PATH=\$JAVA_HOME/bin:\$PATH"
} >> /etc/profile
handle_info "环境变量写入/etc/profile完成"# 为了使更改立即生效,对当前会话加载新的环境变量(对后续登录用户无效)
handle_info "/etc/profile 是在用户登录时由系统读取的,因此任何对 /etc/profile 的更改都需要用户重新登录或手动重新加载(如使用 source /etc/profile)才能生效。"
source /etc/profile || handle_error "Failed to source /etc/profile."# 验证JDK安装是否成功
if java -version 2>&1; thenhandle_info "JDK安装成功,版本信息如下:"java -versionhandle_info "安装和配置已完成。环境变量已写入/etc/profile。"handle_info "对于当前用户,为了使更改立即生效,请执行'source /etc/profile'。"handle_info "对于后续登录的用户,新的环境变量将在他们登录时自动生效。"
elsehandle_error "JDK安装验证失败。请检查JDK是否正确安装以及环境变量设置是否正确。"
fi
bash install_jdk.sh
#source /etc/profile

安装 hadoop3.4

部署 hadoop3.4 运行环境 env_hadoop.sh
#!/bin/bash# 错误处理逻辑
handle_error() {echo "[ERROR] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1" >&2exit 1
}# 提示信息处理逻辑
handle_info() {echo "[INFO] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1"
}# 检查并获取 Hadoop tar.gz 文件参数
check_hadoop_tar_gz() {local HADOOP_TAR_GZ="$1"if [ -z "$HADOOP_TAR_GZ" ]; thenhandle_error "No Hadoop tar.gz file provided!"elif [ ! -f "$HADOOP_TAR_GZ" ]; thenhandle_error "Hadoop tar.gz file not found!"fi
}# 创建必要的目录
create_directories() {mkdir -p /data/hadoop/{hadoop_soft,hadoop_data/{tmp,hdfs/{namenode,datanode}}}# 输出创建的目录for dir in /data/hadoop/{hadoop_soft,hadoop_data/{tmp,hdfs/{namenode,datanode}}}; dohandle_info "Created directory: $dir"donehandle_info "Directories created successfully."
}# 解压 Hadoop tar.gz 文件
extract_hadoop() {local HADOOP_TAR_GZ="$1"tar -xf "$HADOOP_TAR_GZ" -C /data/hadoop/hadoop_soft/ || handle_error "Failed to extract $HADOOP_TAR_GZ file."handle_info "Hadoop extracted successfully."
}# 更新 /etc/profile
update_profile() {local BACKUP_FILE="/etc/profile.bak.$(date +%F-%H%M%S)"cp /etc/profile "$BACKUP_FILE" || handle_error "Failed to create backup of /etc/profile."cat << EOF >> /etc/profile
export HADOOP_HOME=$(ls -d /data/hadoop/hadoop_soft/hadoop-* | head -n 1)
export HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOFsource /etc/profile || handle_error "Failed to source /etc/profile."# 检查环境变量是否设置成功(可选)if [ -z "${HADOOP_HOME-}" ]; thenhandle_error "HADOOP_HOME environment variable not set!"fihandle_info "Hadoop environment variables have been set."
}# 备份并更新 Hadoop 配置文件
backup_and_update_hadoop_config() {cd $(ls -d /data/hadoop/hadoop_soft/hadoop-* | head -n 1)/etc/hadoop || handle_error "Failed to change directory to Hadoop config directory."for file in core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml; docp "$file" "${file}.$(date +%F-%H%M%S).bak" || handle_error "Failed to backup $file."donecp hadoop-env.sh hadoop-env.sh.$(date +%F-%H%M%S).bak || handle_error "Failed to backup hadoop-env.sh."cat << EOF >> hadoop-env.sh
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HDFS_SECONDARYNAMENODE_USER="hadoop"
export JAVA_HOME=/usr/local/jdk1.8.0_421
EOF# 检查 hadoop 用户是否存在
if ! id "hadoop" &>/dev/null; then# 用户不存在,创建用户并设置密码useradd hadoop || handle_error "Failed to create hadoop user."# 注意:出于安全考虑,不建议在脚本中直接设置简单密码。echo "hadoop:hadoop" | chpasswd || handle_error "Failed to set password for hadoop user."handle_info "Hadoop user created and password set."
elsehandle_info "Hadoop user already exists."
fi# 更新 Hadoop 配置文件
handle_info "Hadoop configuration files have been updated."
}# 警告信息处理逻辑
handle_warning() {echo "[WARNING] - [$(date +'%Y-%m-%d %H:%M:%S')] - $1"
}# 主流程
check_hadoop_tar_gz "$1"
create_directories
extract_hadoop "$1"
update_profile
backup_and_update_hadoop_confighandle_info "Hadoop environment setup completed successfully."
[root@hadoop-0001 ~]# for i in 192.168.0.222 192.168.0.252; do scp env_hadoop.sh root@$i:/root/; done# 所有节点执行
bash env_hadoop.sh hadoop-3.4.0.tar.gz
配置 Hadoop3.4 核心文件

在所有节点上配置 core-site.xmlhdfs-site.xml yarn-site.xml mapred-site.xml

core-site.xml
所有节点上配置

文件包含了集群使用的核心配置,包括文件系统的默认设置和 I/O 缓冲区大小。

<configuration><!-- 设置Hadoop文件系统的默认名称,即NameNode的URI --><property><name>fs.defaultFS</name><value>hdfs://hadoop-0001:9000</value> <!-- 指定NameNode所在的主机名和端口号 或者使用IP地址:hdfs://192.168.0.141:9000 --></property><!-- 设置Hadoop临时目录的路径,用于存储临时文件 --><property><name>hadoop.tmp.dir</name><value>/data/hadoop/hadoop_data/tmp</value> <!-- 临时文件存储的本地目录 --></property><!-- 设置文件I/O操作的缓冲区大小 --><property><name>io.file.buffer.size</name><value>4096</value> <!-- 缓冲区大小,单位字节 --></property>
</configuration>
[root@hadoop-0001 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0001 hadoop]# vim core-site.xml
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp core-site.xml root@$i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop; done
hdfs-site.xml

文件包含了 HDFS 的特定配置,包括 NameNode 和 DataNode 的存储目录以及数据复制的策略。

在NameNode节点(hadoop-0001)上配置:
<configuration><!-- 设置NameNode存储元数据的本地目录 --><property><name>dfs.namenode.name.dir</name><value>/data/hadoop/hadoop_data/hdfs/namenode</value> <!-- NameNode元数据目录 --></property><property><name>dfs.namenode.rpc-address</name><value>hadoop-0001:9000</value> <!-- 或者直接使用IP地址:192.168.0.141:9000 --></property><!-- 设置Secondary NameNode检查点数据的本地目录(可选,通常Secondary NameNode与NameNode的配置分开) --><!-- 注意:在Hadoop 2.x及更高版本中,Secondary NameNode主要负责合并NameNode的编辑日志,而不是作为备份 -->
<!--    <property>-->
<!--        <name>dfs.namenode.checkpoint.dir</name> &lt;!&ndash; 通常不再需要明确配置,Secondary NameNode有其自己的配置方式 &ndash;&gt;-->
<!--        <value>/data/hadoop/hadoop_data/hdfs/namesecondary</value> &lt;!&ndash; 可选,用于存放检查点数据 &ndash;&gt;-->
<!--    </property>--><!-- 设置HDFS文件块的复制因子 --><property><name>dfs.replication</name><value>2</value> <!-- 每个文件块在HDFS中的副本数 --></property><!-- 设置NameNode的HTTP服务地址 --><property><name>dfs.namenode.http-address</name><value>hadoop-0001:9870</value> <!-- NameNode HTTP服务的主机名和端口号 --></property><!-- 设置Secondary NameNode的HTTP服务地址 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop-0001:9868</value> <!-- Secondary NameNode HTTP服务的主机名和端口号 --></property><!-- 设置DataNode存储数据块的本地目录 --><property><name>dfs.datanode.data.dir</name><value>/data/hadoop/hadoop_data/hdfs/datanode</value> <!-- DataNode数据块目录 --></property>
</configuration>

注意:关于dfs.namenode.checkpoint.dir的注释,实际上在Hadoop 3.x中,你通常不需要单独为Secondary NameNode配置检查点目录,因为它会自动处理。这里的注释是为了解释该属性在旧版本中的作用,并在实际配置中可能不需要。

[root@hadoop-0001 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0001 hadoop]# vim hdfs-site.xml
在DataNode节点(hadoop-0002和hadoop-0003)上:
<configuration><!-- 设置DataNode存储数据块的本地目录 --><property><name>dfs.datanode.data.dir</name><value>/data/hadoop/hadoop_data/hdfs/datanode</value> <!-- DataNode数据块目录 --></property><property><name>dfs.namenode.rpc-address</name><value>hadoop-0001:9000</value> <!-- 或者直接使用IP地址:192.168.0.141:9000 --></property>    <!-- 设置HDFS文件块的复制因子(通常在NameNode上配置,但在这里重复以确保一致性) --><property><name>dfs.replication</name><value>2</value> <!-- 每个文件块在HDFS中的副本数 --></property>
</configuration>
[root@hadoop-0002 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0002 hadoop]# vim hdfs-site.xml[root@hadoop-0003 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0003 hadoop]# vim hdfs-site.xml
yarn-site.xml
在ResourceManager节点(hadoop-0001)上:
<configuration><!-- 设置ResourceManager的主机名 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop-0001</value> <!-- ResourceManager所在的主机名 --></property><!-- 设置NodeManager提供的辅助服务,这里是MapReduce所需的shuffle服务 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> <!-- 辅助服务名称 --></property><!-- 设置ResourceManager的Web应用地址 --><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop-0001:8088</value> <!-- ResourceManager Web应用的主机名和端口号,监听所有ip --></property><!-- 设置YARN的调度器类,这里使用CapacityScheduler --><property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> <!-- 调度器类名 --></property><!-- 设置ResourceManager的地址 --><property><name>yarn.resourcemanager.address</name><value>hadoop-0001</value> <!-- ResourceManager的主机名 --></property><!-- 设置ResourceManager调度器的地址 --><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop-0001</value> <!-- ResourceManager调度器的主机名 --></property>
</configuration>
[root@hadoop-0001 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0001 hadoop]# vim yarn-site.xml
在NodeManager节点(hadoop-0002)上:
<configuration><!-- 设置ResourceManager的主机名 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop-0001</value> <!-- ResourceManager所在的主机名 --></property>  <!-- 设置ResourceManager的地址 --><property><name>yarn.resourcemanager.address</name><value>hadoop-0001</value> <!-- ResourceManager的主机名 --></property><!-- 设置ResourceManager调度器的地址 --><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop-0001</value> <!-- ResourceManager调度器的主机名 --></property>    <!-- 设置NodeManager提供的辅助服务,这里是MapReduce所需的shuffle服务(与ResourceManager配置一致) --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> <!-- 辅助服务名称 --></property><!-- 设置NodeManager可分配给容器的内存大小 --><property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value> <!-- 内存大小,单位MB,根据节点实际内存大小调整,此处给了2G --></property><!-- 设置NodeManager可分配给容器的虚拟CPU核心数 --><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>1</value> <!-- 虚拟CPU核心数,根据节点实际CPU核心数调整,此处给了1C --></property><!-- 设置NodeManager的主机名 --><property><name>yarn.nodemanager.hostname</name><value>hadoop-0002</value> <!-- 对于 hadoop-0002 节点 --></property><!-- 设置nodemanager的地址 --><property><name>yarn.nodemanager.address</name><value>hadoop-0002</value> <!-- nodemanager的主机名 --></property>
</configuration>
[root@hadoop-0002 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0002 hadoop]# vim yarn-site.xml
在NodeManager节点(hadoop-0003)上:
<configuration> <!-- 设置ResourceManager的主机名 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop-0001</value> <!-- ResourceManager所在的主机名 --></property>  <!-- 设置ResourceManager的地址 --><property><name>yarn.resourcemanager.address</name><value>hadoop-0001</value> <!-- ResourceManager的主机名 --></property><!-- 设置ResourceManager调度器的地址 --><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop-0001</value> <!-- ResourceManager调度器的主机名 --></property>  <!-- 设置NodeManager提供的辅助服务,这里是MapReduce所需的shuffle服务(与ResourceManager配置一致) --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> <!-- 辅助服务名称 --></property><!-- 设置NodeManager可分配给容器的内存大小 --><property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value> <!-- 内存大小,单位MB,根据节点实际内存大小调整,此处给了2G --></property><!-- 设置NodeManager可分配给容器的虚拟CPU核心数 --><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>1</value> <!-- 虚拟CPU核心数,根据节点实际CPU核心数调整,此处给了1C --></property><!-- 对于 hadoop-0003 节点,只需将 value 改为 hadoop-0003 --><property><name>yarn.nodemanager.hostname</name><value>hadoop-0003</value></property><!-- 设置nodemanager的地址 --><property><name>yarn.nodemanager.address</name><value>hadoop-0003</value> <!-- nodemanager的主机名 --></property>
</configuration>
[root@hadoop-0003 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0003 hadoop]# vim yarn-site.xml
mapred-site.xml
在所有节点上(因为MapReduce客户端可能需要在任何节点上运行):
<configuration><!-- 设置MapReduce框架的名称,这里指定为YARN --><property><name>mapreduce.framework.name</name><value>yarn</value> <!-- 指定MapReduce运行在YARN上 --></property><!--    &lt;!&ndash; 设置MapReduce JobHistory Server的地址(可选,通常与ResourceManager集成) &ndash;&gt;-->
<!--    &lt;!&ndash; 注意:在Hadoop 3.x中,JobHistory Server通常与ResourceManager集成,因此这些配置可能不是必需的 &ndash;&gt;-->
<!--    <property>-->
<!--        <name>mapreduce.jobhistory.address</name> &lt;!&ndash; 通常不再需要单独配置 &ndash;&gt;-->
<!--        <value>0.0.0.0:10020</value> &lt;!&ndash; JobHistory Server的主机名和端口号(如果单独配置) &ndash;&gt;-->
<!--    </property>-->
<!--    -->
<!--    &lt;!&ndash; 设置MapReduce JobHistory Server的Web应用地址(可选,通常与ResourceManager集成) &ndash;&gt;-->
<!--    <property>-->
<!--        <name>mapreduce.jobhistory.webapp.address</name> &lt;!&ndash; 通常不再需要单独配置 &ndash;&gt;-->
<!--        <value>0.0.0.0:19888</value> &lt;!&ndash; JobHistory Server Web应用的主机名和端口号(如果单独配置) &ndash;&gt;-->
<!--    </property>-->
</configuration>
[root@hadoop-0001 hadoop]# vim mapred-site.xml
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp mapred-site.xml root@$i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop; done
写入works文件

指定哪些主机运行DataNode和NodeManager

在NameNode节点(hadoop-0001)上配置:

写入works文件,workers 文件应该只在主节点上维护一份,用于列出所有参与集群运行的工作节点

[root@hadoop-0001 hadoop-3.4.0]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop
cat workers
hadoop-0001
hadoop-0002
hadoop-0003for i in 192.168.0.222 192.168.0.252; do scp workers root@$i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop; done

注意:关于mapreduce.jobhistory.addressmapreduce.jobhistory.webapp.address的注释,实际上在Hadoop 3.x中,你可能不需要单独配置这些属性,因为JobHistory Server的功能通常已经集成到ResourceManager中。这里的注释是为了解释这些属性在旧版本中的作用,并在实际配置中可能不需要。如果你的集群确实需要单独的JobHistory Server,那么你需要确保它正确配置并运行。

启动 hadoop 集群

给 hadoop 用户授权并设置免密登录

[root@hadoop-0001 ~]# chown -R hadoop:hadoop /data/hadoop/
[root@hadoop-0002 ~]# chown -R hadoop:hadoop /data/hadoop/
[root@hadoop-0003 ~]# chown -R hadoop:hadoop /data/hadoop/[root@hadoop-0001 ~]# su hadoop
[hadoop@hadoop-0001 root]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:p3BB7jrhPg+3PFN8xdu5a+eHmuStyupGGLg6gCFJiYk hadoop@hadoop-0001
The key's randomart image is:
+---[RSA 2048]----+
|o..     .        |
|Eo     o         |
|..   .  o    .   |
|+   . .. .    o  |
|o.   .ooS..  . o.|
|o   ...=.oo . ...|
| . .  =.o. ..  ..|
|  o  ..=+o o o.oo|
|   .  .=*+o.=ooo=|
+----[SHA256]-----+
[hadoop@hadoop-0001 root]$
[hadoop@hadoop-0001 root]$ for i in 192.168.0.141 192.168.0.222 192.168.0.252; do ssh-copy-id $i; done

使用用户 hadoop

在 NameNode 节点格式化 HDFS(对于新集群或重新格式化

首次启动 HDFS 时,必须对其进行格式化。将新的分布式文件系统格式化为 hdfs

#[hadoop@hadoop-0001 hadoop-3.4.0]$ source /etc/profile 
[hadoop@hadoop-0001 hadoop-3.4.0]$ hdfs namenode -format
2024-11-08 23:29:15,654 INFO common.Storage: Storage directory /data/hadoop/hadoop_data/hdfs/namenode has been successfully formatted.

启动 HDFS 的守护进程

如果配置了 ssh 可信访问权限,配置了 etc/hadoop/workers ,则可以使用实用程序脚本启动所有 HDFS 进程。作为 hdfsetc/hadoop/workers

[hadoop@hadoop-0001 hadoop]$ start-dfs.sh
Starting namenodes on [hadoop-0001]
Starting datanodes
hadoop-0002: WARNING: /data/hadoop/hadoop_soft/hadoop-3.4.0/logs does not exist. Creating.
hadoop-0003: WARNING: /data/hadoop/hadoop_soft/hadoop-3.4.0/logs does not exist. Creating.
Starting secondary namenodes [hadoop-0002]

启动 YARN 守护进程

[hadoop@hadoop-0001 hadoop]$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers

启动 MapReduce JobHistory Server,在指定的 mapred 服务器上(可选)

提供作业历史的查询接口

# 开启
[hadoop@hadoop-0001 hadoop]$ mapred --daemon start historyserver# 关闭
[hadoop@hadoop-0001 hadoop]$ mapred --daemon stop historyserver

查看集群状态

# 最重要看日志有没有报错
#日志 namenode 
#日志 datanode 
#日志 resourcemanager 
#日志 nodemanager  
#日志 secondarynamenode# 网页查看
http://121.36.222.173:8088/cluster# 因为没有部署zk,没有实现高可用,所有没有实现HA,显示"Could not find leader elector. Verify both HA and automatic failover are enabled.
[hadoop@hadoop-0001 hadoop]$ curl -s "http://hadoop-0001:8088/ws/v1/cluster/info"
{"clusterInfo":{"id":1731228087052,"startedOn":1731228087052,"state":"STARTED","haState":"ACTIVE","rmStateStoreName":"org.apache.hadoop.yarn.server.resourcemanager.recovery.NullRMStateStore","resourceManagerVersion":"3.4.0","resourceManagerBuildVersion":"3.4.0 from bd8b77f398f626bb7791783192ee7a5dfaeec760 by root source checksum 934da0c5743762b7851cfcff9f8ca2","resourceManagerVersionBuiltOn":"2024-03-04T06:54Z","hadoopVersion":"3.4.0","hadoopBuildVersion":"3.4.0 from bd8b77f398f626bb7791783192ee7a5dfaeec760 by root source checksum f7fe694a3613358b38812ae9c31114e","hadoopVersionBuiltOn":"2024-03-04T06:35Z","haZooKeeperConnectionState":"Could not find leader elector. Verify both HA and automatic failover are enabled."}}[hadoop@hadoop-0001 hadoop]$# 命令行查看
# 查看 HDFS 的状态,包括数据节点、存储使用情况等信息。
[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -report
Configured Capacity: 126421143552 (117.74 GB)
Present Capacity: 96833212416 (90.18 GB)
DFS Remaining: 96833114112 (90.18 GB)
DFS Used: 98304 (96 KB)
DFS Used%: 0.00%
Replicated Blocks:Under replicated blocks: 0Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0
Erasure Coded Block Groups:Low redundancy block groups: 0Block groups with corrupt internal blocks: 0Missing block groups: 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0-------------------------------------------------
Live datanodes (3):Name: 192.168.0.141:9866 (hadoop-0001)
Hostname: hadoop-0001
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 9089748992 (8.47 GB)
DFS Remaining: 31208587264 (29.07 GB)
DFS Used%: 0.00%
DFS Remaining%: 74.06%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 16:58:44 CST 2024
Last Block Report: Sun Nov 10 16:40:50 CST 2024
Num of Blocks: 0Name: 192.168.0.222:9866 (hadoop-0002)
Hostname: hadoop-0002
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 7235203072 (6.74 GB)
DFS Remaining: 33063133184 (30.79 GB)
DFS Used%: 0.00%
DFS Remaining%: 78.46%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 16:58:44 CST 2024
Last Block Report: Sun Nov 10 16:40:50 CST 2024
Num of Blocks: 0Name: 192.168.0.252:9866 (hadoop-0003)
Hostname: hadoop-0003
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 7736942592 (7.21 GB)
DFS Remaining: 32561393664 (30.33 GB)
DFS Used%: 0.00%
DFS Remaining%: 77.27%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 16:58:44 CST 2024
Last Block Report: Sun Nov 10 16:51:14 CST 2024
Num of Blocks: 0# 查看 YARN 节点的状态。
[hadoop@hadoop-0001 hadoop]$ yarn node -list
2024-11-10 16:43:53,668 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8032
Total Nodes:3Node-Id             Node-State Node-Http-Address       Number-of-Running-Containers
hadoop-0003:33976               RUNNING  hadoop-0003:8042                                  0
hadoop-0001:33869               RUNNING  hadoop-0001:8042                                  0
hadoop-0002:41334               RUNNING  hadoop-0002:8042                                  0# 关于默认队列的一些关键信息,如队列容量、最大容量等
[hadoop@hadoop-0001 hadoop]$ yarn queue -status default
2024-11-10 16:52:02,196 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8032
Queue Information :
Scheduler Name : CapacityScheduler
Queue Name : default
Queue Path : root.defaultState : RUNNINGCapacity : 100.00%Current Capacity : .00%Maximum Capacity : 100.00%Weight : -1.00Maximum Parallel Apps : 2147483647Default Node Label expression : <DEFAULT_PARTITION>Accessible Node Labels : *Preemption : disabledIntra-queue Preemption : disabled# 查看 YARN 应用程序的状态,包括应用程序的状态、用户、队列、启动时间等
# 这个输出表明您的 YARN 集群目前没有任何正在运行、已提交或已接受的应用。这是一个正常的状态,特别是如果您刚刚启动集群或者还没有提交任何作业。
[hadoop@hadoop-0001 hadoop]$ yarn application -list
2024-11-10 16:57:01,829 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8032
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0Application-Id      Application-Name        Application-Type          User           Queue                   State             Final-State          Progress                         Tracking-URL

关闭 hadoop 集群

关闭后再打开,再打开时不是新的集群了,不需要执行格式化操作

先停止 YARN 守护进程

[hadoop@hadoop-0001 hadoop]$ stop-yarn.sh

再停止 HDFS 守护进程

[hadoop@hadoop-0001 hadoop]$ stop-dfs.sh

补充不使用 works 文件的单独启动

对于hdfs节点

使用以下命令在指定为 hdfs 的节点上启动 HDFS NameNode:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode

使用以下命令在每个指定为 hdfs 的节点上启动 HDFS DataNode:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start datanode

对应yarn节点

使用以下命令启动 YARN,在指定的 ResourceManager 上作为 yarn 运行:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager

运行脚本以 yarn 形式在每个指定的主机上启动 NodeManager:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start nodemanager

WebAppProxy 服务器

启动独立的 WebAppProxy 服务器。在 WebAppProxy 服务器上以 yarn 形式运行。如果多个服务器与负载均衡一起使用,则应在每个服务器上运行:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon start proxyserver

MapReduce JobHistory Server

使用以下命令启动 MapReduce JobHistory Server,在指定的 mapred 服务器上运行:

[mapred]$ $HADOOP_HOME/bin/mapred --daemon start historyserver

补充不使用 works 文件的单独关闭

对于hdfs节点

使用以下命令停止 NameNode,在指定的 NameNode 上运行 hdfs

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop namenode

运行脚本以停止 hdfs 形式的 DataNode:

[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon stop datanode

对应yarn节点

使用以下命令停止 ResourceManager,在指定的 ResourceManager 上运行 yarn

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop resourcemanager

运行脚本以 yarn 形式停止 worker 上的 NodeManager:

[yarn]$ $HADOOP_HOME/bin/yarn --daemon stop nodemanager

停止 WebAppProxy 服务器

停止 WebAppProxy 服务器。在 WebAppProxy 服务器上以 yarn 形式运行。如果多个服务器与负载均衡一起使用,则应在每个服务器上运行:

[yarn]$ $HADOOP_HOME/bin/yarn stop proxyserver

MapReduce JobHistory Server

使用以下命令停止 MapReduce JobHistory Server,并在指定的服务器上运行,如 mapred

[mapred]$ $HADOOP_HOME/bin/mapred --daemon stop historyserver

集群扩容

新增一台 datanode 节点

服务器IP地址配置系统jdkhadoop角色
hadoop-0004192.168.0.1702C4GCentOS 7.9 64bitjdk-8u421-linux-x64.tar.gzhadoop-3.4.0.tar.gz都作为 DataNode 和 NodeManager

服务器配置

配置免密登录

[root@hadoop-0001 ~]# ssh-copy-id 192.168.0.170

所有节点配置 hosts文件

# 把127.0.0.1对应的 主机名这行删掉
192.168.0.141   hadoop-0001
192.168.0.222   hadoop-0002
192.168.0.252   hadoop-0003
192.168.0.170	hadoop-0004
[root@hadoop-0001 ~]# for i in 192.168.0.141 192.168.0.222 192.168.0.252 192.168.0.170; do scp /etc/hosts $i:/etc/hosts; done

上传文件

[root@hadoop-0001 ~]# scp hadoop-3.4.0.tar.gz jdk-8u421-linux-x64.tar.gz install_jdk.sh init_server.sh env_hadoop.sh 192.168.0.170:/root

服务器配置初始化

[root@hadoop-0004 ~]# bash init_server.sh

安装jdk

[root@hadoop-0004 ~]# bash install_jdk.sh jdk-8u421-linux-x64.tar.gz
[root@hadoop-0004 ~]# source /etc/profile

安装 hadoop

[root@hadoop-0004 ~]# bash env_hadoop.sh hadoop-3.4.0.tar.gz

配置hadoop

core-site.xml
<configuration><!-- 设置Hadoop文件系统的默认名称,即NameNode的URI --><property><name>fs.defaultFS</name><value>hdfs://hadoop-0001:9000</value> <!-- 指定NameNode所在的主机名和端口号 或者使用IP地址:hdfs://192.168.0.141:9000 --></property><!-- 设置Hadoop临时目录的路径,用于存储临时文件 --><property><name>hadoop.tmp.dir</name><value>/data/hadoop/hadoop_data/tmp</value> <!-- 临时文件存储的本地目录 --></property><!-- 设置文件I/O操作的缓冲区大小 --><property><name>io.file.buffer.size</name><value>4096</value> <!-- 缓冲区大小,单位字节 --></property>
</configuration>
[root@hadoop-0004 ~]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0004 ~]# vim core-site.xml
hdfs-site.xml
<configuration><!-- 设置DataNode存储数据块的本地目录 --><property><name>dfs.datanode.data.dir</name><value>/data/hadoop/hadoop_data/hdfs/datanode</value> <!-- DataNode数据块目录 --></property><property><name>dfs.namenode.rpc-address</name><value>hadoop-0001:9000</value> <!-- 或者直接使用IP地址:192.168.0.141:9000 --></property>    <!-- 设置HDFS文件块的复制因子(通常在NameNode上配置,但在这里重复以确保一致性) --><property><name>dfs.replication</name><value>2</value> <!-- 每个文件块在HDFS中的副本数 --></property>
</configuration>
[root@hadoop-0004 ~]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0004 ~]# vim hdfs-site.xml
yarn-site.xml
<configuration> <!-- 设置ResourceManager的主机名 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop-0001</value> <!-- ResourceManager所在的主机名 --></property>  <!-- 设置ResourceManager的地址 --><property><name>yarn.resourcemanager.address</name><value>hadoop-0001</value> <!-- ResourceManager的主机名 --></property><!-- 设置ResourceManager调度器的地址 --><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop-0001</value> <!-- ResourceManager调度器的主机名 --></property>  <!-- 设置NodeManager提供的辅助服务,这里是MapReduce所需的shuffle服务(与ResourceManager配置一致) --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value> <!-- 辅助服务名称 --></property><!-- 设置NodeManager可分配给容器的内存大小 --><property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value> <!-- 内存大小,单位MB,根据节点实际内存大小调整,此处给了2G --></property><!-- 设置NodeManager可分配给容器的虚拟CPU核心数 --><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>1</value> <!-- 虚拟CPU核心数,根据节点实际CPU核心数调整,此处给了1C --></property><!-- 对于 hadoop-0004 节点,只需将 value 改为 hadoop-0004 --><property><name>yarn.nodemanager.hostname</name><value>hadoop-0004</value></property><!-- 设置nodemanager的地址 --><property><name>yarn.nodemanager.address</name><value>hadoop-0004</value> <!-- nodemanager的主机名 --></property>
</configuration>
[root@hadoop-0004 ~]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0004 ~]# vim yarn-site.xml
mapred-site.xml
<configuration><!-- 设置MapReduce框架的名称,这里指定为YARN --><property><name>mapreduce.framework.name</name><value>yarn</value> <!-- 指定MapReduce运行在YARN上 --></property><!--    &lt;!&ndash; 设置MapReduce JobHistory Server的地址(可选,通常与ResourceManager集成) &ndash;&gt;-->
<!--    &lt;!&ndash; 注意:在Hadoop 3.x中,JobHistory Server通常与ResourceManager集成,因此这些配置可能不是必需的 &ndash;&gt;-->
<!--    <property>-->
<!--        <name>mapreduce.jobhistory.address</name> &lt;!&ndash; 通常不再需要单独配置 &ndash;&gt;-->
<!--        <value>0.0.0.0:10020</value> &lt;!&ndash; JobHistory Server的主机名和端口号(如果单独配置) &ndash;&gt;-->
<!--    </property>-->
<!--    -->
<!--    &lt;!&ndash; 设置MapReduce JobHistory Server的Web应用地址(可选,通常与ResourceManager集成) &ndash;&gt;-->
<!--    <property>-->
<!--        <name>mapreduce.jobhistory.webapp.address</name> &lt;!&ndash; 通常不再需要单独配置 &ndash;&gt;-->
<!--        <value>0.0.0.0:19888</value> &lt;!&ndash; JobHistory Server Web应用的主机名和端口号(如果单独配置) &ndash;&gt;-->
<!--    </property>-->
</configuration>
[root@hadoop-0004 ~]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0004 ~]# vim mapred-site.xml

配置 works文件

[root@hadoop-0001 hadoop]# cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[root@hadoop-0001 hadoop]# vim workers
hadoop-0001
hadoop-0002
hadoop-0003
hadoop-0004[root@hadoop-0001 hadoop]# for i in 192.168.0.141 192.168.0.222 192.168.0.252 192.168.0.170; do scp workers  $i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/; done

启动 hadoop 集群新节点

# 设置hadoop免密登录新节点
[root@hadoop-0001 ~]# su hadoop
[hadoop@hadoop-0001 hadoop]$ ssh-copy-id 192.168.0.170# 新节点设置 hadoop 权限
[root@hadoop-0004 ~]# chown -R hadoop:hadoop /data/hadoop/
启动 hdfs 守护进程
[hadoop@hadoop-0004 sbin]$ hdfs --daemon start datanode
启动 yarn 守护进程(启动 NodeManager)
[hadoop@hadoop-0004 sbin]$ yarn --daemon start nodemanager
查看集群状态
# 日志无报错
[hadoop@hadoop-0004 logs]$ less hadoop-hadoop-datanode-hadoop-0004.log
[hadoop@hadoop-0004 logs]$ less hadoop-hadoop-nodemanager-hadoop-0004.log# 看到 4 个节点
[hadoop@hadoop-0001 hadoop]$ yarn node -list
2024-11-10 18:20:37,147 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8032
Total Nodes:4Node-Id             Node-State Node-Http-Address       Number-of-Running-Containers
hadoop-0003:33976               RUNNING  hadoop-0003:8042                                  0
hadoop-0001:33869               RUNNING  hadoop-0001:8042                                  0
hadoop-0002:41334               RUNNING  hadoop-0002:8042                                  0
hadoop-0004:44057               RUNNING  hadoop-0004:8042                                  0

再次停止四节点集群

关闭后再打开,再打开时不是新的集群了,不需要执行格式化操作

停止 yarn 守护进程
[hadoop@hadoop-0001 hadoop]$ stop-yarn.sh
Stopping nodemanagers
# 这个警告信息是无害的,它只是通知您 SSH 客户端已经更新了 known_hosts 文件。这通常发生在您第一次通过 SSH 连接到一个新的主机时。
hadoop-0004: Warning: Permanently added 'hadoop-0004' (ECDSA) to the list of known hosts.
Stopping resourcemanager
停止 hdfs 守护进程
[hadoop@hadoop-0001 hadoop]$ stop-dfs.sh
Stopping namenodes on [hadoop-0001]
Stopping datanodes
Stopping secondary namenodes [hadoop-0001]

缩容集群

减少一台 datanode 节点

在 Hadoop 集群中移除一个节点通常不会直接导致数据丢失,因为 Hadoop 的 HDFS 设计为高度冗余的分布式文件系统。每个数据块默认会有多个副本(通常是3个),分布在不同的节点上。

确认数据副本

确保所有数据块都有足够数量的副本分布在剩余的节点上。您可以使用以下命令来检查集群的副本分布情况:

[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -report
Configured Capacity: 168561524736 (156.99 GB)
Present Capacity: 129906032640 (120.98 GB)
DFS Remaining: 129905901568 (120.98 GB)
DFS Used: 131072 (128 KB)
DFS Used%: 0.00%
Replicated Blocks:Under replicated blocks: 0Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0
Erasure Coded Block Groups:Low redundancy block groups: 0Block groups with corrupt internal blocks: 0Missing block groups: 0Low redundancy blocks with highest priority to recover: 0Pending deletion blocks: 0-------------------------------------------------
Live datanodes (4):Name: 192.168.0.141:9866 (hadoop-0001)
Hostname: hadoop-0001
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 9096040448 (8.47 GB)
DFS Remaining: 31202295808 (29.06 GB)
DFS Used%: 0.00%
DFS Remaining%: 74.04%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 19:55:41 CST 2024
Last Block Report: Sun Nov 10 18:34:05 CST 2024
Num of Blocks: 0Name: 192.168.0.170:9866 (hadoop-0004)
Hostname: hadoop-0004
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 7211712512 (6.72 GB)
DFS Remaining: 33086623744 (30.81 GB)
DFS Used%: 0.00%
DFS Remaining%: 78.52%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 19:55:40 CST 2024
Last Block Report: Sun Nov 10 18:34:04 CST 2024
Num of Blocks: 0Name: 192.168.0.222:9866 (hadoop-0002)
Hostname: hadoop-0002
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 7238975488 (6.74 GB)
DFS Remaining: 33059360768 (30.79 GB)
DFS Used%: 0.00%
DFS Remaining%: 78.45%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 19:55:40 CST 2024
Last Block Report: Sun Nov 10 18:34:04 CST 2024
Num of Blocks: 0Name: 192.168.0.252:9866 (hadoop-0003)
Hostname: hadoop-0003
Decommission Status : Normal
Configured Capacity: 42140381184 (39.25 GB)
DFS Used: 32768 (32 KB)
Non DFS Used: 7740715008 (7.21 GB)
DFS Remaining: 32557621248 (30.32 GB)
DFS Used%: 0.00%
DFS Remaining%: 77.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Sun Nov 10 19:55:40 CST 2024
Last Block Report: Sun Nov 10 18:34:04 CST 2024
Num of Blocks: 0

进入安全模式

安全模式的特点:

  1. 只读访问:在安全模式下,HDFS 只允许读操作,不允许执行写操作。这意味着用户可以读取数据,但不能写入或删除文件。
  2. 保护数据完整性:安全模式确保在集群状态不稳定或正在恢复时,不会进行任何可能破坏数据一致性的操作。
  3. 自动进入和退出:HDFS 可以在启动时自动进入安全模式,直到满足一定的条件(如达到一定的 block 报告比例)后自动退出。管理员也可以手动将 HDFS 设置为安全模式。

安全模式对集群工作的影响:

  • 不影响 MapReduce 作业:在安全模式下,HDFS 仍然可以服务于读操作,因此 MapReduce 作业可以继续运行,只要它们不需要写入 HDFS。
  • 影响写操作:任何需要写入 HDFS 的操作(如新的 MapReduce 作业、HDFS 文件写入等)将被阻塞,直到安全模式被解除。
  • 不影响 YARN 资源管理:ResourceManager 可以继续调度作业,但作业可能会因为 HDFS 的写入限制而无法完成。

在执行缩容操作之前,您可以将 HDFS 设置为安全模式,以防止数据丢失:

# 进入安全模式
[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -safemode enter
Safe mode is ON
# 查看安全模式状态
[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -safemode get
Safe mode is ON

修改配置添加黑名单

namenode 节点 hdfs-site.xml

[hadoop@hadoop-0001 hadoop]$ cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop
[hadoop@hadoop-0001 hadoop]$ vim hdfs-site.xml
<configuration><!-- 设置NameNode存储元数据的本地目录 --><property><name>dfs.namenode.name.dir</name><value>/data/hadoop/hadoop_data/hdfs/namenode</value> <!-- NameNode元数据目录 --></property><property><name>dfs.namenode.rpc-address</name><value>hadoop-0001:9000</value> <!-- 或者直接使用IP地址:192.168.0.141:9000 --></property><!-- 设置Secondary NameNode检查点数据的本地目录(可选,通常Secondary NameNode与NameNode的配置分开) --><!-- 注意:在Hadoop 2.x及更高版本中,Secondary NameNode主要负责合并NameNode的编辑日志,而不是作为备份 -->
<!--    <property>-->
<!--        <name>dfs.namenode.checkpoint.dir</name> &lt;!&ndash; 通常不再需要明确配置,Secondary NameNode有其自己的配置方式 &ndash;&gt;-->
<!--        <value>/data/hadoop/hadoop_data/hdfs/namesecondary</value> &lt;!&ndash; 可选,用于存放检查点数据 &ndash;&gt;-->
<!--    </property>--><!-- 设置HDFS文件块的复制因子 --><property><name>dfs.replication</name><value>2</value> <!-- 每个文件块在HDFS中的副本数 --></property><!-- 设置NameNode的HTTP服务地址 --><property><name>dfs.namenode.http-address</name><value>hadoop-0001:9870</value> <!-- NameNode HTTP服务的主机名和端口号 --></property><!-- 设置Secondary NameNode的HTTP服务地址 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop-0001:9868</value> <!-- Secondary NameNode HTTP服务的主机名和端口号 --></property>
<!--    不需要白名单注释掉-->
<!--        &lt;!&ndash; 白名单配置:指定哪些DataNode被允许连接到NameNode &ndash;&gt;-->
<!--    <property>-->
<!--        <name>dfs.hosts</name>-->
<!--        <value>/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/hosts</value>-->
<!--        <description>HDFS白名单文件路径,该文件包含允许连接到NameNode的主机名或IP地址。</description>-->
<!--    </property>--><!-- 黑名单配置:指定哪些DataNode被禁止连接到NameNode --><property><name>dfs.hosts.exclude</name><value>/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/hosts.exclude</value><description>HDFS黑名单文件路径,该文件包含禁止连接到NameNode的主机名或IP地址。</description></property>
</configuration>

配置黑名单文件 hosts.exclude

黑白名单介绍

  1. dfs.hosts 文件
    • 白名单文件:确实,dfs.hosts文件是一个白名单文件,用于指定哪些主机(或DataNode)被允许连接到NameNode。
    • 文件不存在:如果dfs.hosts文件不存在,则默认行为是允许所有主机连接到NameNode,因为没有明确的白名单限制。
    • 文件存在且空白:这里有一点需要纠正。如果dfs.hosts文件存在但为空白(即没有列出任何主机),这并不意味着不允许任何主机连接到NameNode。相反,它仍然意味着没有明确的白名单限制,因此默认情况下,所有主机都可以连接到NameNode。白名单为空和不存在白名单在效果上是相同的,即不施加任何限制。
  2. dfs.hosts.exclude 文件
    • 黑名单文件:确实,dfs.hosts.exclude文件是一个黑名单文件,用于指定哪些主机被禁止连接到NameNode。
    • 文件不存在:如果dfs.hosts.exclude文件不存在,则默认行为是不禁止任何主机连接到NameNode,因为没有明确的黑名单限制。
    • 文件存在且空白:如果dfs.hosts.exclude文件存在但为空白(即没有列出任何主机),这确实意味着不禁止任何主机连接到NameNode。因为没有明确的黑名单项,所以所有主机都可以连接。
[hadoop@hadoop-0001 hadoop]$ cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop/
[hadoop@hadoop-0001 hadoop]$ vim hosts.exclude
192.168.0.170

刷新集群

[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -refreshNodes
Refresh nodes successful[hadoop@hadoop-0001 hadoop]$ yarn rmadmin -refreshNodes
2024-11-10 21:18:31,664 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8033

确认退役状态

您可以使用以下命令检查退役状态:

# 如果节点已经成功退役,您将看到该节点的状态为“Decommissioned”。
[hadoop@hadoop-0001 hadoop]$  hdfs dfsadmin -report | grep -B 1 Decommission
Hostname: hadoop-0001
Decommission Status : Normal
--
Hostname: hadoop-0004
Decommission Status : Decommissioned
--
Hostname: hadoop-0002
Decommission Status : Normal
--
Hostname: hadoop-0003
Decommission Status : Normal2024-11-10 21:58:28,577 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at hadoop-0001/192.168.0.141:8032
Total Nodes:3Node-Id             Node-State Node-Http-Address       Number-of-Running-Containers
hadoop-0003:36025               RUNNING  hadoop-0003:8042                                  0
hadoop-0002:43831               RUNNING  hadoop-0002:8042                                  0
hadoop-0001:41697               RUNNING  hadoop-0001:8042                                  0

停止 DataNode

在确认数据安全后,您可以在要移除的节点上停止 DataNode 服务:

[hadoop@hadoop-0004 hadoop]$ hdfs --daemon stop datanode
# (可选)停止 NodeManager 服务,如果该节点上还运行着 YARN 的 NodeManager 服务
[hadoop@hadoop-0004 hadoop]$ jps
18354 Jps
12687 NodeManager
[hadoop@hadoop-0004 hadoop]$ yarn --daemon stop nodemanager
WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
[hadoop@hadoop-0004 hadoop]$ jps
18526 Jps
[hadoop@hadoop-0004 hadoop]$ yarn --daemon stop nodemanager
[hadoop@hadoop-0004 hadoop]$

从配置中移除节点 hadoop-0004

移除 hosts 文件

[root@hadoop-0001 hadoop]# vim /etc/hosts
192.168.0.141   hadoop-0001
192.168.0.222   hadoop-0002
192.168.0.252   hadoop-0003
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp /etc/hosts root@$i:/etc/hosts; done

移除 works 文件

cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop
[root@hadoop-0001 hadoop]# vim workers
hadoop-0001
hadoop-0002
hadoop-0003
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp workers root@$i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop; done

清理节点

如果您确定不再需要该节点上的数据,可以清理该节点上的 Hadoop 数据目录甚至释放节点。

退出安全模式

[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

Balancer 操作(可选)

如果集群在移除节点后出现数据不平衡(即某些节点的存储使用率远高于其他节点),您可能需要运行 HDFS Balancer 工具来重新分配数据,使数据在集群中更加均匀分布。使用以下命令启动 Balancer:

[hadoop@hadoop-0001 hadoop]$ hdfs balancer
                     0

hadoop-0002:43831 RUNNING hadoop-0002:8042 0
hadoop-0001:41697 RUNNING hadoop-0001:8042 0


### 停止 DataNode在确认数据安全后,您可以在要移除的节点上停止 DataNode 服务:```shell
[hadoop@hadoop-0004 hadoop]$ hdfs --daemon stop datanode
# (可选)停止 NodeManager 服务,如果该节点上还运行着 YARN 的 NodeManager 服务
[hadoop@hadoop-0004 hadoop]$ jps
18354 Jps
12687 NodeManager
[hadoop@hadoop-0004 hadoop]$ yarn --daemon stop nodemanager
WARNING: nodemanager did not stop gracefully after 5 seconds: Trying to kill with kill -9
[hadoop@hadoop-0004 hadoop]$ jps
18526 Jps
[hadoop@hadoop-0004 hadoop]$ yarn --daemon stop nodemanager
[hadoop@hadoop-0004 hadoop]$

从配置中移除节点 hadoop-0004

移除 hosts 文件

[root@hadoop-0001 hadoop]# vim /etc/hosts
192.168.0.141   hadoop-0001
192.168.0.222   hadoop-0002
192.168.0.252   hadoop-0003
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp /etc/hosts root@$i:/etc/hosts; done

移除 works 文件

cd /data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop
[root@hadoop-0001 hadoop]# vim workers
hadoop-0001
hadoop-0002
hadoop-0003
[root@hadoop-0001 hadoop]# for i in 192.168.0.222 192.168.0.252; do scp workers root@$i:/data/hadoop/hadoop_soft/hadoop-3.4.0/etc/hadoop; done

清理节点

如果您确定不再需要该节点上的数据,可以清理该节点上的 Hadoop 数据目录甚至释放节点。

退出安全模式

[hadoop@hadoop-0001 hadoop]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

Balancer 操作(可选)

如果集群在移除节点后出现数据不平衡(即某些节点的存储使用率远高于其他节点),您可能需要运行 HDFS Balancer 工具来重新分配数据,使数据在集群中更加均匀分布。使用以下命令启动 Balancer:

[hadoop@hadoop-0001 hadoop]$ hdfs balancer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能:重塑医疗、企业与生活的未来知识管理——以HelpLook为例

一、医疗行业&#xff1a;AI引领的医疗革新 随着人工智能&#xff08;AI&#xff09;技术的持续飞跃&#xff0c;我们正身处一场跨行业的深刻变革之中。在医疗健康的广阔舞台上&#xff0c;人工智能技术正扮演着日益重要的角色。它不仅能够辅助医生进行病例的精准诊断&#xf…

第四十五章 Vue之Vuex模块化创建(module)

目录 一、引言 二、模块化拆分创建方式 三、模块化拆分完整代码 3.1. index.js 3.2. module1.js 3.3. module2.js 3.4. module3.js 3.5. main.js 3.6. App.vue 3.7. Son1.vue 3.8. Son2.vue 四、访问模块module的state ​五、访问模块中的getters ​六、mutati…

论文笔记 SuDORMRF:EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION

SUDORMRF: EFFICIENT NETWORKS FOR UNIVERSAL AUDIO SOURCE SEPARATION 人的精神寄托可以是音乐&#xff0c;可以是书籍&#xff0c;可以是运动&#xff0c;可以是工作&#xff0c;可以是山川湖海&#xff0c;唯独不可以是人。 Depthwise Separable Convolution 深度分离卷积&a…

69页可编辑PPT | 大数据基础知识培训课件

课件全面介绍了大数据的基础知识&#xff0c;包括大数据的定义、特征、发展演进、产业链、关键技术以及市场规模等多个方面&#xff0c;旨在为观众提供一个关于大数据领域的综合性概览。 大数据基本概念 广义的定义(哲学) :大数据&#xff0c;是指物理世界到数字世界的映射和提…

仓储管理系统-综合管理(源码+文档+部署+讲解)

本文将深入解析“仓储管理系统-综合管理”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 仓储管理系统-综合管理是一个全面的仓库管理解决方案&#xff0c;旨在通过集成多种功能模块来优化仓库操作和管理流程。该系统提供了…

MYSQL中的两种转义操作

在 MySQL 中&#xff0c;转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符 可以用转义符\ 和 两个连续的引号 来起到转义引号的作用 转义符转义: 这是users表中的数据 如果查询admin 或者 admin" 用户,可以用转义符\ 两个连…

引领企业未来数字基础架构浪潮,中国铁塔探索超大规模分布式算力

分布式算力被中国信通院列入“2024政企数智化转型十大关键词”。中国信通院指出&#xff0c;随着新一代通信规模建设和边缘计算应用的持续部署&#xff0c;越来越多的应用运行和数据生产处理在边端侧开展&#xff0c;这对于传统算力基础设施的部署、调度提出了新要求&#xff0…

【数据结构】快排之三路划分

目录 一、前言 二、 快排性能的关键点分析 三、 三路划分基本思想 四、 思路分析 五、提醒 六、代码实现 一、前言 继续对快速排序的深入优化进行探讨 二、 快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后&#xff0c;key对数组的分割。 如果每次选key都能…

Kafka面试题解答(一)

1.kafka消息发送的流程&#xff1f; 生产者&#xff1a;在消息发送的过程中涉及到了两个线程&#xff1a;main线程和sender线程。在main线程中创建了一个双端队列RecordAccumulator&#xff08;默认32m&#xff09;。main线程将消息发送RecordAccumulator,sender线程不断地从R…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;番茄成熟度检测在农业生产及质量控制中起着至关重要的作用&#xff0c;不仅能帮助农民及时采摘成熟的番茄&#xff0c;还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型&#xff0c;该模型使用了…

Oracle 数据库创建导入

注意&#xff1a;本教程中的有些命令您可能并不熟悉&#xff0c;但没关系&#xff0c;只需按照说明一步一步创建示例数据库即可。在之后的教程中&#xff0c;会详细介绍每个命令。 1.创建新用户并授予权限 1.1.打开 首先&#xff0c;启动 SQL plus 程序的命令行&#xff1a;…

为centos7分配ip

前提&#xff1a; 安装好centos7 编辑文件 进入编辑模式[dmdbalocalhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改 BOOTPROTOstatic DNBOOTyes IPADDR192.168.152.11 NETMASK255.255.255.0 GATEWAY192.168.152.2 DNS18.8.8.8 点击esc .输入“:wq” 保存退…

内网安全-代理技术-socket协议

小迪安全网络架构图&#xff1a; 背景&#xff1a;当前获取window7 出网主机的shell。 1.使用msf上线&#xff0c;查看路由 run autoroute -p 添加路由&#xff1a; run post/multi/manage/autoroute 使用socks模块开启节点&#xff0c;作为流量跳板 msf6 exploit(multi/ha…

如何使用.bat实现电脑自动重启?

1、在电脑桌面新建一个记事本文档&#xff0c;将如下内容写进去&#xff1a; echo off shutdown /r /t 02、然后&#xff0c;保存一下&#xff0c;再把桌面此文件重命名为电脑重启.bat 3、双击此程序&#xff0c;可以立刻重启电脑。 PS&#xff1a;① 此程序会不保存任何当前…

YOLOv11融合CVPR[2024]自适应扩张卷积FADC模块及相关改进思路|YOLO改进最简教程

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Frequency-Adaptive Dilated Convolution for Semantic Segmentation》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.05369 代码…

Python 数据文件读写教程

Python 数据文件读写教程 在数据科学和软件开发中&#xff0c;文件的读写操作是至关重要的。Python 作为一门功能强大的编程语言&#xff0c;提供了多种方式来处理文件&#xff0c;包括文本文件、CSV 文件、JSON 文件等。在本教程中&#xff0c;我们将深入探讨 Python 中的数据…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 &#xff08;向上调整&#xff09;代码 &#xff08;向下调整&#xff09;代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

Autosar CP DDS规范导读

Autosar CP DDS 主要用途 数据通信 中间件协议&#xff1a;作为一种中间件协议&#xff0c;DDS实现了应用程序之间的高效数据通信&#xff0c;能够在不同的软件组件和ECU之间传输数据&#xff0c;确保数据的实时性和可靠性。跨平台通信&#xff1a;支持在AUTOSAR CP平台上的不同…

数字IC实践项目(10)—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证(付费项目)

数字IC实践项目&#xff08;10&#xff09;—基于System Verilog的DDR4 Model/Tb 及基础Verification IP的设计与验证&#xff08;付费项目&#xff09; 前言项目框图1&#xff09;DDR4 Verification IP2&#xff09;DDR4 JEDEC Model & Tb 项目文件1&#xff09;DDR4 Veri…

Jmeter中的监听器(三)

9--断言结果 功能特点 显示断言结果&#xff1a;列出所有断言的结果&#xff0c;包括通过和失败的断言。详细信息&#xff1a;显示每个断言的详细信息&#xff0c;如断言类型、实际结果和期望结果。错误信息&#xff1a;显示断言失败时的错误信息&#xff0c;帮助调试。颜色编…