hadoop2.7.5搭建高可用集群

本文目的:搭建hadoop的高可用集群

集群规划

hadoop2.7.5搭建高可用集群

hadoop2.7.5搭建高可用集群

 

1.下载 hadoop-2.7.5-centos-6.7.tar.gz 安装包

2.通过CRT软件上传到hadoop02号机器

3.解压软件到apps目录下

tar -zxvf hadoop-2.7.5-centos-6.7.tar.gz -C ~/apps/

4.修改hadoop-env.sh 配置文件

先查看jdk安装路径

echo $JAVA_HOME

 vim hadoop-env.sh 修改为下图所示

hadoop2.7.5搭建高可用集群

5.修改core-site.xml 配置文件

vim core-site.xml 为下面所示

<!-- 指定hdfs的nameservice为myha01 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://myha01/</value>
</property>


<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/data/hadoopdata/</value>
</property>


<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop02:2181,hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
</property>


<!-- hadoop链接zookeeper的超时时长设置 -->
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>1000</value>
<description>ms</description>

</property>

6.修改hdfs-site.xml配置文件

 vim hdfs-site.xml

为下图所示

<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>


<!-- 配置namenode和datanode的工作目录-数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/hadoopdata/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/hadoopdata/dfs/data</value>
</property>


<!-- 启用webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>


<!--指定hdfs的nameservice为myha01,需要和core-site.xml中的保持一致 
    dfs.ha.namenodes.[nameservice id]为在nameservice中的每一个NameNode设置唯一标示符。 
配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。 
例如,如果使用"myha01"作为nameservice ID,并且使用"nn1"和"nn2"作为NameNodes标示符 
-->
<property>
<name>dfs.nameservices</name>
<value>myha01</value>
</property>


<!-- myha01下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.myha01</name>
<value>nn1,nn2</value>
</property>


<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn1</name>
<value>hadoop02:9000</value>
</property>


<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn1</name>
<value>hadoop02:50070</value>
</property>


<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.myha01.nn2</name>
<value>hadoop03:9000</value>
</property>


<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.myha01.nn2</name>
<value>hadoop03:50070</value>
</property>


<!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表 
    该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId 
journalId推荐使用nameservice,默认端口号是:8485 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop02:8485;hadoop03:8485;hadoop04:8485/myha01</value>
</property>


<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/data/journaldata</value>
</property>


<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>


<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.myha01</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>


<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>


<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>


<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>


<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>

</property>

7.修改mapred-site配置文件

先复制一份并改名

cp mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

修改为为如下所示

<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<!-- 指定mapreduce jobhistory地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop02:10020</value>
</property>

<!-- 任务历史服务器的web地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop02:19888</value>

</property>

8.修改yarn-site.xml 配置文件

 vim yarn-site.xml 

如下所示

<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>


<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>


<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>


<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop04</value>
</property>


<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop05</value>
</property>


<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop02:2181,hadoop03:2181,hadoop04:2181</value>
</property>


<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>


<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>


<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>


<!-- 启用自动恢复 -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>


<!-- 制定resourcemanager的状态信息存储在zookeeper集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

9.修改slaves文件

vim slaves

为下所示

hadoop02

hadoop03

hadoop04

hadoop05

10.分发安装包

[[email protected] apps]$ scp -r hadoop-2.7.5/ hadoop05:$PWD

11.配置环境变量

    如果是root下安装则修改 vi /etc/profile  ; 如果是hadoop用户安装则修改  vi ~/.bashrc

    export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5

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

   修改好后,要求刷新(重新加载):source /etc/profile   或者 source .bashrc

12.务必按照下面的步骤一步一步来

    1、启动zookeeper

    zkServer.sh start

    jps查看QuorumPeerMain进程是否开启

    查看是否成功选举

    zkServer.sh status

 

    2、在你配置的各个journalnode节点启动该进程(这里我们是hadoop02,hadoop03,hadoop04)

hadoop-daemon.sh start journalnode

    jps查看JournalNode进程是否开启

    为了方便观察建议先删除zookeeper下的节点 rmr /xxxxx

 

    3、格式化namenode

先选取一个namenode(hadoop02)节点进行格式化

                选哪个都行,案例选择hadoop02

                 hadoop namenode -format

 

    4、要把在hadoop02节点上生成的元数据 给复制到 hadoop03上

[[email protected] data]$scp -r hadoopdata/ hadoop03:$PWD

                出现如下所示即为成功

VERSION                                                                               100%  206     0.2KB/s   00:00    
fsimage_0000000000000000000                                                           100%  322     0.3KB/s   00:00    
fsimage_0000000000000000000.md5                                                       100%   62     0.1KB/s   00:00    
seen_txid                                                                             100%    2     0.0KB/s   00:00    

    5、格式化zkfc

只能在nameonde节点进行(案例在hadoop02节点格式化)

[[email protected] data]$hdfs zkfc -formatZK

                出现下图即为成功

hadoop2.7.5搭建高可用集群

hadoop2.7.5搭建高可用集群

                到此为止。hadoop集群的初始化就OK 了

                以上的初始化在成功了之后,就坚决不能再做了。!!!!!

13.启动集群:

启动Hadoop HA 集群之前,一定要确保zk集群启动正常

 

启动HDFS :  start-dfs.sh    不管在哪个节点都OK(这里我们在hadoop02启动)

如果zkfc启动不起来:执行 hadoop-daemon.sh start zkfc

启动YARN集群:  start-yarn.sh   最好在YARN的主节点上执行(这里我们在hadoop04启动),另外一个resourcemanager必须手动启动(在hadoop05启动)

            yarn-daemon.sh start resourcemanager

hadoop05成功启动后为下图所示

hadoop2.7.5搭建高可用集群

启动历史服务器(在hadoop02机器):mr-jobhistory-daemon.sh start historyserver

hadoop2.7.5搭建高可用集群

14.检查web是否正常

http://hadoop02:50070

http://hadoop03:50070

http://hadoop04:8088

http://hadoop05:8088        ---->注意观察是否迅速变为http://hadoop04:8088,即为成功

http://hadoop02:19888

15.测试是否真的为高可用模式集群

1)轻量级测试:

先查看hadoop02的状态为active

hadoop2.7.5搭建高可用集群

先jps查看一下namenode进程,然后干掉

kill -9 3003

hadoop2.7.5搭建高可用集群

此时再去看hadoop03的状态已经切换为active了

hadoop2.7.5搭建高可用集群

然后我们在用守护进程脚本的单个命令,来启动hadoop02的namenode

hadoop-daemon.sh start namenode

此时hadoop02已经变成standby了。

hadoop2.7.5搭建高可用集群

2)重量级测试:

在hadoop02号机器(此时为standby状态)准备输入下面命令,

[[email protected] ~]$ hadoop fs -put hadoop-2.7.5-centos-6.7.tar.gz /

同时在hadoop03号机器准备好下面的命令,不要提交

jps先查看hadoop03的namenode进程

然后 准备 kill -9 2552

然后执行第一条命令在02机器上传大文件(预计要10秒,我们会在5秒的时候杀死03机器)

此时会在02机器报错。并且在..14 more 之后停顿一会,出现下面的状态

hadoop2.7.5搭建高可用集群

此时hadoop02为active状态。

hadoop2.7.5搭建高可用集群

接下来我们查看文件

看样子大小是对的。然后我们下载下来进行仔细校对

hadoop2.7.5搭建高可用集群

hadoop2.7.5搭建高可用集群

发现一模一样。

 

 

 

Hadoop HA 集群重装:


1、直接删掉所有的数据存储目录


journaldata    hadoopdata 


2、直接删掉zk中所有跟hadoop相关的信息


如果删不掉也没事, 再次初始化的时候会提醒 yes or no


yes

 

 

增加配置:(企业一定要改)修改hadoop-env.sh文件

hadoop2.7.5搭建高可用集群

namenode堆内存参数:

hadoop2.7.5搭建高可用集群

JVM垃圾回收器:

hadoop2.7.5搭建高可用集群