Hadoop 3.x 完全分布式集群部署:3节点配置、SSH免密与xsync脚本分发
Hadoop 3.x 完全分布式集群实战3节点自动化部署与运维精要1. 生产级集群规划与基础环境准备在构建Hadoop完全分布式集群时合理的节点角色分配是确保集群稳定运行的首要条件。我们以3节点集群为例采用业界推荐的主从分离架构节点名称HDFS角色YARN角色特殊说明hadoop101NameNode DataNodeNodeManager避免SecondaryNameNode共存hadoop102DataNodeResourceManager独立部署资源管理器hadoop103DataNode SecondaryNNNodeManager检查点服务器独立部署关键配置检查清单所有节点需配置静态IP/etc/sysconfig/network-scripts/ifcfg-ens33示例BOOTPROTOstatic IPADDR192.168.10.101 NETMASK255.255.255.0 GATEWAY192.168.10.1主机名解析一致性所有节点的/etc/hosts需包含192.168.10.101 hadoop101 192.168.10.102 hadoop102 192.168.10.103 hadoop103JDK环境验证Hadoop 3.x要求JDK 8# 在所有节点执行 java -version echo $JAVA_HOME生产环境建议NameNode和ResourceManager应部署在不同物理服务器且SecondaryNameNode不应与NameNode同节点避免单点故障和资源竞争。2. SSH免密登录的自动化配置集群节点间的无缝通信是分布式系统的生命线。以下是通过脚本实现批量免密配置的完整流程#!/bin/bash # 在所有节点执行此脚本 USERhadoop NODES(hadoop101 hadoop102 hadoop103) # 生成密钥对Ed25519算法更安全 ssh-keygen -t ed25519 -P -f ~/.ssh/id_ed25519 # 配置known_hosts避免首次连接确认 for node in ${NODES[]}; do ssh-keyscan $node ~/.ssh/known_hosts done # 分发公钥到所有节点包括本机 for node in ${NODES[]}; do ssh-copy-id -i ~/.ssh/id_ed25519.pub $USER$node done # 验证免密登录 for node in ${NODES[]}; do ssh $USER$node hostname date done常见问题排查权限问题确保~/.ssh目录权限为700密钥文件为600SELinux干扰临时禁用setenforce 0或配置适当策略防火墙限制开放22端口或禁用防火墙生产环境慎用3. 集群配置文件的深度优化3.1 核心配置文件精调etc/hadoop/core-site.xml的高可用配置configuration !-- 使用逻辑名称而非具体主机名 -- property namefs.defaultFS/name valuehdfs://mycluster/value /property !-- 使用企业级存储路径 -- property namehadoop.tmp.dir/name value/data/hadoop/tmp/value /property !-- 启用HA故障转移 -- property nameha.zookeeper.quorum/name valuehadoop101:2181,hadoop102:2181,hadoop103:2181/value /property /configuration3.2 HDFS高可用配置etc/hadoop/hdfs-site.xml的关键参数property namedfs.replication/name value3/value !-- 与DataNode数量匹配 -- /property property namedfs.namenode.name.dir/name value/data/hadoop/hdfs/name/value /property property namedfs.datanode.data.dir/name value/data/hadoop/hdfs/data/value /property !-- 启用WebHDFS -- property namedfs.webhdfs.enabled/name valuetrue/value /property3.3 YARN资源调度优化etc/hadoop/yarn-site.xml的生产级配置property nameyarn.resourcemanager.hostname/name valuehadoop102/value /property property nameyarn.nodemanager.resource.memory-mb/name value8192/value !-- 根据物理内存调整 -- /property property nameyarn.scheduler.maximum-allocation-mb/name value6144/value !-- 单任务最大内存 -- /property property nameyarn.nodemanager.vmem-check-enabled/name valuefalse/value !-- 关闭虚拟内存检查 -- /property4. 集群部署自动化工具链4.1 xsync集群同步脚本以下是增强版的xsync脚本支持增量同步检测文件变更监控同步结果日志记录#!/bin/bash # 增强版集群同步工具 declare -a NODES(hadoop102 hadoop103) LOG_FILE/var/log/xsync_$(date %Y%m%d).log sync_file() { local src$1 local pdir$(cd -P $(dirname $src); pwd) local fname$(basename $src) echo [$(date %Y-%m-%d %H:%M:%S)] Syncing $src $LOG_FILE for node in ${NODES[]}; do echo $node # 使用rsync的checksum模式进行精确比对 rsync -avzc --delete \ --exclude*.log \ --exclude*.tmp \ $pdir/$fname $node:$pdir 2 $LOG_FILE # 验证同步结果 ssh $node md5sum $pdir/$fname | awk {print $1} /tmp/md5_$node done # 校验所有节点文件一致性 if [ $(cat /tmp/md5_* | uniq | wc -l) -ne 1 ]; then echo ERROR: MD5 verification failed for $src $LOG_FILE return 1 fi return 0 } # 主程序 if [ $# -lt 1 ]; then echo Usage: $0 file_or_dir exit 1 fi for item in $; do if [ -e $item ]; then sync_file $item || exit 1 else echo Path $item does not exist! $LOG_FILE fi done echo All files synced successfully at $(date) $LOG_FILE4.2 集群批量操作脚本cluster-command.sh实现跨节点统一执行#!/bin/bash # 集群批量命令执行工具 if [ $# -ne 1 ]; then echo Usage: $0 command exit 1 fi COMMAND$1 NODES(hadoop101 hadoop102 hadoop103) TIMEOUT60 # 超时设置(秒) for node in ${NODES[]}; do echo Executing on $node: $COMMAND ssh -o ConnectTimeout$TIMEOUT $node $COMMAND 21 | \ sed s/^/$node: / echo ------------------------------------- done使用示例# 批量查看Java进程 ./cluster-command.sh jps # 统一清理临时文件 ./cluster-command.sh rm -rf /tmp/hadoop*5. 集群启动与验证5.1 安全启动流程首次启动必须格式化仅在NameNode节点执行hdfs namenode -format -clusterId mycluster按顺序启动服务# 启动ZooKeeperHA环境下 zkServer.sh start # 启动HDFS start-dfs.sh # 启动YARN在ResourceManager节点 start-yarn.sh服务健康检查# 检查HDFS状态 hdfs dfsadmin -report # 检查YARN节点 yarn node -list # 综合状态查看 hadoop dfshealth5.2 自动化测试方案MapReduce压力测试脚本#!/bin/bash # 集群负载测试工具 INPUT_SIZE10G # 测试数据量 MAP_TASKS20 # Map任务数 REDUCE_TASKS10 # Reduce任务数 # 生成测试数据 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar \ teragen $INPUT_SIZE /benchmark/teragen # 执行排序测试 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar \ terasort -Dmapreduce.job.maps$MAP_TASKS \ -Dmapreduce.job.reduces$REDUCE_TASKS \ /benchmark/teragen /benchmark/terasort # 验证结果 hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar \ teravalidate /benchmark/terasort /benchmark/teravalidate6. 运维监控与故障处理6.1 关键指标监控项通过hadoop-metrics2.properties配置监控# 监控数据发送到Prometheus *.sink.prometheus.classorg.apache.hadoop.metrics2.sink.PrometheusMetricsSink namenode.sink.prometheus.server.urlhttp://monitor:9090 datanode.sink.prometheus.server.urlhttp://monitor:9090 resourcemanager.sink.prometheus.server.urlhttp://monitor:9090核心监控指标HDFSCapacityUsed存储容量使用率MissingBlocks缺失块数FilesTotal总文件数YARNAllocatedMB已分配内存AvailableMB可用内存ContainersRunning运行容器数6.2 常见故障处理指南NameNode无法启动检查namenode.format文件是否存在且内容正确验证journalnode状态hdfs haadmin -getServiceState nn1检查端口冲突netstat -tulnp | grep 8020DataNode不汇报# 检查DataNode日志 tail -100 $HADOOP_HOME/logs/hadoop-*-datanode-*.log # 强制重新注册 hdfs dfsadmin -refreshNodesResourceManager过载调整调度器配置property nameyarn.scheduler.capacity.maximum-am-resource-percent/name value0.3/value /property启用资源限制yarn rmadmin -refreshQueues通过上述全流程的自动化部署方案和深度优化配置可构建出满足企业级生产需求的Hadoop集群。在实际运维中建议结合CMDB系统实现配置版本化管理并建立完善的监控告警体系。

相关新闻