踩的ssh坑

先说下事情的起因,手贱删掉了~/.ssh下的所有文件,包括authorized_keys,id_rsa,id_rsa.pub,以及known_hosts。其实,这四个文件本来就是没有的,id_rsa和id_rsa.pub是存储私钥和公钥的文件,通过命令生成。
ssh-keygen

删除了所有文件之后,再ssh Slave2(远程主机名)就提示以下消息:

The authenticity of host '111.222.333.444 (111.222.333.444)' can't be established.
RSA key fingerprint is f3:cf:58:ae:71:0b:c8:04:6f:34:a3:b2:e4:1e:0c:8b.
Are you sure you want to continue connecting (yes/no)? 

回车确认之后,提示如下:

Host key verification failed

”主机密钥验证失败“。

方法1:参考

在.ssh/config(或者/etc/ssh/ssh_config)中配置:

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

直接写到配置文件中。另外还有一种方法就是每次连接的时候使用“StrictHostKeyChecking no”,也就是以下的方法2.

方法2:

解决方法如下,虽然不一定是最好的,但是确实是解决了我的问题。

在Master端输入如下命令:

ssh -o "StrictHostKeyChecking no" hadoop@Slave2

hadoop是Master端用户名,Slaver2是本地hosts文件里保存的远程主机名,也可以跟目的主机的名字不同,只要hosts文件里可以根据这个名称映射到IP就可以,实质还是通过IP访问的。

然后就可以ssh密码登录Slave2了,切换到Master端执行以下命令首先将Master的公钥传输到Slave2端,然后将其插入到authorized_keys文件中(插入的时候创建了这个文件)

scp ~/.ssh/id_rsa.pub hadoop@Slave2:/home/hadoop/(这只是传递文件,传递文件夹的话使用scp -r)

从Master使用ssh登录Slave2,执行以下命令:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

然后ssh Slave2,结果提示如下信息,仍然需要使用密码登录Slave2:

Agent admitted failure to sign using the key.

解决方法就是在Master端执行如下命令:

 ssh-add   ~/.ssh/id_rsa 

以上方法就解决了删除了.ssh目录下所以文件之后无密码登陆远程主机的问题。

2)有时候会有如下提示:

Offending key for IP in /home/hadoop/.ssh/known_hosts:5
Matching host key in /home/hadoop/.ssh/known_hosts:11
Are you sure you want to continue connecting (yes/no)? 
Host key verification failed.

原因是: ssh会把你每个你访问过计算机(例如从Master访问Slave1)的公钥(public key)都记录在~/.ssh/known_hosts(将Slave1的公钥记录在Master的此文件里)。当下次访问相同计算机时(Slave1),OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。我在上面列出的情况,就是这种情况。

解决方法:

sed -i '5d' ~/.ssh/known_hosts

因为提示第5行触发了问题,所以删除第五行。

参考:

http://superuser.com/questions/125324/how-can-i-avoid-sshs-host-verification-for-known-hosts

http://www.cnblogs.com/dlutxm/archive/2011/10/14/2212019.html

http://askubuntu.com/questions/45679/ssh-connection-problem-with-host-key-verification-failed-error

ssh的原理可参考以下博文:

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

转载于:https://www.cnblogs.com/lz3018/p/5125653.html

<think>我们正在讨论搭建Linux+Hadoop生态大数据处理平台时的注意事项和经验。根据引用内容,我们可以总结以下几点:1.**环境准备阶段注意事项**:-使用全新的系统环境(如CentOS7),避免已有Hadoop环境导致冲突(引用[2])。-确保所有节点使用相同的操作系统版本和配置。-正确设置JAVA_HOME环境变量,并确保所有节点一致(引用[4])。注意:某些组件(如ClouderaManager)可能需要显式在配置文件中指定JAVA_HOME(引用[4]中提到的`/etc/default/cloudera-scm-server`)。2.**安装包管理**:-提前下载好所需安装包(如HDP、Ambari或CDH),并确保版本兼容性(引用[2])。-注意:在安装过程中,避免使用可能干扰安装的外部工具(如ntfs-3g),安装完成后再启用(引用[2])。3.**集群节点管理**:-建议先用少量节点(如3台)搭建实验集群,验证成功后再扩展节点(引用[2])。-节点之间需要配置SSH免密登录,确保通信畅通。4.**用户和权限管理**:-Hadoop生态组件(如HDP)会创建多个专用用户(如hdfs、yarn、hive等),安装前需确保这些用户不存在或提前清理(引用[2])。-权限问题:HDFS目录权限、Linux文件系统权限需协调一致。5.**安装过程中的常见问题**:-**JAVA_HOME问题**:即使系统环境变量已设置,某些服务(如ClouderaManager)仍可能找不到,需在服务配置文件中显式指定(引用[4])。-**端口冲突**:Hadoop组件使用大量端口,安装前需检查端口占用情况(如8080、50070等)。-**主机名解析**:确保所有节点的主机名(hostname)能正确解析(通过/etc/hosts或DNS),且避免使用localhost。6.**安装后的测试与监控**:-启动服务后,通过WebUI(如NameNode的50070端口)和日志(/var/log/)验证服务状态。-使用监控工具(如Ambari或ClouderaManager)进行集群健康检查。###经验总结:1.**重装集群的复杂性**:引用[4]指出,重装集群可能比初次安装更复杂,因为残留的配置文件、数据或用户账户可能导致问题。彻底清理的方法包括:-卸载所有相关软件包。-删除残留文件和目录(如Hadoop的临时目录、日志目录、HDFS元数据目录等)。-删除相关用户和用户组。2.**小文件问题**:HDFS不适合存储大量小文件(引用[3]的面试题可能涉及),解决方案:-使用HAR(HadoopArchive)或SequenceFile合并小文件。-调整HDFS的blocksize和NameNode内存配置。3.**资源分配**:YARN资源管理需根据集群硬件合理配置,避免内存溢出或CPU争抢。###关键命令示例:```bash#检查Java环境echo$JAVA_HOME#彻底清理Hadoop残留(重装前)rm-rf/etc/hadoop*/tmp/hadoop*/var/log/hadoop*/hdfs/data/*/hdfs/name/*userdel-rhdfsyarnmapredhive#删除相关用户#格式化NameNode(初次启动前)hdfsnamenode-format```§§相关问题§§1.如何彻底清理Hadoop集群以便重装?2.Hadoop集群中如何优化小文件存储?3.集群节点间SSH免密登录如何配置?4.如何解决Hadoop服务启动时的端口冲突问题?5.如何监控Hadoop集群的健康状态?</think>### 搭建Linux+Hadoop生态平台的注意事项与经验 #### 一、环境准备阶段 1. **操作系统选择** - 使用纯净的CentOS 7系统(避免残留配置冲突)[^2] - 所有节点必须保持**相同版本**的操作系统 - 禁用防火墙和SELinux(否则会导致节点通信失败) 2. **Java环境配置** - 统一使用JDK 8(兼容性最佳) - 需在所有节点显式设置`JAVA_HOME` ```bash # 必须同时在/etc/profile和组件配置文件中声明 export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_171 ``` - 典型:Cloudera Manager启动报错"JAVA_HOME not found",需在`/etc/default/cloudera-scm-server`添加环境变量[^4] #### 二、集群搭建核心环节 1. **节点规划陷阱** - 避免在已有Hadoop环境的机器上安装(残留用户/配置会导致冲突)[^2] - 先使用**3台测试机验证**成功后再扩展节点 - 主机名必须可解析:`/etc/hosts`需包含所有节点IP-hostname映射 2. **存储设备处理** - 外部存储设备(如NTFS格式移动硬盘)需安装`ntfs-3g` ```bash yum install ntfs-3g # 传输安装包后必须卸载,否则引发HDP安装警告[^2] ``` - 安装完成后立即卸载第三方存储驱动 3. **权限管理雷区** - Hadoop会创建`hdfs`、`yarn`等系统用户,提前检查是否已存在 ```bash getent passwd hadoop # 存在则删除 userdel -r hadoop ``` - 目录权限错误导致NameNode启动失败: `chown -R hdfs:hdfs /var/log/hadoop-hdfs` #### 三、组件安装特殊问题 1. **HDFS格式化风险** - 仅首次启动时格式化NameNode:`hdfs namenode -format` - **严禁重复格式化**:会导致ClusterID变化,DataNode无法加入 2. **端口冲突解决方案** - 常见冲突端口:8080(Ambari), 50070(HDFS), 2181(Zookeeper) - 检测命令:`netstat -tulnp | grep <端口号>` - 修改默认端口:在`hdfs-site.xml`中添加 ```xml <property> <name>dfs.namenode.http-address</name> <value>0.0.0.0:50071</value> <!-- 修改默认50070 --> </property> ``` 3. **配置文件同步要求** - 所有节点的核心配置必须完全一致: - `core-site.xml`中的`fs.defaultFS` - `yarn-site.xml`中的`yarn.resourcemanager.hostname` - 使用`rsync`同步配置: ```bash rsync -av /etc/hadoop/conf/ worker1:/etc/hadoop/conf/ ``` #### 四、典型故障处理 1. **DataNode无法注册** - 现象:Live nodes显示为0 - 排查步骤: 1. 检查`/etc/hosts`主机名解析 2. 确认所有节点时间同步(安装`ntpdate`) 3. 清理DataNode的`version`文件: `rm -rf /data/hadoop/dfs/data/current/VERSION` 2. **资源管理器启动失败** - 查看日志定位原因:`tail -f /var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.log` - 常见错误: `Unable to load realm info from SCDynamicStore` 解决方案:在`yarn-env.sh`添加`export HADOOP_SECURE_DN_USER=yarn` #### 五、生产环境特别建议 1. **磁盘配置原则** - 数据目录使用**单独磁盘**(非系统盘) - 配置多目录提升吞吐: ```xml <!-- hdfs-site.xml --> <property> <name>dfs.datanode.data.dir</name> <value>/data1/hdfs,/data2/hdfs,/data3/hdfs</value> </property> ``` 2. **安全加固要点** - Kerberos认证:防止未授权访问 - HDFS透明加密:保护敏感数据 - 启用审计日志:`hadoop.security.audit.logger` > **关键经验**:搭建失败时优先检查`/var/log/`下的组件日志,70%的问题可通过日志定位[^3]。每次变更后使用`hadoop dfsadmin -report`验证集群状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值