通过创建多个虚拟机来模拟实现hadoop的集群安装。现创建了三个虚拟机,主机名分别为hadoop0,hadoop1,hadoop2。现选中hadoop0作为集群主节点,hadoop1、hadoop2作为从节点。在hadoop0上运行Java进程NameNode、JobTracker、SecondaryNameNode(可以放到从节点上运行),从节点(hadoop1、hadoop2)运行Java进程DataNode、TaskTracker。
现默认hadoop0上已安装好了jdk、hadoop。如果还没安装,请看hadoop伪分布环境搭建
hadoop集群安装过程如下:
1. 编辑各节点的/etc/hosts,在该文件中包含所有节点的ip与hostname的映射信息
2. 两两节点的SSH免密码登录:
1) 在各个节点实现免密码登录(参考hadoop伪分布环境搭建)
2) 在hadoop0节点上获取hadoop1公钥:ssh-copy-id -i hadoop1,获取hadoop2公钥:ssh-copy-id -i hadoop2
3) 在hadoop0节点上发送所有节点公钥集合最大文件:scp /root/.ssh/authorized_keys hadoop1:/root/.ssh/
4) 验证两两节点是否免密码登录:ssh hadoop0、ssh hadoop1、ssh hadoop2
3. 把hadoop0的hadoop目录下的logs和tmp删除
4. 把hadoop0的jdk、hadoop文件夹复制到hadoop1和hadoop2节点上:scp -r /usr/local/ jdk hadoop1:/usr/local/。同理hadoop2
5. 把hadoop0的/etc/profile复制到hadoop1和hadoop2节点上,在各个节点上执行命令source /etc/profile
6. 编辑hadoop0的配置文件slaves,改为从节点的hostname,分别是hadoop1和hadoop2。各占一行
7. 在hadoop0节点执行start-all.sh,进行格式化
8. 启动,在hadoop0节点执行start-all.sh
9. 验证:hadoop0上运行Java进程NameNode、JobTracker、SecondaryNameNode,从节点(hadoop1、hadoop2)运行Java进程DataNode、TaskTracker。
注意:对于配置文件core-site.xml和mapred-site.xml在所有节点中都是相同的内容
扩展:
1.SecondaryNameNode运行过程中很占用内存,因为它要合并fsimage(NameNode元记录)和edit(事务操作记录日志)文件,单独布置到一台机器上,在hadoop0的conf文件夹下的master文件中,指定机器hostname
2.动态的增加一个hadoop节点
2.1 把主节点的jdk、hadoop、/etc/profile文件发送到新节点中
2.2 设置新节点自身免密码登录、集群两两节点免密码登录
2.3 把新节点的hostname布置到主节点的slaves文件
2.4 在新节点启动进程:hadoop-daemon.sh start datanode hadoop-daemon.sh start tasktracker
2.5 在主节点执行脚本 hadoop dfsadmin -refreshNodes
2.6 均衡block(在新节点上执行,如果有多个新节点,只需在一个节点):start-balancer.sh
3.hadoop安全模式:当刚启动hadoop的前30秒是安全模式,在该模式下只能对hdfs下的文件进行查看,不能增删改。当block缺失率达不到hadoop设置的要求后,系统会自动进入到安全模式。经常用到的命令有hadoop dfsadmin -safemode enter | leave | get | wait(可能还有其他的)