HDFS完整集群搭建思路

节点 NN JNN DN ZKFC ZK
node01    
node02
node03    
node04      

 

 

 

 

 

 

说明:

  • JNN代替了伪分布式(单机)的SNN

 

流程

  1. 基础设施
    ssh免密(免密原因:)
                 1)启动start-dfs.sh脚本的机器需要将公钥分发给别的节点
                 2)在HA模式下,每一个NN身边会启动ZKFC,ZKFC会用免密的方式控制自己和其他NN节点的NN状态
  2. 应用搭建
    HA 依赖 ZK  搭建ZK集群
  3. hadoop的配置文件
  4. 初始化启动

 

具体操作流程

  • zk搭建流程
    	zookeeper 集群搭建  java语言开发  需要jdk  部署在node2,node3,node4
    		node02:
    			tar xf zook....tar.gz
    			mv zoo...    /opt/bigdata
    			cd /opt/bigdata/zoo....
    			cd conf
    			cp zoo_sample.cfg  zoo.cfg
    			vi zoo.cfg
    				datadir=/var/bigdata/hadoop/zk
    				server.1=node02:2888:3888
    				server.2=node03:2888:3888
    				server.3=node04:2888:3888
    			mkdir /var/bigdata/hadoop/zk
    			echo 1 >  /var/bigdata/hadoop/zk/myid 
    			vi /etc/profile
    				export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
    				export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
    			. /etc/profile
    			cd /opt/bigdata
    			scp -r ./zookeeper-3.4.6  node03:`pwd`
    			scp -r ./zookeeper-3.4.6  node04:`pwd`
    		node03:
    			mkdir /var/bigdata/hadoop/zk
    			echo 2 >  /var/bigdata/hadoop/zk/myid
    			*环境变量
    			. /etc/profile
    		node04:
    			mkdir /var/bigdata/hadoop/zk
    			echo 3 >  /var/bigdata/hadoop/zk/myid
    			*环境变量
    			. /etc/profile
    
    		node02~node04:
    			zkServer.sh start
       zkServer.sh status 查看主从

      说明: server.数字  数字就是权重, echo 数字 > /var/bigdata/hadoop/zk/myid  也是对应权重

  • 配置Hadoop
    1.配置hadoop的core和hdfs
        core-site.xml
            <property>
              <name>fs.defaultFS</name>
              <value>hdfs://mycluster</value>
            </property>
    
             <property>
               <name>ha.zookeeper.quorum</name>
               <value>node02:2181,node03:2181,node04:2181</value>
             </property>
    
        hdfs-site.xml

    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>/var/bigdata/hadoop/ha/dfs/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>/var/bigdata/hadoop/ha/dfs/data</value>
    </property>

    
            #以下是  一对多,逻辑到物理节点的映射
            <property>
              <name>dfs.nameservices</name>
              <value>mycluster</value>
            </property>
            <property>
              <name>dfs.ha.namenodes.mycluster</name>
              <value>nn1,nn2</value>
            </property>
            <property>
              <name>dfs.namenode.rpc-address.mycluster.nn1</name>
              <value>node01:8020</value>
            </property>
            <property>
              <name>dfs.namenode.rpc-address.mycluster.nn2</name>
              <value>node02:8020</value>
            </property>
            <property>
              <name>dfs.namenode.http-address.mycluster.nn1</name>
              <value>node01:50070</value>
            </property>
            <property>
              <name>dfs.namenode.http-address.mycluster.nn2</name>
              <value>node02:50070</value>
            </property>
    
            #以下是JN在哪里启动,数据存那个磁盘
            <property>
              <name>dfs.namenode.shared.edits.dir</name>
              <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
            </property>
            <property>
              <name>dfs.journalnode.edits.dir</name>
              <value>/var/bigdata/hadoop/ha/dfs/jn</value>
            </property>
            
            #HA角色切换的代理类和实现方法,我们用的ssh免密
            <property>
              <name>dfs.client.failover.proxy.provider.mycluster</name>
              <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
            </property>
            <property>
              <name>dfs.ha.fencing.methods</name>
              <value>sshfence</value>
            </property>
            <property>
              <name>dfs.ha.fencing.ssh.private-key-files</name>
              <value>/root/.ssh/id_dsa</value>
            </property>
            
            #开启自动化: 启动zkfc
             <property>
               <name>dfs.ha.automatic-failover.enabled</name>
               <value>true</value>
             </property>

    2.分发配置
    给每一台都分发
  • 初始化:(手动启动)
            1)先启动JN(三台)   hadoop-daemon.sh start journalnode 
            2)选择一个NN 做格式化:hdfs namenode -format   <只有第一次搭建做,以后不用做>
            3)node01: hadoop-daemon.sh start namenode 
            4)node02: hdfs namenode -bootstrapStandby
            5)格式化zk:   hdfs zkfc  -formatZK     <只有第一次搭建做,以后不用做>
            6) start-dfs.sh

     

使用验证

  • 去看jn的日志和目录变化
    目录:
    /opt/bigdata/hadoop-2.6.5/logs/hadoop-root-journalnode-ke03.log
  • node04
            zkCli.sh 
                ls /
                启动之后可以看到锁:
                get  /hadoop-ha/mycluster/ActiveStandbyElectorLock
  • 杀死namenode 杀死zkfc
            kill -9  xxx
            a)杀死active NN
            b)杀死active NN身边的zkfc
            c)shutdown activeNN 主机的网卡 : ifconfig eth0 down
                2节点一直阻塞降级,查看日志报错,node02一直是standby状态,node01访问不通
                如果恢复2上的网卡   ifconfig eth0 up  
                最终 1编程active 

     

注意点: 

  • 当某一环节起不来时排除点
  • 1.防火墙是否关闭
  • 2.时间是否同步
  • 3.如果前两个是后面环节发现,name需要关闭1.2,同时kill掉所有之前启动的进程。重新按照步骤操作、重新格式化
posted on 2020-12-03 01:12  陕西小楞娃  阅读(85)  评论(0编辑  收藏  举报