Hadoop集群 HA的搭建

一、准备工作

准备大数据集群 (三台或者四台服务器,推荐4台)  由于电脑内存不足 本人测试的时候只搭建3台

三台服务器的主机名分别是:qyl01,qyl02,qyl03

对以上三台服务器需要做一下操作,这些准备都是为了将来搭建hadoop集群做准备的

1、修改各服务器的主机名

vim /etc/sysconfig/network 

2、配置各服务器的IP
3、配置各服务器的主机映射

vim /etc/hosts


4、添加hadoop用户,并且添加sudoer权限

添加用户 adduser username
加入密码 passwd username
修改用户权限 vim /etc/sudoers 


5、关闭防火墙/关闭selinux

查看防火墙状态: service iptales status
关闭防火墙: service iptables stop
开机自动关闭防火墙 : chkconfig --del ipables 或者 chkconfig ipables off
关闭selinux:修改/etc/selinux/config配置文件中的  SELINUX=disabled


6、更改系统启动级别为3

vim /etc/inittab


7、安装JDK

1、 上传 jdk-8u73-linux-x64.tar.gz
2、 解压到/usr/local 目录下tar -zxvf jdk-8u73-linux-x64.tar.gz -C /usr/local
3、 配置环境变量a) vi /etc/profileb) 在最后加入两行:export JAVA_HOME=/usr/local/jdk1.8.0_export PATH=$PATH:$JAVA_HOME/binc) 保存退出
4、 source /etc/profile5、 检测是否安装成功,输入命:java -version


8、三台服务器做时间同步

ntpdate ntp1.aliyun.com


9、三台服务器配置SSH 

1、输入命令 ssh-keygen   生产公钥文件

2、输入命令ssh-copy-id qyl02 发送公钥到qyl02中去

3、每个节点都操作一遍

二、搭建hadoop ha集群

1、集群的规划

  qyl01 qyl02 qyl03
hdfs namenode namenode  
  zkfc zkfc  
  datanode datanode datanode
  journalnode journalnode journalnode
yarn resourcemanager resouragemanage  
  nodemanager nodemanager nodemanager
zookeeper quorumpeermain quorumpeermain quorumpeermain

2、版本的选择

    1) hadoop版本的选择 : hadoop-2.7.6

    2)zookeeper版本的选择:3.4.10 (zookeeper的搭建在下篇文章进行介绍)

    3) jdk版本选择 : jdk1.8

3、具体步骤

一、上传安装包,并解压到相关目录

上传命令 :put F:/BaiduNetdiskDownload/hadoop-2.7.6.tar.gz
解压命令 : tar -zxvf hadoop-2.7.6.tar.gz -c /home/qyl/apps

二、修改配置文件

1、hadoop-env.sh
修改
  export JAVA_HOME=/home/qyl/apps/jdk1.8.0_73

2、core-site.xml
<!-- 指定 hdfs 的 访问入口  namenode的入口 这里的qyl2018  就相当于两个namenode的组名-->
      <property>
               <name>fs.defaultFS</name>
               <value>hdfs://qyl2018/</value>
      </property>
<!-- 指定 hadoop 数据存储目录 -->
       <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/data/hadoopdata/</value>
       </property>
<!-- 指定 zookeeper 集群访问地址 -->
       <property>
                <name>ha.zookeeper.quorum</name>
                <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
       </property>

3、hdfs-site.xml
<!-- 指定副本数 -->
        <property>
                   <name>dfs.replication</name>
                   <value>3</value>
        </property>

<!--指定 hdfs 两个namenode的 nameservice 为 bd1807,需要和 core-site.xml 中保持一致-->
        <property>
                  <name>dfs.nameservices</name>
                  <value>bd1807</value>
         </property>

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

<!-- nn1 的 RPC 通信地址 -->
        <property>
                 <name>dfs.namenode.rpc-address.qyl2018.nn1</name>
                 <value>qyl01:9000</value>
        </property>
<!-- nn1 的 http 通信地址  web -->
         <property>
                  <name>dfs.namenode.http-address.qyl2018.nn1</name>
                  <value>qyl0101:50070</value>
         </property>

<!-- nn2 的 RPC 通信地址 -->
        <property>
                 <name>dfs.namenode.rpc-address.qyl2018.nn2</name>
                 <value>qyl02:9000</value>
        </property>
<!-- nn2 的 http 通信地址 -->
         <property>
                  <name>dfs.namenode.http-address.qyl2018.nn2</name>
                   <value>qyl02:50070</value>
        </property>

<!-- 指定 NameNode 的 edits 元数据在 JournalNode 上的存放位置 端口8485-->
        <property>
                 <name>dfs.namenode.shared.edits.dir</name>
                 <value>qjournal://qyl01:8485;qyl02:8485;qyl03:8485/qyl2018</value>
        </property>

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

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

<!-- 配置失败自动切换实现方式 -->
<!-- 此处配置在安装的时候切记检查不要换行-->
        <property>
                 <name>dfs.client.failover.proxy.provider.bd1807</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/qyl/.ssh/id_rsa</value>
       </property>

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

4、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>qyl01</value>
         </property>
         <property>
                  <name>yarn.resourcemanager.hostname.rm2</name>
                    <value>qyl02</value>
         </property>
<!-- 指定 zk 集群地址 -->
          <property>
                   <name>yarn.resourcemanager.zk-address</name>
                   <value>qyl01:2181,qyl02:2181,qyl03:2181</value>
         </property>
<!-- 要运行 MapReduce 程序必须配置的附属服务 -->
         <property>
                   <name>yarn.nodemanager.aux-services</name>
                   <value>mapreduce_shuffle</value>
         </property>
<!-- 开启 YARN 集群的日志聚合功能 -->
         <property>
                   <name>yarn.log-aggregation-enable</name>
                   <value>true</value>
         </property>
<!-- YARN 集群的聚合日志最长保留时长 -->
          <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>

5、mapred-site.xml

<!-- 指定 mr 框架为 yarn 方式 -->
         <property>
                   <name>mapreduce.framework.name</name>
                   <value>yarn</value>
         </property>
<!-- 设置 mapreduce 的历史服务器地址和端口号 -->
         <property>
                  <name>mapreduce.jobhistory.address</name>
                  <value>qyl03:10020</value>
         </property>
          <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>qyl03:19888</value>

         </property>
6、slaves  
<!--指定从节点-->
qyl01
qyl02
qyl03


三、配置环境变量

vim /etc/profile

 

四、将hadoop的安装包远程发送到其他节点

scp -r hadoop-2.7.6 qyl02:/home/qyl/apps/
scp -r hadoop-2.7.6 qyl03:/home/qyl/apps/

 

五、开始启动集群

1、先启动journalnode

  qyl01   hadoop-daemon.sh start journalnode

  qyl02   hadoop-daemon.sh start journalnode

  qyl03   hadoop-daemon.sh start journalnode

2、格式化namenode 在一个namenode上执行格式化命令

 在qyl01上执行: hadoop namenode -format

3、将qyl01上的namenode的相关数据文件发送到另一个namenode节点上

   scp -r dfs qyl02:/home/qyl/data/hadoopdata/

4、先启动zookeeper(在每个节点上)

        zkServer.sh start

5、格式化zkfc 选择一个namenode的节点

  hdfs zkfc -formatZK

   成功的标志: successfully created /hadoop-ha/qyl2018 in ZK

6、启动集群

         启动hdfs 

                         start-dfs.sh     任意节点执行

          启动yarn

                          start-yarn.sh    最好在resourcemanager的节点上

         注意:

                  单独启动zkfc的命令

                              hadoop-daemon.sh start zkfc

六、hadoop ha集群的验证

 先验证hdfs的主备切换:
        namenode  2个
        http://qyl01:50070
        http://qyl02:50070
    yarn的测试
        http://qyl01:8088
        http://qyl02:8088
        mr   切换yarn的主节点
关机:
    先关闭集群:
        1)关闭hdfs
            stop-dfs.sh
        2)关闭yarn
            stop-yarn.sh
        3)关闭zk
            zkServer.sh stop
    再关机

注意:在集群启动时,查看网页有两个namenode的状态都为standby

可以使用一下命令进行切换成active

hadoop haadmin -transitionToActive --forcemanual nn1

       

   


 

猜你喜欢

转载自blog.csdn.net/weixin_43823423/article/details/85873510