前期准备:
1.VM准备4台centenOs虚拟节点,主机名分别为:node01,:node02,node03,node04.
2.ssh免密登录,node01能ssh登录其他三台包括自己,node04能ssh登录自己和node01.
3.安装jdk1.7.配置环境变量。
具体搭建如下:
一.搭建zookeeper集群(node01,node02,node03)
1.1解压并在node01节点上在zookeeper安装目录下到conf目录下新建zoo.cfg,配置内容如下:
tickTime=2000
dataDir=/var/lib/zookeeper //zk数据存放目录
clientPort=2181
initLimit=5
syncLimit=2
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
1.2在node01,node02,node03上的/var/lib/zookeeper(对应上面配置的dataDir配置)新建myid文件,节点分别对应服务号;
例如:node01上的/var/lib/zookeeper的myid内容为1,以此类推。
1.3scp -r zookeeper-3.4.6/ root@node02:/home/,同理node03/
1.4检查集群时间是否一致,不一致修改集群各机器时间使一致。
date -s "2017-02-11 23:43:00"
1.5启动zookeeper集群:
在三台机器上执行zookeeper安装目录下的bin下的zkServer.sh start,
查看当前目录下的zookeeper.out日志文件若无报错则成功。
二.hadoopHA搭建
2.1解压tar -zxvf ***.tar.gz hadoop安装包
2.2 配置hadoop安装后的etc下的hadoop下的文件:
2.2.1vi hdfs-size.xml,内容如下:<configuration>
<property>
<name>dfs.nameservices</name>
<value>wt</value>
</property>
<property>
<name>dfs.ha.namenodes.wt</name>
<value>nn1,nn2</value>
</property>
<!--namenode:node01,node04-->
<!--RPC协议配置 -->
<property>
<name>dfs.namenode.rpc-address.wt.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.wt.nn2</name>
<value>node04:8020</value>
</property>
<!--HTTP协议配置 -->
<property>
<name>dfs.namenode.http-address.wt.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.wt.nn2</name>
<value>node04:50070</value>
</property>
<!--共享edits文件节点到uri ,node02,node03,node04-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node02:8485;node03:8485;node04:8485/aaa</value>
</property>
<!--帮助客户端获得active的namenode-->
<property>
<name>dfs.client.failover.proxy.provider.wt</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!--配置journalnode数据存放的目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journalnode</value>
</property>
<!--启用自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
2.2.2vi core-site,配置内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://wt</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.5</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node01:2181,node02:2181,node03:2181</value>
</property>
</configuration>
2.2.3vi slaves,datanode的主机名,配置内容如下:
node02
node03
node04
2.2.4将node01上节点的hadoop安装文件分发到其他节点
2.2.5在journalnode节点(node02,node03,node04)上分别启动命令如下:
hadoop-daemon.sh start journalnode
2.2.6随便在其中一台namenode上格式化,这里选node01:
hdfs namenode -format --初始化fsimage文件
2.2.7将node01上生成的/opt/hadoop-2.5拷贝到另外一台namenode节点node04上,在node04上执行:
scp -r root@node04:/opt/hadoop-2.5 /opt/
2.2.8在zookeeper中初始化HA,在其中一台namenode(node01)上执行格式化zookeeper命令:
hdfs zkfc -formatZK
2.2.9配置hadoop环境变量,并启动脚本start-dfs.sh
2.2.10去页面url:node01:50070;node05:50070
搭建中遇到的错误:
1.启动start-dfs.sh,报了如下错误:Could not resolve hostname try:Name or service not know,如图:
解决如下:
出现上述问题主要是环境变量没设置好,在~/.bash_profile或者/etc/profile中加入以下语句就没问题了。
#vi /etc/profile或者vi ~/.bash_profile
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
然后用source重新编译使之生效即可!
2.解决上述问题后启动start-dfs.sh仍然报错,如图:
解决如下:
修改hadoop-env.sh中设JAVA_HOME(绝对路径)
启动成功后如下: