HA---完全分布式Hadoop集群安装配置。。。

  1. Hadoop2.0 HDFS高可用架构
    1. 集群实现思路

 

 

上图是一个典型的HA集群,NameNode会被配置在两台独立的机器上,在任何时间上,一个NameNode处于活动状态,而另一个NameNode处于备份状态,活动状态的NameNode会响应集群中所有的客户端,备份状态的NameNode只是作为一个副本,保证在必要的时候提供一个快速的转移。

为了让Standby NodeActive Node保持同步,这两个Node都与一组称为JNS的互相独立的进程保持通信(Journal Nodes)。当Active Node上更新了namespace(元数据信息),它将记录修改日志发送给JNS的多数派。Standby noes将会从JNS中读取这些edits,并持续关注它们对日志的变更。Standby Node将日志变更应用在自己的namespace中,当failover发生时,Standby将会在提升自己为Active之前,确保能够从JNS中读取所有的edits,即在failover发生之前Standy持有的namespace应该与Active保持完全同步。

为了支持快速failoverStandby node持有集群中blocks的最新位置是非常必要的。为了达到这一目的,DataNodes上需要同时配置这两个Namenode的地址,同时和它们都建立心跳链接,并把block位置发送给它们。任何时刻,只有一个Active NameNode是非常重要的,否则将会导致集群操作的混乱,那么两个NameNode将会分别有两种不同的数据状态,可能会导致数据丢失,或者状态异常,这种情况通常称为“split-brain”(脑裂,三节点通讯阻断,即集群中不同的Datanodes却看到了两个Active NameNodes)。对于JNS而言,任何时候只允许一个NameNode作为writer;在failover期间,原来的Standby Node将会接管Active的所有职能,并负责向JNS写入日志记录,这就阻止了其他NameNode基于处于Active状态的问题。

    1. 集群环境准备

1.连接克隆6个虚拟机

2.关闭6个虚拟机的防火墙

3.通过xshell连好

4.配置每台虚拟机的主机名和hosts文件

5.配置免密码登录,

注意,内存至少一个1G

Hadoop集群环境预搭建步骤

安装步骤

  1. 永久关闭每台机器的防火墙

执行:service iptables stop

再次执行:chkconfig iptables off

  1. 为每台机器配置主机名以及hosts文件

配置主机名=》执行: vim  /etc/sysconfig/network =》然后执行  hostname  主机名=》达到不重启生效目的

说明:第一台机器,主机名是:hadoop01  第二台机器,主机名是:hadoop02,依次类推

配置hosts文件=》执行:vim /etc/hosts

示例:

127.0.0.1   localhost

::1         localhost

192.168.234.21 hadoop01

192.168.234.22 hadoop02

192.168.234.23 hadoop03

192.168.234.24 hadoop04

192.168.234.25 hadoop05

192.168.234.26 hadoop06

 

  1. 通过远程命令将配置好的hosts文件 scp到其他5台节点上

执行:scp  /etc/hosts  hadoop02: /etc

  1. 为每天机器配置ssh免秘钥登录

执行:ssh-keygen

  ssh-copy-id root@hadoop01 (分别发送到6台节点上,包括本机)

其他机器做同样操作。

  1. 把zookeeper安装包找到(先不用安)
    1. 具体安装配置步骤:
      1. 集群节点分配

hadoop01

Zookeeper 

NameNode (active)

Resourcemanager (active)

 

hadoop02

Zookeeper

NameNode (standby)

 

 

hadoop03

Zookeeper

ResourceManager (standby)

 

 

hadoop04

DataNode

NodeManager

JournalNode

 

hadoop05

DataNode

NodeManager

JournalNode

 

hadoop06

DataNode

NodeManager

JournalNode

 

      1. 具体安装步骤
        1. 永久关闭每台机器的防火墙

执行:service iptables stop

再次执行:chkconfig iptables off

 

        1. 为每台机器配置主机名以及hosts文件

配置主机名=》执行: vim  /etc/sysconfig/network =》然后执行  hostname  主机名=》达到不重启生效目的

配置hosts文件=》执行:vim /etc/hosts

 示例:

127.0.0.1   localhost

::1         localhost

192.168.80.21 hadoop01

192.168.80.22 hadoop02

192.168.80.23 hadoop03

192.168.80.24 hadoop04

192.168.80.25 hadoop05

192.168.80.26 hadoop06

 

  1. 通过远程命令将配置好的hosts文件 scp到其他5台节点上

执行:scp  /etc/hosts  root@hadoop02: /etc

 

        1. 为每台机器配置ssh免秘钥登录

6台机器上都需要执行:

执行:ssh-keygen      

  ssh-copy-id root@hadoop01 (分别发送到6台节点上)

        1. 为每台机器安装jdk和配置jdk环境(略) 
        2. 前三台机器安装和配置zookeeper

配置conf目录下的zoo.cfg以及创建myid文件

zookeeper集群安装具体步骤:

  1. 上传、解压tar -zxvf zookeeper-3.4.7.tar.gz
  2. Conf目录下拷贝配置文件:cp zoo_sample.cfg zoo.cfg
  3. 修改zoo.cfg:

dataDir=/usr/soft/zookeeper-3.4.7/tmp

server.1=192.168.80.21:2888:3888

server.2=192.168.80.22:2888:3888

server.3=192.168.80.23:2888:3888

  1. 创建tmp目录、创建myid文件并给予对应的值

 [root@hadoop01 zookeeper-3.4.7]# mkdir tmp

[root@hadoop01 zookeeper-3.4.7]# cd tmp

[root@hadoop01 tmp]# vim myid

  1. 将安装配置好的zookeeper拷贝到hadoop02hadoop03上一份,修改对应的myid即可。

[root@hadoop01 soft]# scp -r zookeeper-3.4.7/ root@hadoop02:/usr/soft

[root@hadoop01 soft]# scp -r zookeeper-3.4.7/ root@hadoop03:/usr/soft

 

[root@hadoop02 ~]# cd /usr/soft/zookeeper-3.4.7/tmp/

[root@hadoop02 tmp]# vim myid

 

[root@hadoop03 ~]# cd /usr/soft/zookeeper-3.4.7/tmp/

[root@hadoop03 tmp]# vim myid

 

        1. 安装和配置01节点的hadoop
  1. 上传解压
  2. 配置hadoop-env.sh

配置jdk安装所在目录

配置hadoop配置文件所在目录

 

 

  1. 配置core-site.xml

<configuration>

<!--用来指定hdfs的老大,ns为固定属性名,表示两个namenode-->

<property>

<name>fs.defaultFS</name>

<value>hdfs://ns</value>

</property>

<!--用来指定hadoop运行时产生文件的存放目录-->

<property>

<name>hadoop.tmp.dir</name>

<value>/usr/soft/hadoop-2.7.1/tmp</value>

</property>

<!--执行zookeeper地址-->

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

</property>

</configuration>

 

9.配置01节点的hdfs-site.xml

配置

<configuration>

<!--执行hdfsnameservicens,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>

<!--nn1RPC通信地址-->

<property>

<name>dfs.namenode.rpc-address.ns.nn1</name>

<value>hadoop01:9000</value>

</property>

<!--nn1http通信地址-->

<property>

<name>dfs.namenode.http-address.ns.nn1</name>

<value>hadoop01:50070</value>

</property>

<!--nn2RPC通信地址-->

<property>

<name>dfs.namenode.rpc-address.ns.nn2</name>

<value>hadoop02:9000</value>

</property>

<!--nn2http通信地址-->

<property>

<name>dfs.namenode.http-address.ns.nn2</name>

<value>hadoop02:50070</value>

</property>

<!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以从jn集群里获取

     最新的namenode的信息,达到热备的效果-->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns</value>

</property>

<!--指定JournalNode存放数据的位置-->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/usr/soft/hadoop-2.7.1/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:///usr/soft/hadoop-2.7.1/tmp/namenode</value>

</property>

<!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是

          core-site.xml里配置的hadoop.tmp.dir的路径-->

<property>

<name>dfs.datanode.data.dir</name>

<value>file:///usr/soft/hadoop-2.7.1/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>

 

10.配置mapred-site.xml

配置代码:

<configuration>

<property>

<!--指定mapreduce运行在yarn-->

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

11.配置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>

 

<!-- 配置rm1rm2的主机 -->

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>hadoop01</value>

</property>

 

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>hadoop03</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>hadoop01:2181,hadoop02:2181,hadoop03: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>hadoop01</value>

</property>

<property>

<!--NodeManager获取数据的方式-->

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

 

12.配置slaves文件

配置代码:

hadoop04

hadoop05

hadoop06

 

  1. 配置hadoop的环境变量(可不配)

[root@hadoop01 hadoop]# vim /etc/profile

 

JAVA_HOME=/usr/soft/jdk1.8

HADOOP_HOME=/usr/soft/hadoop-2.7.1

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export JAVA_HOME PATH CLASSPATH HADOOP_HOME

 

14.根据配置文件,创建相关的文件夹,用来存放对应数据

hadoop-2.7.1目录下创建:

①journal目录[root@hadoop01 hadoop-2.7.1]# mkdir journal

②创建tmp目录

③在tmp目录下,分别创建namenode目录和datanode目录

 [root@hadoop01 hadoop-2.7.1]# mkdir -p tmp/namenode tmp/datanode

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

比如向hadoop02节点传输:

[root@hadoop01 soft]# tar -zcvf hadoop-2.7.1.tar.gz hadoop-2.7.1/

[root@hadoop01 soft]# scp hadoop-2.7.1.tar.gz  hadoop02:/usr/soft/  hadoop-2.7.1.tar.gz

 然后分别取对应的机器上解压。

然后把/etc/profile 发往其他5台机器,别忘了每台机器执行:source /etc/profile

Hadoop集群启动

 

16.启动zookeeper集群

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

 

17.格式化zookeeper

zkleader节点上执行:

hdfs zkfc -formatZK,这个指令的作用是在zookeeper集群上生成ha节点(ns节点)

 

注:18--24步可以用一步来替代:进入hadoop安装目录的sbin目录,执行:start-dfs.sh 但建议还是按部就班来执行,比较可靠。

18.启动journalnode集群

040506(其中之一执行)节点上执行:

切换到hadoop安装目录的sbin目录下,执行:

sh hadoop-daemons.sh start journalnode

然后执行jps命令查看:

 

19.格式化01节点的namenode

01节点上执行:

hadoop namenode -format

20.启动01节点的namenode

01节点上执行:

hadoop-daemon.sh start namenode

21.02节点的 namenode节点变为standby namenode节点

02节点上执行:

hdfs namenode  -bootstrapStandby

22.启动02节点的namenode节点

02节点上执行:

hadoop-daemon.sh start namenode

23.04,05,06节点上启动datanode节点

04,05,06节点上执行: hadoop-daemon.sh start datanode

24.启动zkfc(启动FalioverControllerActive)

01,02节点上执行:

hadoop-daemon.sh start zkfc

25.01节点上启动 Resourcemanager

01节点上执行:start-yarn.sh

启动成功后,04,05,06节点上应该有nodemanager 的进程

26.03节点上启动副 Resoucemanager

03节点上执行:yarn-daemon.sh start resourcemanager

      1.  测试

输入地址:http://192.168.80.21:50070,查看namenode的信息,是active状态的

输入地址:http://192.168.80.22:50070,查看namenode的信息,是standby状态

然后停掉01节点的namenode,

 [root@hadoop01 hadoop]# hadoop-daemon.sh stop namenode

此时返现standbynamenode变为active

28.查看yarn的管理地址

http://192.168.80.21:8088(节点01的8088端口)

停掉:yarn-daemon.sh stop resourcemanager

查看23

http://192.168.80.23:8088(节点01的8088端口)

23停止,21上再次启动

启动:yarn-daemon.sh start resourcemanager

 http://192.168.80.21:8088(节点01的8088端口)

 

排错:

1.排查防火墙

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

3.主机名

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

5.排查zk的配置文件

6.排查hadoop的配置文件

猜你喜欢

转载自blog.csdn.net/tryll/article/details/86353590