linux centos7 从零搭建Hadoop+zookeeper高可用集群(六台虚拟机)详细

创建六台linux centos7(redhat)虚拟机,起名分别为hadoop001,hadoop002,hadoop003,hadoop004,hadoop005,hadoop006

创建用户hadoop,设置为sudo用户。

1、关闭防火墙

2、配置主机名

3、配置hosts

4、配置密码互通

5、安装jdk1.8

6、安装hadoop

以上参看hadoop单节点安装(注意六台机器都要分别配置)
https://blog.csdn.net/starkpan/article/details/85470433

7、搭建zookeeper集群

参看zookeeper集群搭建
https://blog.csdn.net/starkpan/article/details/85562113

8、配置hadoop001

(1)修改hadoop-env.sh

通过vim打开
    vim [hadoop]/etc/hadoop/hadoop-env.sh
主要是修改java_home的路径,在hadoop-env.sh的第27行,把export JAVA_HOME=${JAVA_HOME}修改成具体的路径。
    export JAVA_HOME=/home/root/app/jdk1.8.0_181
重新加载使修改生效
    source hadoop-env.sh

(2)配置hdfs-site.xml

<configuration>
<!--执行hdfs的nameservice为ns,和core-site.xml保持一致-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!--ns下有两个namenode,分别是nn1,nn2-->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hadoop001:9000</value>
</property>
<!--nn1的http通信地址-->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hadoop001:50070</value>
</property>
<!--nn2的RPC通信地址-->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hadoop002:9000</value>
</property>
<!--nn2的http通信地址-->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hadoop002:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以从jn集群里获取
     最新的namenode的信息,达到热备的效果-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop004:8485;hadoop005:8485;hadoop006:8485/ns</value>
</property>
<!--指定JournalNode存放数据的位置-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/journal</value>
</property>
<!--开启namenode故障时自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--配置切换的实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔离机制-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--配置隔离机制的ssh登录秘钥所在的位置-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
 
<!--配置namenode数据存放的位置,可以不配置,如果不配置,默认用的是
     core-site.xml里配置的hadoop.tmp.dir的路径-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/app/hadoop-2.6.0-cdh5.7.0/tmp/namenode</value>
</property>
<!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是
          core-site.xml里配置的hadoop.tmp.dir的路径-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/app/hadoop-2.6.0-cdh5.7.0/tmp/datanode</value>
</property>
 
<!--配置block副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
 
</configuration>

(3)配置mapred-site.xml

说明:在/etc/hadoop的目录下,只有一个mapred-site.xml.template文件,复制一个
    cp mapred-site.xml.template mapred-site.xml
通过vim打开
    vim [hadoop]/etc/hadoop/mapred-site.xml
配置mapreduce运行在yarn上
<configuration>
<property>  
    <!--指定mapreduce运行在yarn上-->
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
</configuration>

(4)配置yarn-site.xml

配置代码:
<configuration>
 <!-- 开启YARN HA --> 
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
 
  <!-- 指定两个resourcemanager的名称 --> 
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
 
<!-- 配置rm1,rm2的主机 --> 
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop001</value>
</property>
 
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop003</value>
</property>
 
<!--开启yarn恢复机制-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
 
<!--执行rm恢复机制实现类-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
 
<!-- 配置zookeeper的地址 -->  
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value>
<description>For multiple zk services, separate them with comma</description>
</property>
 
<!-- 指定YARN HA的名称 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property>
 
<property>
<!--指定yarn的老大 resoucemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop001</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

(5)配置slaves文件

hadoop04
hadoop05
hadoop06

9、在创建对应的文件夹

cd /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/
mkdir journal
mkdir tmp
cd tmp
mkdir -p tmp/namenode tmp/datanode

10、通过scp 命令,将hadoop安装目录远程copy到其他5台机器上

#把一个文件夹,完全拷贝到另一台机器
scp -r /home/hadoop/app/hadoop-2.6.0-cdh5.7.0 [email protected]:/home/hadoop/app

或者
先压缩
tar -zcvf hadoop-2.6.0-cdh5.7.0.tar.gz hadoop-2.6.0-cdh5.7.0/
scp hadoop-2.6.0-cdh5.7.0.tar.gz  [email protected]:/home/hadoop/sft/
在不同的机器解压

以上配置完成

Hadoop集群启动:

11、启动zookeeper集群(分别在hadoop001,hadoop002,hadoop003执行以下命令)

在Zookeeper安装目录的bin目录下执行:
sh zkServer.sh start

12、格式化zookeeper

在zk的leader节点上执行:
hdfs zkfc -formatZK

这个指令的作用是在zookeeper集群上生成ha节点(ns节点)
查看节点状态
zkServer.sh status

13、启动journalnode集群

    在004、005、006节点上执行:
    切换到hadoop安装目录的sbin目录下,执行:

sh hadoop-daemons.sh start journalnode

14、格式化001节点的namenode,在001节点上执行:

hadoop namenode -format

15、启动001节点的namenode

hadoop-daemon.sh start namenode

16、把002节点的 namenode节点变为standby namenode节点, 在002节点上执行:

hdfs namenode  -bootstrapStandby

17、启动002节点的namenode节点,在002节点上执行:

hadoop-daemon.sh start namenode

18、在004,005,006节点上启动datanode节点

hadoop-daemon.sh start datanode

19、启动zkfc(启动FalioverControllerActive),在001,002节点上执行:

hadoop-daemon.sh start zkfc

20、在001节点上启动 主ResourceManager

start-yarn.sh

启动成功后,004,005,006节点上应该有nodemanager 的进程

21、在003节点上启动副 ResouceManager

yarn-daemon.sh start resourcemanager

以上启动完成

22、查看hadoop Namenode网址

http://[hadoop001的ip]:50070,查看namenode的信息,是active状态的

http://[hadoop002的ip]:50070,查看namenode的信息,是standby状态的

关闭hadoop001 namenode,在001节点执行

hadoop-daemon.sh stop namenode

观察网站namenode变化(001无法访问,002变为active)

23、查看yarn的管理地址(001正常,003跳转001)

http://[hadoop001的ip]:8088(节点01的8088端口)
http://[hadoop003的ip]:8088(节点03的8088端口)

停掉hadoop001的resourcemanager

yarn-daemon.sh stop resourcemanager

观察两个网址变化(001跳转003,003正常)

排错:

1.排查防火墙

2.排查ip,如果不是固定ip的话,要看下ip是否被更换

3.主机名

4.hosts  ip和主机名是否对应上

5.排查zk的配置文件

6.排查hadoop的配置文件

猜你喜欢

转载自blog.csdn.net/starkpan/article/details/85542955