1.配置静态IP
因为每次虚拟机重新启动,它原有的ip地址都有可能发生变化,因为我们要先固定集群中各个节点的ip防止以后无法解析对应的节点
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0
修改配置文件
ONBOOT=yes
BOOTPROTO=none
在末尾添加
IPADDR=192.168.23.130(最好修改为本次虚拟机启动后的ip防止自己手动修改引起不必要的冲突)
PREFIX=24
GATEWAY=192.168.23.2
DNS1=8.8.8.8
修改完毕后重启服务使改动生效
service network restart
准备工作完成,现在开始搭建集群(默认已经配置好JDK环境,如果没有请参考上一篇博客)
2.同步时间
因为安装centos镜像时的选项不同,可能会导致我们各个节点的系统时间不一致,这会导致接收到的信息因为时间相差过大而被认为是过时信息(你肯定不会理会在元宵节时别人发给你的春节祝福吧@~@)
为了同步各个节点之间的时间,我们借用ntp工具
yum install ntp
然后我们可以去往上搜索那些开放的时间服务器,这里我们采用阿里云的时间服务器
ntpdate ntp1.aliyun.com
同步完成后我们可以在终端打印时间信息
date
请依次确认各个节点的时间信息是否已经保持一致
3.配置密钥
这次我们搭建的是完全分布式集群,存在多组节点之间的通信,所以我们需要将密钥分发给多个节点,在此之前,我们需要配置所有节点的hosts文件
vi /etc/hosts
配置的格式为
虚拟机IP 虚拟机主机名
/注意主机名一定要书写正确,不然在格式化目录时,错误的主机名将导致节点将无法创建目录/
主机名可以通过hostname命令来查看
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.23.130 hadoop01
192.168.23.128 hadoop02
192.168.23.129 hadoop03
192.168.23.131 hadoop04
注意,请在所有节点都配置以上信息不要有遗漏
并且关闭所有节点的防火墙
service iptables stop
关闭放火墙后开始配置密钥
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
其在所有节点运行此命令
并在主节点运行以下命令
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop03
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop04
配置完毕后,我们开始配置hadoop的一些文件
4.HDFS文件配置
将hadoop文件放到任意目录并且解压
首先修改(hadoop目录)/etc/hadoop下的hdfs-site.xml文件
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
第一个配置信息为节点备份数量 默认为3
第二个为secondaryNameNode的启动节点和端口信息
保存后接着修改同目录下的core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/abc/hadoop/cluster</value>
</property>
第一个配置信息为默认文件系统的位置
第二个为工作目录的位置(格式化节点时会自动生成)
保存后接着修改同目录下的slaves
hadoop02
hadoop03
hadoop04
注意每一个从节点都需要换行且后面不允许有空格,不然会导致启动失败
配置好以上信息后,我们就可以将hadoop的包分发给其他的节点了
scp -r hadoop-2.6.5 root@hadoop02:(目标路径)
请确保传输完成后的路径和当前节点的hadoop包路径一致,或者通过手动移动的方式使其他节点的hadoop包路径和当前节点的一致
为了方便起见我们也可以采用第二种方式
先进入hadoop包所在的目录
scp -r hadoop-2.6.5 root@hadoop02:`pwd`
pwd代表当前节点的路径,使用该命令可以确保所有节点的hadoop包位置一致
当所有节点都接收到hadoop包后就可以启动集群了
5.启动集群
建议先配置hadoop环境变量,具体操作参照上一篇博客
在主节点上运行
hdfs namenode -format
运行完成后,节点会自动生成刚刚配置的工作目录
接着继续运行
start-dfs.sh
执行完成后使用jps命令检查各个节点
主节点为一个NameNode进程
第二个节点为secondaryNameNode和一个DataNode进程
第三个节点为一个DataNode进程
第四个节点也为一个DataNode进程
在第一台虚拟机上运行浏览器输入localhost:50070查看集群运行情况
启动成功,到此集群搭建完毕
6.问题总结
搭建集群的过程中会遇到各种各样的问题,在此稍稍总结一下几个常见的问题,仅供参考
1.防火墙设置
为了防止发生一些奇怪的错误,请务必关闭所有节点的防火墙,他可能会导致浏览器无法获取集群信息和文件上传集群失败
2.hosts文件配置和主机名
因为这是完全分布式的集群,所以配置hosts文件至关重要,不然你的私钥配置和以后节点的格式化都会出错,他将会提示你无法解析主机名
具体的配置流程已在上面给出,请仔细配置
3.请在关闭所有HDFS服务后在执行-format格式化命令
如果存在节点未关闭,而你运行了格式化命令,这可能导致该节点与其他节点的目录ID不一致,从而导致“网络分区”问题
我们可以进去再配置文件设置的工作目录的位置去查看目录的ID信息,请务必保证所有节点的clusterID一致
并且在格式化前最好清空所有节点的工作目录
rm -rf /var/abc/hadoop/cluster
4.遇到问题我们可以查看hadoop下的日志信息,通过报出的错误我们可以更快的地位错误的位置
各个节点的日志信息会在启动集群时打印在终端上,我们可以去查看那些未能正常启动的节点的日志信息(.log文件)