大数据第六课-Hadoop高可用(HA)集群安装

一、备份以前的全分布式集群

备份全分布式集群,复制一份

 二、安装Zookeeper(三台机器)

1、下载zookeeper

http://archive.cloudera.com/cdh5/cdh/5/

我们在这个网址下载我们使用的zk版本为zookeeper-3.4.5-cdh5.14.2.tar.gz

下载完成之后,上传到node01/kkb/soft路径下准备进行安装。

2、解压

node01执行以下命令解压zookeeper的压缩包到node01服务器的/kkb/install路径下去

cd /kkb/soft
tar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz -C /kkb/install/

3、修改配置文件

进入文件

cd /kkb/install/zookeeper-3.4.5-cdh5.14.2/conf
cp zoo_sample.cfg zoo.cfg
mkdir -p /kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas
vim zoo.cfg

修改配置

dataDir=/kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

4、添加myid配置

在第一台机器的/kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/

这个路径下创建一个文件,文件名为myid ,文件内容为1

echo 1 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid

5、分发配置

第一台机器上面执行以下两个命令
scp -r /kkb/install/zookeeper-3.4.5-cdh5.14.2/ node02:/kkb/install/
scp -r /kkb/install/zookeeper-3.4.5-cdh5.14.2/ node03:/kkb/install/

第二台机器上修改myid的值为2
直接在第二台机器任意路径执行以下命令
echo 2 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/myid
第三台机器上修改myid的值为3
直接在第三台机器任意路径执行以下命令
echo 3 > /kkb/install/zookeeper-3.4.5-cdh5.14.2/myid

6、配置环境变量

export ZOOKEEPER_HOME=/kkb/install/zookeeper-3.4.5-cdh5.14.2
export PATH=$ZOOKEEPER_HOME/bin:$PATH

最后 source /etc/profile

扫描二维码关注公众号,回复: 9907024 查看本文章

三、修改hadoop配置

主要修改四个文件:core-site.xml, hdfs-site.xml ,mapred-site.xml ,  yarn-site.xml

1、修改core-site.xml

    <!--指定zookeeper的地址-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node01:2181,node02:2181,node03:2181</value>
    </property>
    
    <!--指定namenode的nameservice名为hann-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hann</value>
    </property>

    <!-- 指定hadoop临时目录,这个要手动创建目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas</value>
    </property>

2、修改hdfs-site.xml

    <!--指定hdfs的nameservice为hann,需要和core-site.xml中的保持一致 -->
    <property>
        <name>dfs.nameservices</name>
        <value>hann</value>
    </property>
    
    <!-- hann下面有两个NameNode,分别是nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.hann</name>
        <value>nn1,nn2</value>
    </property>
    
    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.hann.nn1</name>
        <value>node01:8020</value>
    </property>
    
    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.hann.nn2</name>
        <value>node02:8020</value>
    </property>

    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.hann.nn1</name>
        <value>node01:50070</value>
    </property>
    
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.hann.nn2</name>
        <value>node02:50070</value>
    </property>

    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node01:8485;node02:8485;node03:8485/hann</value>
    </property>    

    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/kkb/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/jn</value>
    </property>

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

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

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

    <!--文件在HDFS中的备份数(小于等于namenode的数量)-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>

    <!--关闭HDFS的访问权限-->
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>

    <!-- 配置sshfence隔离机制超时时间(这个是网上看到的一个配置,培训机构没给) -->
    <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>30000</value>
    </property>

3、修改mapred-site.xml 

    <!--指定运行mapreduce的环境是yarn -->
    <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
    </property>
    <!-- MapReduce JobHistory Server IPC host:port -->
    <property>
            <name>mapreduce.jobhistory.address</name>
            <value>node03:10020</value>
    </property>
    <!-- MapReduce JobHistory Server Web UI host:port -->
    <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>node03:19888</value>
    </property>

4、修改 yarn-site.xml

    <!--开启resource manager HA,默认为false--> 
    <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
    </property>

    <!-- 集群的Id,使用该值确保RM不会做为其它集群的active -->
    <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>mycluster</value>
    </property>

    <!--配置resource manager  命名-->
    <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
    </property>

    <!-- 配置第一台机器的resourceManager -->
    <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>node03</value>
    </property>

    <!-- 配置第二台机器的resourceManager -->
    <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>node02</value>
    </property>

    <!-- 指定zk集群地址 -->
    <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>node01:2181,node02:2181,node03:2181</value>
            <description>For multiple zk services, separate them with comma</description>
    </property>

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

    <!-- 设置存储yarn中状态信息的地方,默认为hdfs,这里设置为zookeeper-->
    <property>
            <name>yarn.resourcemanager.store.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>

    <!-- 使在yarn上能够运行mapreduce_shuffle程序-->
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>

四、初始化启动操作

1、在三台机器上启动JournalNode

hadoop-daemon.sh start journalnode

2、在第一个NameNode上进行格式化

hadoop namenode -format

3、在第一个NameNode上启动NameNode

hadoop-daemon.sh start namenode

4、第二个namenode同步第一个namenode

hdfs namenode -bootstrapStandby

5、启动第二个namenode

hadoop-daemon.sh start namenode

6、启动zookeeper集群,并进行格式化

在三台机器上执行

zkServer.sh start

然后在node01上执行

hdfs zkfc -formatZK

7、关闭集群然后重启就好了。

五、一些有用的脚本

1、一键启动所有服务的脚本

先创建一个bin目录,添加hadoopHA.sh的文件

cd
mkdir bin
cd bin
vim hadoopHA.sh

然后添加以下内容

#!/bin/bash
case $1 in
"start" ){
  ssh node01 "source /etc/profile;start-dfs.sh"
  ssh node02 "source /etc/profile;start-yarn.sh"
  ssh node03 "source /etc/profile;mr-jobhistory-daemon.sh start historyserver"
};;
"stop"){
  ssh node01 "source /etc/profile;stop-dfs.sh"
  ssh node02 "source /etc/profile;stop-yarn.sh"
  ssh node03 "source /etc/profile;mr-jobhistory-daemon.sh stop historyserver"
};;
esac

然后更改文件的权限

chmod 777  hadoopHA.sh

2、查看所有机器进程的脚本

在bin目录下穿件xcall.sh文件

vim xcall.sh

添加以下内容

#!/bin/bash

params=$@
i=201
for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do
    echo ============= node0$i $params =============
    ssh node0$i "source /etc/profile;$params"
done

然后更改权限     chmod777 xcall.sh

3、两个脚本的使用

 4、在web界面查看效果

a、http://node01:50070/

b、http://node02:50070/

c、http://node02:8088/

d、http://node03:19888/

 

 

 

猜你喜欢

转载自www.cnblogs.com/tyh666/p/12513996.html