zoukankan      html  css  js  c++  java
  • hadoop联邦模式的配置

    1.介绍
            对名字空间做负载均衡。不同的NN配置不同的空间。宏观上
            是一个整体。
            配置多个名称服务,在每个nameservice下使用HA方式配置。
    
        2.集群规划
            [ns1]
                nn1                //s101
                nn2                //s102
            [ns2]
                nn3                //s103
                nn4                //s104
    
        3.编写脚本,xssh-copy-id.sh
            3.1)在s101上编写脚本xssh-copy-id.sh
                #!/bin/bash
                ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
                for host in `cat /usr/local/bin/.hosts` ;
                do
                  tput setaf 2
                  echo ======== $host ========
                  tput setaf 7
                  ssh-copy-id $host
                done
    
        4.分别在s102,s103,s104执行以上脚本,完成ssh处理。
    
        4'.验证s101~s104能够无密登录到其他所有主机。
            ssh s106
    
        5.准备新的配置目录和本地临时目录
            在所有节点上执行该命令。
            $>xcall.sh "cp -r /soft/hadoop/etc/ha /soft/hadoop/etc/federation"
        
        6.修改hdfs-site.xml
            注意:该文件是s101和s102的配置文件
            <?xml version="1.0" encoding="UTF-8"?>
            <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
            <configuration>
                <property>
                        <name>dfs.nameservices</name>
                        <value>ns1,ns2</value>
                </property>
                <!-- **************ns1********************* -->
                <property>
                        <name>dfs.ha.namenodes.ns1</name>
                        <value>nn1,nn2</value>
                </property>
                <property>
                        <name>dfs.namenode.rpc-address.ns1.nn1</name>
                        <value>s101:8020</value>
                </property>
                <property>
                        <name>dfs.namenode.rpc-address.ns1.nn2</name>
                        <value>s102:8020</value>
                </property>
                <property>
                        <name>dfs.namenode.http-address.ns1.nn1</name>
                        <value>s101:50070</value>
                </property>
                <property>
                        <name>dfs.namenode.http-address.ns1.nn2</name>
                        <value>s102:50070</value>
                </property>
                <property>
                        <name>dfs.client.failover.proxy.provider.ns1</name>
                        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                </property>
                <!-- **************ns2********************* -->
                <property>
                        <name>dfs.ha.namenodes.ns2</name>
                        <value>nn3,nn4</value>
                </property>
                <property>
                        <name>dfs.namenode.rpc-address.ns2.nn3</name>
                        <value>s103:8020</value>
                </property>
                <property>
                        <name>dfs.namenode.rpc-address.ns2.nn4</name>
                        <value>s104:8020</value>
                </property>
                <property>
                        <name>dfs.namenode.http-address.ns2.nn3</name>
                        <value>s103:50070</value>
                </property>
                <property>
                        <name>dfs.namenode.http-address.ns2.nn4</name>
                        <value>s104:50070</value>
                </property>
                <property>
                        <name>dfs.client.failover.proxy.provider.ns2</name>
                        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                </property>
                <!--***********************************************-->
    
                <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <!-- ******************注意:后面的目录固定!!!********* -->
                        <!-- ******************注意:后面的目录固定!!!********* -->
                        <!-- ******************注意:后面的目录固定!!!********* -->
                        <!-- ******************注意:后面的目录固定!!!********* -->
                        <!-- ******************注意:后面的目录固定!!!********* -->
                        <value>qjournal://s102:8485;s103:8485;s104:8485/ns1</value>
                </property>
    
                <property>
                        <name>dfs.ha.fencing.methods</name>
                        <value>
                                sshfence
                                shell(/bin/true)
                        </value>
                </property>
                <property>
                        <name>dfs.ha.fencing.ssh.private-key-files</name>
                        <value>/home/centos/.ssh/id_rsa</value>
                </property>
    
                <property>
                        <name>dfs.ha.automatic-failover.enabled</name>
                        <value>true</value>
                </property>
                <property>
                        <name>dfs.replication</name>
                        <value>3</value>
                </property>
            </configuration>
        
        7.分发hdfs-site.xml文件
            $>xsync.sh hdfs-site.xml
        
        8.修改s103和s104上的hdfs-site.xml
            ...
            <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://s102:8485;s103:8485;s104:8485/ns2</value>
            </property>
            ...
    
        9.修改s101的core-site.xml文件
            <?xml version="1.0"?>
            <configuration xmlns:xi="http://www.w3.org/2001/XInclude"> 
                <xi:include href="mountTable.xml" />
                <property>
                        <name>fs.defaultFS</name>
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <value>viewfs://ClusterX</value>
                </property>
                <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/home/centos/hadoop/federation/journalnode</value>
                </property>
                <property>
                         <name>hadoop.tmp.dir</name>
                        <value>/home/centos/hadoop/federation</value>
                </property>
                <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>s102:2181,s103:2181,s104:2181</value>
                </property>
            </configuration>
    
        10.分发core-site.xml
            $>xsync.sh core-site.xml
    
        11.mountTable.xml文件。
            [etc/federation/mountTable.xml]
            <configuration>
                <property>
                    <name>fs.viewfs.mounttable.ClusterX.homedir</name>
                    <value>/home</value>
                </property>
                <property>
                    <name>fs.viewfs.mounttable.ClusterX.link./home</name>
                    <value>hdfs://ns1/home</value>
                </property>
                <property>
                    <name>fs.viewfs.mounttable.ClusterX.link./tmp</name>
                    <value>hdfs://ns2/tmp</value>
                </property>
                <property>
                    <name>fs.viewfs.mounttable.ClusterX.link./projects/foo</name>
                    <value>hdfs://ns1/projects/foo</value>
                </property>
                <property>
                    <name>fs.viewfs.mounttable.ClusterX.link./projects/bar</name>
                    <value>hdfs://ns2/projects/bar</value>
                </property>
            </configuration>
        
        12.分发mount.xml
            $>xsync.sh mount.xml
        
        13.修改core-site.xml
            <?xml version="1.0"?>
            <configuration xmlns:xi="http://www.w3.org/2001/XInclude"> 
                <xi:include href="mountTable.xml" />
                <property>
                        <name>fs.defaultFS</name>
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <!--**** 名称一定要和挂载表的名称一致 *****-->
                        <value>viewfs://ClusterX</value>
                </property>
                <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/home/centos/hadoop/federation/journalnode</value>
                </property>
                <property>
                         <name>hadoop.tmp.dir</name>
                        <value>/home/centos/hadoop/federation</value>
                </property>
                <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>s102:2181,s103:2181,s104:2181</value>
                </property>
            </configuration>
    
        14.再次分发core-site.xml
            略
        
        15.修改软连接
            $>xcall.sh "ln -sfT /soft/hadoop/etc/federation /soft/hadoop/etc/hadoop"
    
        15.格式化文件系统
            15.0)启动JN节点
                [s102 ~ s104]
                $>hadoop-daemon.sh start journalnode
    
            15.1)格式化s101的文件系统
                $>登录s101
                $>hdfs namenode -format
            
            15.2)复制s101的本地临时目录到s102上
                $>scp -r federation centos@s102:/home/centos/hadoop/
            
            15.3)启动s101名称节点
                $>hadoop-daemon.sh start namenode
            
            15.4)s102引导standby节点,提示是否重格,选择N.
                $>hdfs namenode -bootstrapStandby
    
            15.5)s102初始化JN , 提示是否重格,选择N.
                $>hdfs namenode -initializeSharedEdits
    
            15.5')s102格式化zk,提示清除zk的容灾数据,选择Y.
                $>hdfs zkfc -formatZK
    
            15.6)启动s102 NN
                $>hadoop-daemon.sh start namenode
    
            15.7)格式化s103,提示重复重格,选择Y,提示QJM是否重格,选择Y。
                注意:clusterID是格式化ns1时,所产生的集群id,位于/home/centos/hadoop/federation/dfs/name/current/VERSION中。
                $>hdfs namenode -format -clusterId CID-72566e0e-7978-4be8-99d8-eda9a8897081
    
            15.8)复制s103的本地目录到s104,引导和初始化
                $>登录s104
                //复制
                $>scp -r centos@s103:/home/centos/hadoop/federation/dfs/* /home/centos/hadoop/federation/dfs/
    
                //启动s103的NN
                $>hadoop-daemon.sh start namenode
    
                //s104引导standby节点
                $>hdfs namenode -bootstrapStandby
    
                //s104初始化JN
                $>hdfs namenode -initializeSharedEdits
    
                //是104格式化zk,是否清除ns2的数据,选择Y。
                $>hdfs zkfc -formatZK
    
            15.8)s101启动所有数据节点
                $>hadoop-daemons.sh start datanode
    
            
            15.8').自动namenode上的zkfc
                s101 ~ s104分别启动zkfc
                    hadoop-daemon.sh start zkfc
    
            15.9)自动选出active节点
                
            15.10)查看webui
                http://s101:50070
                http://s102:50070
                http://s103:50070
                http://s104:50070
    
            15.11)hdfs访问
                //根据挂载表进行操作
                $>hdfs dfs -mkdir -p viewfs://ClusterX/home/data            //s101
                $>hdfs dfs -mkdir -p viewfs://ClusterX/tmp/data                //s101
                $>hdfs dfs -mkdir -put 1.txt /tmp/data                        //s101
                $>hdfs dfs -mkdir -get /home/data/1.txt
    
                //1.复制配置文件,core-site.xml + mountTable.xml + hdfs-site.xml
                //2.编程API
                    public class TestFederation {
                        @Test
                        public void testGet() throws Exception {
                            Configuration conf = new Configuration();
                            FileSystem fs = FileSystem.get(conf) ;
                            FSDataInputStream in = fs.open(new Path("/home/data/1.txt"));
                            ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
                            IOUtils.copyBytes(in,baos , 1024);
                            baos.close();
                            in.close();
                            System.out.println(new String(baos.toByteArray()));
                        }
                    }
  • 相关阅读:
    C++中的static关键字的总结
    2017上海C++面试
    Vim 跳到上次光标位置
    Windows XP Professional产品序列号
    Centos7 安装sz,rz命令
    Xshell里连接VirtualBox里的Centos7
    什么是位、字节、字、KB、MB
    Centos7 tmux1.6 安装
    Centos7 在 Xshell里 vim的配置
    对JDBC的轻量级封装,Hibernate框架
  • 原文地址:https://www.cnblogs.com/zyde/p/8986683.html
Copyright © 2011-2022 走看看