配置Hadoop集群环境-使用脚本命令实现集群文件同步

发布于:2025-05-12 ⋅ 阅读:(22) ⋅ 点赞:(0)

在 Hadoop 集群环境中,确保各节点配置文件一致至关重要。以下是使用 rsync 结合 SSH 实现集群文件同步的脚本方案,支持批量同步文件到所有节点:

1. 前提条件

  • 所有节点已配置 SSH 免密登录
  • 主节点(NameNode)能通过主机名或 IP 访问从节点
  • 安装 rsync(大多数 Linux 系统已预装)

2. 集群节点配置

创建节点列表文件(如 /opt/hadoop/etc/hadoop/slaves),每行包含一个从节点的主机名或 IP:

plaintext

slave1
slave2
slave3

3. 同步脚本实现

创建 sync_hadoop.sh 脚本,用于将主节点的 Hadoop 配置同步到所有从节点:

bash

#!/bin/bash

# Hadoop 同步脚本 - 将主节点配置同步到所有从节点
HADOOP_HOME="/opt/hadoop"  # Hadoop 安装目录
SLAVES_FILE="$HADOOP_HOME/etc/hadoop/slaves"  # 从节点列表文件
SRC_DIR="$HADOOP_HOME/etc/hadoop"  # 源目录(主节点配置)

# 检查是否提供参数
if [ -z "$1" ]; then
    echo "用法: $0 [文件|目录]"
    echo "示例: $0 core-site.xml"
    echo "      $0 etc/hadoop/"
    exit 1
fi

# 获取要同步的源路径
SRC_PATH="$SRC_DIR/$1"

# 检查源文件/目录是否存在
if [ ! -e "$SRC_PATH" ]; then
    echo "错误: $SRC_PATH 不存在!"
    exit 1
fi

# 读取从节点列表并同步
echo "开始同步到以下节点:"
cat "$SLAVES_FILE"
echo "------------------------"

while read -r slave; do
    echo "正在同步到 $slave..."
    
    # 使用 rsync 同步文件,保留权限和时间戳
    rsync -avz --delete "$SRC_PATH" "$slave:$SRC_DIR/"
    
    if [ $? -eq 0 ]; then
        echo "✓ $slave 同步完成"
    else
        echo "✗ $slave 同步失败"
    fi
    echo "------------------------"
done < "$SLAVES_FILE"

echo "全部同步完成!"

4. 使用方法

  1. 同步单个文件(如 core-site.xml):

    bash

    /opt/hadoop/bin/sync_hadoop.sh core-site.xml
    
  2. 同步整个目录(如 etc/hadoop/):

    bash

    /opt/hadoop/bin/sync_hadoop.sh etc/hadoop/
    
  3. 同步后重启 Hadoop 服务

    bash

    # 在主节点执行
    stop-all.sh
    start-all.sh
    

5. 脚本优化建议

并行同步(提升效率)

修改脚本中的 rsync 命令,使用 & 符号让每个节点的同步并行执行:

bash

# 并行版本(不等待前一个节点完成)
rsync -avz --delete "$SRC_PATH" "$slave:$SRC_DIR/" &
日志记录

添加日志文件记录每次同步操作:

bash

LOG_FILE="/var/log/hadoop_sync.log"
echo "$(date): 同步 $1 到 $slave" >> "$LOG_FILE"
错误处理

增加节点连通性检查:

bash

# 检查 SSH 连接
if ! ssh "$slave" "exit"; then
    echo "⚠️ 无法连接到 $slave,跳过..."
    continue
fi

网站公告

今日签到

点亮在社区的每一天
去签到