批量添加hadoop节点,初始化hadoop机器

本文提供了一系列用于Hadoop集群部署的Shell脚本,包括分发必要文件、生成SSH密钥、配置系统环境等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部内容如下:

authorized_keys<span style="white-space:pre">		</span>-- CDH主节点的key
hosts<span style="white-space:pre">			</span>-- 所有机器的hosts配置
init_hadoop.sh<span style="white-space:pre">		</span>-- 分发其他文件到各个节点
init_hdp.sh<span style="white-space:pre">		</span><span style="font-family: Arial, Helvetica, sans-serif;">-- </span><span style="font-family: Arial, Helvetica, sans-serif;">为hadoop用户生成key</span>
init_root.sh<span style="white-space:pre">		</span>-- 初始化系统变量
jdk-7u65-linux-x64.rpm<span style="white-space:pre">	</span>-- Java环境
send_hosts.sh<span style="white-space:pre">		</span>-- 分发hosts文件,这里主要是分发之前已经安装好的节点


init_hadoop.sh
for arg in $* ; do
    ping -c 1 $arg  || continue
     scp -o StrictHostKeyChecking=no -r ./jdk-7u65-linux-x64.rpm  $arg:/tmp
     scp -o StrictHostKeyChecking=no -r ./authorized_keys  $arg:/tmp
     scp -o StrictHostKeyChecking=no -r ./init_root.sh  $arg:/tmp
     scp -o StrictHostKeyChecking=no -r ./init_hdp.sh  $arg:/tmp
     scp -o StrictHostKeyChecking=no -r ./hosts  $arg:/tmp
     ssh -o StrictHostKeyChecking=no -t $arg "sudo -i"
done

init_hdp.sh

cd ~
ssh-keygen
cp /tmp/authorized_keys /home/hadoop/.ssh/
chmod 755 ~/.ssh
chmod 644 /home/hadoop/.ssh/authorized_keys

init_root.sh

cp -R /tmp/hosts /etc/
rpm -ivh /tmp/jdk-7u65-linux-x64.rpm
echo 'JAVA_HOME=/usr/java/default' >> /etc/profile
service ntpd start
sysctl vm.swappiness=0
echo 'vm.swappiness=0' >> /etc/sysctl.conf
useradd hadoop
su hadoop

现在跳转机上执行init_hadoop.sh把各个文件分发下去,然后sudo -i 可以把当前连接转到对应机器上。

然后cd /tmp/

sh init_root.sh

sh init_hdp.sh




Hadoop集群初始化失败通常由多种因素引起,以下是可能导致此问题的原因及其对应的解决方案: ### 可能原因及解决方案 #### 1. **配置文件错误** 如果 `core-site.xml`、`hdfs-site.xml` 或其他 HDFS 配置文件设置不当,则可能会导致 NameNode 初始化失败。 - 确保所有节点上的配置文件保持一致性,并且正确指定了必要的参数,例如 `fs.defaultFS` 和 `dfs.namenode.name.dir`[^4]。 - 使用命令验证配置文件语法是否正确: ```bash hadoop checknative -a ``` #### 2. **ZooKeeper 和 JournalNode 未正常运行** 当使用高可用架构时,ZooKeeper 和 JournalNode 的状态直接影响到 NameNode 的初始化过程。如果这些服务未启动或异常终止,NameNode 将无法完成格式化操作。 - 检查 ZooKeeper 是否已启动并监听指定端口: ```bash netstat -tuln | grep 2181 ``` - 确认 JournalNode 正常工作: ```bash jps ``` 应当看到 `JournalNode` 进程存在。 #### 3. **存储目录冲突** 存储目录(如 `/tmp/dfs/name`)可能存在残留数据或者权限不足的情况,这会导致 NameNode 格式化失败。 - 删除旧的数据目录并重新创建: ```bash rm -rf /path/to/hadoop/tmp/ mkdir -p /path/to/hadoop/tmp/ chmod 755 /path/to/hadoop/tmp/ ``` - 执行格式化命令前确认无任何遗留元数据: ```bash hadoop namenode -format ``` #### 4. **网络通信问题** 节点间无法通过主机名相互解析也可能引发初始化失败。检查 DNS 设置以及 `/etc/hosts` 文件是否正确映射各节点 IP 地址与名称[^3]。此外还需测试 SSH 免密码登录功能是否实现良好,因为这是分布式环境中管理的基础条件之一。 #### 5. **版本兼容性问题** 不同组件之间可能存在版本差异从而造成协作障碍。比如当前使用的 Hadoop 版本 (2.7.5) 对应的具体依赖库需满足官方文档推荐标准[^1]。因此升级至最新稳定版或将关联软件调整成相匹配的发行号不失为一种有效手段。 ```python def format_namenode(): import subprocess try: result = subprocess.run(['hadoop', 'namenode', '-format'], capture_output=True, text=True) if "successfully formatted" in result.stdout: print("NameNode has been successfully formatted.") else: raise Exception(result.stderr) except Exception as e: print(f"Error during formatting: {e}") if __name__ == "__main__": format_namenode() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值