构建Hadoop HA 集群 hadoop 2.7.2 版本

本文档详细记录了如何使用4台虚拟机搭建Hadoop 2.7.2高可用(HA)集群,包括添加用户、修改hostname、SSH配置、JDK和Zookeeper安装、Hadoop配置以及集群启动和HA主备切换的步骤。
摘要由CSDN通过智能技术生成

向公司申请了4台虚拟机,搭建了一个测试hadoop集群.
Centos 7 64位操作系统
llc1 10.1.5.10
llc2 10.1.5.11
llc3 10.1.5.12
llcf 10.1.5.13

hadoop1 hadoop2 做namenode 主备

机器名 ip地址 安装软件 运行的进程
llc1 10.1.5.10 jdk hadoop zookeeper hbase
llc2 10.1.5.11 jdk hadoop zookeeper hbase
llc3 10.1.5.12 jdk hadoop zookeeper hbase
llcf 10.1.5.13 jdk hadoop hbase

1.添加hadoop用户
adduser -m hadoop -s /bin/bash
passwd hadoop
visudo
这样会打开/etc/sudoers 并进行编辑
hadoop ALL=(ALL) ALL

修改/data目录权限 所有者
sudo chown -R hadoop:hadoop /data

2.修改 hostname
vim /etc/hosts

3.ssh
参考我的另一篇文章 SHH免密码登录

安装JDK 安装目录在/data/hadoop1 参考非root用户安装JDK 在其他节点重复安装操作

安装zookeeper 安装目录 /data/hadoop1 参考zookeeper集群实践

安装hadoop
(1)解压缩
hadoop包解压缩到/data/hadoop1目录下
tar -zxvf hadoop-2.7.2.tar.gz
(2)修改环境变量
vi ~/.bashrc

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05
export ZOOKEEPER_HOME=/data/hadoop1/zookeeper-3.4.6
export HADOOP_HOME=/data/hadoop1/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

source ~/.bashrc
(3)修改配置文件
vim $HADOOP_HOME/etc/hadoop/slaves

llc1
llc2
llc3
llcf

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05

vim $HADOOP_HOME/etc/hadoop/yarn-env.sh

export JAVA_HOME=/data/hadoop1/jdk1.8.0_05

vim $HADOOP_HOME/etc/hadoop/core-site.xml

   <property> 
   <!-- 指定hdfs的nameservice为cluster  -->
        <name>fs.defaultFS</name>  
        <value>hdfs://cluster</value> 
   </property>
    <property> 
         <!-- 指定hadoop的tmp目录  -->
          <name>hadoop.tmp.dir</name> 
          <value>/data/hadoop1/hadoop-2.7.2/tmp/</value> 
    </property> 
    <property> 
      <!-- 指定zookeeper地址  -->
        <name>ha.zookeeper.quorum</name> 
        <value>llc1:2181,llc2:2181,llc3:2181</value> 
    </property>
    <property> 
           <name>dfs.ha.fencing.methods</name> 
           <value>sshfence</value> 
    </property>
    <property> 
           <name>dfs.ha.fencing.ssh.private-key-files</name> 
           <value>~/.ssh/id_rsa</value> 
    </property>

vim HADOOP_HOME/etc/hadoop/hdfs-site.xml

 <property> 
      <!-- 指定的hdfs的nameserice为cluster,与core-site.xml保持一致  -->
                <name>dfs.nameservices</name> 
                <value>cluster</value> 
        </property>
         <property>
        <!-- cluster下有两个NameNode分别是master1和master2 -->
                <name>dfs.ha.namenodes.cluster</name> 
                <value>hadoop0,hadoop1</value> 
        </property>
        <property> 
                 <!--  master1的RPC通信地址-->
                <name>dfs.namenode.rpc-address.cluster.hadoop0</name> 
                <value>llc1:8020</value> 
        </property> 
        <property> 
         <!--  master2的RPC通信地址-->
                <name>dfs.namenode.rpc-address.cluster.hadoop1</name> 
                <value>llc2:8020</value> 
        </property>
         <property> 
                  <!-- 监控网页 -->
                <name>dfs.namenode.http-address.cluster.hadoop0</name> 
                <value>llc1:50070</value> 
        </property> 
        <property> 
                <name>dfs.namenode.http-address.cluster.hadoop1</name> 
                <value>llc2:50070</value> 
        </property>
        <property> 
                         <name>dfs.namenode.servicerpc-address.cluster.hadoop0</name> 
                         <value>llc1:53333</value> 
                 </property> 
                 <property> 
                         <name>dfs.namenode.servicerpc-address.cluster.hadoop1</name> 
                         <value>llc2:53333</value> 
                 </property>
        <property> 
                <!-- 指定NameNode的元数据在JournalNode上的存储位置 -->
                                  <name>dfs.namenode.shared.edits.dir</name> 
                                  <value>qjournal://llc1:8485;llc2:8485;llc3:8485/cluster</value> 
                          </property> 
                          <property> 
                                  <name>dfs.client.failover.proxy.provider.cluster</name> 
                                  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> 
                          </property> 
         <property> 
                  <!-- 指定JournalNode在本地磁盘存放数据的位置  -->
                <name>dfs.journalnode.edits.dir</name> 
                <value>/data/hadoop1/hadoop-2.7.2/data/journal</value> 
        </property> 
        <property> 
         <!-- 备份数 -->
                <name>dfs.replication</name> 
                <value>3</value> 
        </property> 
        <property>   
                <name>dfs.namenode.name.dir</name>   
                <value>file:/data/hadoop1/hadoop-2.7.2/data/name</value>   
    </property>   
    <property>   <!--  -->
           <name>dfs.datanode.data.dir</name>   
            <value>file:/data/hadoop1/hadoop-2.7.2/data/data,/data/hadoop2/hadoop/data</value>   
    </property>   
    <property> <!-- 开启NameNode失败自动切换  -->
            <name>dfs.ha.automatic-failover.enabled</name> 
        <value>true</value> 
    </property> 
    <property>   
        <name>dfs.webhdfs.enabled</name>   
        <value>true</value> 
    </property>
     <property>  <!--注意这两个配置 不是所有节点都要开启的  在不需要的节点 不配置这两项就可以不启动-->
            <name>dfs.journalnode.http-address</name>   
            <value>0.0.0.0:8480</value>   
     </property>   
     <property>   
            <name>dfs.journalnode.rpc-address</name>   
            <value>0.0.0.0:8485</value>   
     </property> 
      <property>     
            <name>dfs.permissions</name>     
            <value>false</value>     
      </property> 

修改 HADOOP_HOME/etc/hadoop/mapred−site.xml

<property> <!--  指定mapreduce框架为yarn方式 -->
        <name>mapreduce.framework.name</name> 
        <value>yarn</value> 
    </property> 
  <property> 
            <name>mapreduce.jobtracker.address</name> 
              <value>llc1:50030</value> 
            </property>
              <property> 
                    <name>mapreduce.jobhistory.address</name> 
                      <value>llc1:10020</value> 
              </property> 
              <property> 
                        <name>mapreduce.jobhistory.webapp.address</name> 
                          <value>llc1:19888</value> 
 </property> 

修改$HADOOP_HOME/etc/hadoop/yarn-site.xml

<property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>llc1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>llc2</value>
    </property>
    <property> <!-- 指定resourcemanager的 clusterid ,master2中需要该成rm2-->
        <name>yarn.resourcemanager.ha.id</name>
        <value>rm1</value>
    </property>
    <property> <!-- 开启RM的高可靠-->
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property> 
    <property>   <!-- 开始NameNode失败自动切换-->
        <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property> 
        <name>yarn.resourcemanager.zk-address</name>
        <value>llc1:2181,llc2:2181,llc3:2181</value>
    </property>
    <property> 
          <name>yarn.resourcemanager.store.class</name> 
          <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 
    </property> 
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn</value>
    </property> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</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.resourcemanager.address.rm1</name>
       <value>${yarn.resourcemanager.hostname.rm1}:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8089</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm1</name>
        <value>${yarn.resourcemanager.hostname.rm1}:8033</value>
    </property>
    <property>
       <name>yarn.resourcemanager.address.rm2</name>
       <value>${yarn.resourcemanager.hostname.rm2}:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.https.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8089</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>${yarn.resourcemanager.hostname.rm2}:8033</value>
    </property>
 <property> 
    <name>yarn.web-proxy.address</name> 
      <value>llc1:8888</value> 
</property> 

8.启动hadoop集群
(1)启动zookeeper集群
zkServer.sh start
(1 1/2)格式化zkfc
目的是在ZooKeeper集群上建立HA的相应节点。
在master1机器上执行命令
hdfszkfcformatZK HADOOP_HOME/etc/hadoop/core-site.xml文件中ha.zookeeper.quorum的值来进行初始化。

(2) 启动journalnode
hadoop-daemons.sh start journalnode
(3) 格式化namenode
hdfs namenode -format
(4)启动namenode
hadoop-daemon.sh start namenode
(5).将刚才格式化的namenode信息同步到备用namenode上
在master2机器上执行命令
hdfs namenode -bootstrapStandby
(6)在master2上启动namenode
hadoop-daemon.sh start namenode
(7)启动所有datanode
在master1上执行命令
hadoop-daemons.sh start datanode
(8)启动yarn
在master1上执行命令
start-yarn.sh
(9)启动ZKFC
在master1和master2上启动zkfc
hadoop-daemon.sh start zkfc
会启动进程DFSZKFailoverController
(11) ha 主备切换
hdfs haadmin -failover hadoop1 hadoop0

YARN HA

备rm需要手动启动
启动,yarn-daemon.sh start resourcemanager
查看rm1 rm2 的状态
$ yarn rmadmin -getServiceState rm1
active

$ yarn rmadmin -getServiceState rm2
standby
使用如下的命令 可以将rm 手动切换到主备模式 但是如果已经开启了 rm自动切换 改命令将无效
yarn rmadmin -transitionToStandby rm1
访问http://hadoop0:8088/
展示的是active的页面
在备用机器上也启动resourcemanager.
访问http://haodoop1:8088/
展示的是standby的页面This is standby RM. Redirecting to the current active RM: http://trainingHadoop02:8088/cluster
然后会自动跳转到active的地址。
自动切换验证:
将active的机器的resourcemanager的进程kill掉。
standby的备用的机器变为active。

尝试了一下 把这个属性yarn.resourcemanager.ha.enabled 改成false yarn启动以后 没有active状态的 RM 需要用 yarn rmadmin -transitionToActive rm1 手动指定

安装hbase
另外发文补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值