start-all.sh启动设置ssh免密登陆还总是提示输入密码的解决办法

本文详细介绍了在使用start-all.sh脚本时遇到的SSH免密登录问题及其解决方法。通过调整文件权限,确保SSH配置正确无误,实现集群内的无密码登录,提升自动化部署效率。

【1】问题描述:

start-all.sh启动设置ssh免密登陆还总是提示输入密码:已经配置了ssh免密码登陆,当是每次输入start-all.sh还是总是提示输入密码:

 

【2】解决办法:这个是文件权限的问题

配置ssh免密码登陆的方法:

cd ~/.ssh/

ssh-keygen -t rsa     ====一直回车

cat ./id_rsa.pub >> ./authorized_keys

在输入以下命令:

chown hadoop: /home/hadoop/.ssh         (hadoop是我的用户名名)

chown hadoop: /home/hadoop/.ssh/*  

chmod 700 /home/hadoop/.ssh  

chmod 600 /home/hadoop/.ssh/* 

 

测试一下:

ssh localhost

 

 

 

<think>我们正在讨论的是在xterminal环境中编写一个用于启动Hadoop集群的Shell脚本。根据之前的引用和讨论,我们有以下信息: 引用[1]提供了一个基本的启停脚本,它通过case语句来处理start和stop两个参数。脚本中包含了启动和停止HDFS、YARN以及历史服务的命令,并且注意了启动和停止的顺序。 引用[2]展示了如何通过一个循环在多个节点上执行命令(例如查看JPS进程状态),这需要配置SSH免密登录。 引用[3]则介绍了Shell脚本的基本概念和编写规范。 用户的需求是在xterminal中编写这样的脚本。xterminal应该是一个终端环境,因此我们需要编写一个可以在Linux终端中运行的Shell脚本。 结合之前给出的方案,我们可以考虑以下两种场景: 1. 单节点集群:所有服务(HDFS, YARN, JobHistory)都运行在同一台机器上。 2. 多节点集群:服务分布在不同的节点上,需要通过SSH远程执行命令。 由于用户没有明确说明集群的规模,我们可以提供一个较为通用的脚本,既可以用于单节点,也可以用于多节点(通过配置节点列表)。 下面是一个改进的脚本,它支持多节点启动,同时也可以作为单节点启动(如果节点列表只有一个节点)。同时,我们增加了检查参数和错误处理的功能。 ### 多节点启动Hadoop集群的Shell脚本 ```bash #!/bin/bash # 脚本功能:启动或停止Hadoop集群(多节点) # 使用方式:./hadoop-cluster.sh [start|stop|status] # 注意:需要提前配置SSH免密登录,并修改以下变量以适应你的环境 # 配置变量 HADOOP_HOME=/opt/hadoop # Hadoop安装目录 JAVA_HOME=/opt/jdk # JDK安装目录(可选,如果环境变量已配置则可不设置) # 节点配置 NAMENODE="hadoop-nn" # NameNode节点 RESOURCEMANAGER="hadoop-rm" # ResourceManager节点 DATANODES=("hadoop-dn1" "hadoop-dn2") # DataNode节点列表 HISTORYSERVER="hadoop-rm" # HistoryServer节点(通常与ResourceManager在同一节点) # 添加环境变量(如果必要) export PATH=$PATH:$JAVA_HOME/bin # 检查参数 if [ $# -ne 1 ]; then echo "Usage: $0 [start|stop|status]" exit 1 fi # 启动HDFS start_hdfs() { echo "Starting HDFS on $NAMENODE" ssh $NAMENODE "$HADOOP_HOME/sbin/start-dfs.sh" } # 启动YARN start_yarn() { echo "Starting YARN on $RESOURCEMANAGER" ssh $RESOURCEMANAGER "$HADOOP_HOME/sbin/start-yarn.sh" } # 启动历史服务 start_history() { echo "Starting HistoryServer on $HISTORYSERVER" ssh $HISTORYSERVER "$HADOOP_HOME/bin/mapred --daemon start historyserver" } # 停止历史服务 stop_history() { echo "Stopping HistoryServer on $HISTORYSERVER" ssh $HISTORYSERVER "$HADOOP_HOME/bin/mapred --daemon stop historyserver" } # 停止YARN stop_yarn() { echo "Stopping YARN on $RESOURCEMANAGER" ssh $RESOURCEMANAGER "$HADOOP_HOME/sbin/stop-yarn.sh" } # 停止HDFS stop_hdfs() { echo "Stopping HDFS on $NAMENODE" ssh $NAMENODE "$HADOOP_HOME/sbin/stop-dfs.sh" } # 查看集群状态(所有节点上的JPS) check_status() { all_nodes=($NAMENODE $RESOURCEMANAGER ${DATANODES[@]}) for node in ${all_nodes[@]}; do echo "---------- JPS on $node -----------" ssh $node "$JAVA_HOME/bin/jps" done } case $1 in "start") start_hdfs start_yarn start_history ;; "stop") stop_history stop_yarn stop_hdfs ;; "status") check_status ;; *) echo "Error: Invalid argument. Use 'start', 'stop' or 'status'" exit 1 ;; esac echo "Operation completed!" ``` #### 使用说明 1. 将上述代码保存为脚本文件,例如`hadoop-cluster-manager.sh`。 2. 修改脚本中的配置变量(如`HADOOP_HOME`、`JAVA_HOME`以及节点主机名)以匹配你的集群环境。 3. 给脚本添加执行权限:`chmod +x hadoop-cluster-manager.sh`。 4. 运行脚本: - 启动集群:`./hadoop-cluster-manager.sh start` - 停止集群:`./hadoop-manager.sh stop` - 查看状态:`./hadoop-manager.sh status` #### 关键点说明 - **SSH免密登录**:脚本使用`ssh`命令远程执行操作,因此需要提前配置好从执行脚本的机器到所有节点的SSH免密登录。 - **节点配置**:脚本中明确指定了NameNode、ResourceManager、DataNodes和HistoryServer所在的节点。根据你的集群架构调整。 - **启动顺序**:启动时先启动HDFS,然后是YARN,最后是历史服务。 - **停止顺序**:停止时先停止历史服务,然后是YARN,最后是HDFS。这样可以避免进程残留。 - **状态检查**:通过`jps`命令检查各个节点上Java进程的状态。 #### 单节点简化版 如果你的集群是单节点(所有服务都在同一台机器),那么可以简化脚本: ```bash #!/bin/bash HADOOP_HOME=/opt/hadoop case $1 in "start") $HADOOP_HOME/sbin/start-dfs.sh $HADOOP_HOME/sbin/start-yarn.sh $HADOOP_HOME/bin/mapred --daemon start historyserver ;; "stop") $HADOOP_HOME/bin/mapred --daemon stop historyserver $HADOOP_HOME/sbin/stop-yarn.sh $HADOOP_HOME/sbin/stop-dfs.sh ;; "status") jps ;; *) echo "Usage: $0 [start|stop|status]" ;; esac ``` ### 注意事项 1. **环境变量**:如果已经在系统级别配置了`JAVA_HOME`和`HADOOP_HOME`,则可以省略脚本中的相关设置。 2. **权限问题**:确保运行脚本的用户具有执行Hadoop命令的权限。 3. **路径问题**:确保脚本中设置的`HADOOP_HOME`和`JAVA_HOME`路径正确。 4. **脚本调试**:在执行过程中遇到问题时,可以在脚本中加入`set -x`来启用调试模式,查看每一步的执行情况。 ### 相关问题 §§相关问题§§ 1. 如何配置Hadoop集群的SSH免密登录? 2. Hadoop启动过程中常见错误有哪些?如何排查? 3. 如何编写Hadoop集群的分发同步脚本? 4. YARN资源管理器启动失败可能是什么原因? 5. 如何通过Shell脚本自动化部署Hadoop集群? </think>### 在xTerminal中编写开启Hadoop的Shell脚本方法 #### 1. **基础启动脚本(单节点)** 适用于开发和测试环境,所有服务部署在同一节点: ```bash #!/bin/bash # 脚本名称:hadoop-start.sh HADOOP_HOME=/usr/local/hadoop # 修改为实际安装路径 source /etc/profile # 加载环境变量 case $1 in "start") echo "==== 启动HDFS服务 ====" $HADOOP_HOME/sbin/start-dfs.sh echo "==== 启动YARN服务 ====" $HADOOP_HOME/sbin/start-yarn.sh echo "==== 启动历史服务 ====" $HADOOP_HOME/bin/mapred --daemon start historyserver ;; "stop") echo "==== 停止历史服务 ====" $HADOOP_HOME/bin/mapred --daemon stop historyserver echo "==== 停止YARN服务 ====" $HADOOP_HOME/sbin/stop-yarn.sh echo "==== 停止HDFS服务 ====" $HADOOP_HOME/sbin/stop-dfs.sh ;; *) echo "用法: $0 [start|stop]" exit 1 ;; esac echo "操作完成!请检查日志确认状态" ``` #### 2. **集群启动脚本(多节点)** 适用于生产环境,服务分布在多个节点(需配置SSH免密登陆): ```bash #!/bin/bash # 脚本名称:hadoop-cluster.sh NN="hadoop-master" # NameNode主机 RM="hadoop-resmgr" # ResourceManager主机 case $1 in "start") echo "==== 在 $NN 启动HDFS ====" ssh $NN "/opt/hadoop/sbin/start-dfs.sh" echo "==== 在 $RM 启动YARN ====" ssh $RM "/opt/hadoop/sbin/start-yarn.sh" echo "==== 在 $RM 启动历史服务 ====" ssh $RM "/opt/hadoop/bin/mapred --daemon start historyserver" ;; "stop") echo "==== 在 $RM 停止历史服务 ====" ssh $RM "/opt/hadoop/bin/mapred --daemon stop historyserver" echo "==== 在 $RM 停止YARN ====" ssh $RM "/opt/hadoop/sbin/stop-yarn.sh" echo "==== 在 $NN 停止HDFS ====" ssh $NN "/opt/hadoop/sbin/stop-dfs.sh" ;; *) echo "用法: $0 [start|stop]" exit 1 ;; esac ``` #### 3. **状态检查脚本** 验证集群启动状态: ```bash #!/bin/bash # 脚本名称:cluster-status.sh nodes=("hadoop-master" "hadoop-worker1" "hadoop-worker2") for node in ${nodes[@]} do echo "==== $node 进程状态 ====" ssh $node "jps | grep -v Jps" echo done ``` ### 使用步骤(xTerminal操作) 1. **创建脚本文件** ```bash touch hadoop-start.sh chmod +x hadoop-start.sh # 添加执行权限 ``` 2. **编辑脚本** ```bash nano hadoop-start.sh # 粘贴上述脚本内容 ``` 3. **执行脚本** ```bash ./hadoop-start.sh start # 启动集群 ./cluster-status.sh # 检查状态 ``` ### 关键配置说明 1. **路径适配**: - `HADOOP_HOME` 需替换为实际安装路径(通过`echo $HADOOP_HOME`获取) - 多节点脚本中的主机名需匹配`/etc/hosts`配置 2. **SSH免密登录**: ```bash ssh-keygen # 生成密钥 ssh-copy-id hadoop-master # 复制公钥到目标节点 ``` 3. **环境变量**: 确保`/etc/profile`包含: ```bash export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin ``` ### 常见问题解决方案 1. **权限错误**: ```bash sudo chown -R $USER: $HADOOP_HOME # 修改目录所属 ``` 2. **端口冲突**: ```bash netstat -tuln | grep 9000 # 检查HDFS端口占用 ``` 3. **启动顺序**: - 必须按 **HDFS → YARN → HistoryServer** 顺序启动 - 停止时按 **HistoryServer → YARN → HDFS** 逆序 ### 脚本优化建议 1. 添加错误检测: ```bash if ! ssh $NN "$HADOOP_HOME/sbin/start-dfs.sh"; then echo "HDFS启动失败!" exit 1 fi ``` 2. 记录操作日志: ```bash LOG_FILE=/var/log/hadoop-start.log exec >> $LOG_FILE 2>&1 # 重定向输出到日志 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值