BigData~03:Hadoop05 ~ HA集群搭建

2018-07-26  本文已影响15人  帅可儿妞

Hadoop是一个环境敏感的框架,在Win和类Unix上安装的差别较大,但是一般我们都在Linux上进行安装,这里安装的版本为2.6.4,apache提供的hadoop-2.6.4的安装包是在32位操作系统编译的,因为hadoop依赖一些C++的本地库,所以如果在64位的操作上安装hadoop-2.6.4就需要重新在64操作系统上重新编译;

一、环境准备

二、集群安装规划

三、开始安装

  1. 安装ZooKeeper集群:
    • 解压tar.gz安装包:tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/apps
    • 修改配置:
      • 进入ZK的安装目录(后面简称:<ZK_HOME>)的conf文件夹:cp zoo_sample.cfg zoo.cfg
      • zoo.cfg文件最后添加
        1. 数据输出目录dataDir=<your-hdp-data-dir>,默认是在/tmp文件夹下,不安全,并确保这个文件夹存在;
        2. 节点间的关系,以及通讯接口:
          server.1=hdp5:2888:3888
          server.2=hdp6:2888:3888
          server.3=hdp7:2888:3888
          
      • 把配置好的hadoop安装目录拷贝到hdp6和hdp7:
        scp -r <ZK_HOME>/zookeeper-3.4.5/hdp6:<ZK_HOME>
        scp -r <ZK_HOME>/zookeeper-3.4.5/hdp7:<ZK_HOME>
        
      • 并把节点编号写入各自节点数据输出目录的myid目录,这里的节点编号分别是:1,2,3:
        echo <num> > <your-hdp-data-dir>/myid
        
  2. 安装Hadoop集群:
    • 解压hadoop-2.6.4.tar.gz
    • 配置环境变量,包括根路径(HADOOP_HOME)和bin;
    • 修改配置文件,这些配置文件全部位于<HADOOP_HOME>/etc/hadoop目录下:
      • 在hadoo-env.sh文件中添加JAVA_HOME
        export JAVA_HOME=<your-java-home>
        
      • 修改core-site.xml,在最后添加:
        <configuration>
            <property>
                <name>fs.defaultFS</name>
                <value>hdfs://ns/</value>
                <description>指定hdfs的nameservice为ns</description>
            </property>
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/hadoop/app/hdpdata/</value>
                <description>指定hadoop临时目录</description>
            </property>
            <property>
                <name>ha.zookeeper.quorum</name>
                <value>hdp5:2181,hdp6:2181,hdp7:2181</value>
                <description>指定zookeeper地址</description>
            </property>
        </configuration>
        
      • 修改hdfs-site.xml,在最后添加:
        <configuration>
            <property>
                <name>dfs.nameservices</name>
                <value>ns</value>
                <description>指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致</description>
            </property>
            <property>
                <name>dfs.ha.namenodes.ns</name>
                <value>nn1,nn2</value>
                <description>ns下面有两个NameNode,分别是nn1,nn2</description>
            </property>
            <property>
                <name>dfs.namenode.rpc-address.ns.nn1</name>
                <value>hdp1:9000</value>
                <description>nn1的RPC通信地址</description>
            </property>
            <property>
                <name>dfs.namenode.http-address.ns.nn1</name>
                <value>hdp1:50070</value>
                <description>nn1的http通信地址</description>
            </property>
            <property>
                <name>dfs.namenode.rpc-address.ns.nn2</name>
                <value>hdp2:9000</value>
                <description>nn2的RPC通信地址</description>
            </property>
            <property>
                <name>dfs.namenode.http-address.ns.nn2</name>
                <value>hdp2:50070</value>
                <description>nn2的http通信地址</description>
            </property>
            <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hdp5:8485;hdp6:8485;hdp7:8485/ns</value>
                <description>指定NameNode的edits元数据在JournalNode上的存放位置</description>
            </property>
            <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/home/hdp5/journaldata</value>
                <description>指定JournalNode在本地磁盘存放数据的位置</description>
            </property>
            <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
                <description>开启NameNode失败自动切换</description>
            </property>
            <property>
                <name>dfs.client.failover.proxy.provider.ns</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                <description>配置失败自动切换实现方式</description>
            </property>
            <property>
                <name>dfs.ha.fencing.methods</name>
                <value>
                sshfence
                shell(/bin/true)
                </value>
                <description>配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行</description>
            </property>
            <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/shreker/.ssh/id_rsa</value>
                <description>使用sshfence隔离机制时需要ssh免登陆</description>
            </property>
            <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
                <description>配置sshfence隔离机制超时时间</description>
            </property>
        </configuration>
        
      • 修改mapred-site.xml,在最后添加:
        <configuration>
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
                <description>指定MR资源调度框架为yarn</description>
            </property>
        </configuration>  
        
      • 修改yarn-site.xml,在最后添加:
        <configuration>
            <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
                <description>开启RM高可用</description>
            </property>
            <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>yrc</value>
                <description>指定RM的cluster id</description>
            </property>
            <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
                <description>指定RM的名字</description>
            </property>
            <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>hdp3</value>
                <description>指定RM的地址</description>
            </property>
            <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>hdp4</value>
                <description>指定RM的地址</description>
            </property>
            <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>hdp5:2181,hdp6:2181,hdp7:2181</value>
                <description>指定zk集群地址</description>
            </property>
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
                <description>指定服务名称</description>
            </property>
        </configuration>
        
      • 指定当前节点的子节点,修改slaves文件:
        hdp5
        hdp6
        hdp7
        
  3. 分发配置好的Hadoop到后面的机器:
    scp -r <local-hadoop-home-dir> <user>@<host>:<target-parent-dir>
    
  4. 启动集群
    • 在hdp5、hdp6、hdp7上启动zookeeper集群:
      zkServer.sh start
      
    • 在hdp5、hdp6、hdp7上启动JournalNode:
      hadoop-daemon.sh start journalnode
      
    • 分别在ns的nn1和nn2上初始化HDFS的NameNode,注意两个cluster-id必须一致,完成之后就会把元数据拷贝到对应的StandBy的机器上:
      hdfs namenode -format -clusterID <your-cluster-id>
      
    • 初始化ZKFC操作:
      hdfs zkfc -formatZK
      
    • 启动HDFS(根据规划在hdp1上执行):
      start-dfs.sh
      
    • 启动YARN(为了性能把NameNode和ResourceManager放在不同的机器上,选择hdp2):
      start-yarn.sh
      

四、验证测试

  1. 访问浏览器:http://hdp1:50070http://hdp2:50070
  2. 验证HA
    • 上传文件;
    • 浏览器访问,如1;
    • 干掉hdp1上Active的NameNode:kill -9 <nn-pid>
    • 浏览器访问,如1,发现hdp2上NameNode的状态已经切换为Active;
    • 启动刚才干掉的NameNode,状态切换为StandBy;

五、常用集群测试命令

  1. 查看hdfs的各节点状态信息
    hdfs dfsadmin -report
    
  2. 获取一个NameNode节点的HA状态
    hdfs haadmin -getServiceState nn1
    
  3. 单独启动一个NameNode进程
    hadoop-daemon.sh start namenode
    
  4. 单独启动一个zkfc进程
    hadoop-daemon.sh start zkfc
    
上一篇 下一篇

猜你喜欢

热点阅读