搭建了很多次hadoop2.2.0了,尝试过很多不同的启动方法、配置参数、位置,其中涉及到到底要不要配置SSH免密码登录的问题
先是搞清楚为什么需要SSH免密码登录
SSH免密码登录操作步骤:
... ...
在hadoop2.2.0中有三种启动方式:
- 使用hadoop-daemon.sh和yarn-daemon.sh分别启动每一个守护进程;
- 使用start-dfs.sh和start-yarn.sh分开启动不同模块的所有进程;
- 使用start-all.sh启动所有模块所有进程。
三种启动方式在实验阶段都可以使用,只不过第一种更适合于生产环境。
第一种不需要配置SSH免密码登录,第二种和第三钟需要,为什么?
第一种是逐一启动每一台机器的每一个进程,就是说如果是完全分布式环境,有多少台机器我就要在每台机器上使用这个命令去启动对应的命令,如在namenode上启动namenode就要使用sbin/hadoop-daemon.sh start namenode这个命令,在datanode上启动datanode,就要使用sbin/hadoop-daemon.sh start datanode这个命令,对应的yarn进程启动也一样,不过是使用yaen-daemon.sh。
而第二种和第三种是一种只在namenode上使用就可以启动整个集群的方便方式,它的原理是根据配置文件启动namenode上的对应进程然后再通过SSH协议登录到slave上启动对应的进程。
说到这已经明白了,那么我以前的一种说法或者一种认识就是错的。
因为只需要namenode远程登录到slave中启动对应进程,所以所有slave只需要拥有namenode的公钥就行了,不需要拥有其他slave的公钥。
不过我引出一种猜想,反正namenode和slave的信息是在配置文件中读出来的,所以如果slave能SSH免密码登录namenode,那么是不是就可以在namenode上格式化文件系统,而在某台slave上启动集群?呵呵。
那其他地方不用SSH协议了吗?
答案是不用了,只有启动的时候才用。(我现在的认识)
其他如心跳等是用了RPC协议,web UI使用了HTTP协议,所以在hadoop中RPC协议、HTTP协议远比SSH协议重要的多