• HADOOP之HDFS环境搭建(三)


    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掉所有之前启动的进程。重新按照步骤操作、重新格式化
  • 相关阅读:
    Servlet 06: jar包引入和web配置文件创建
    Servlet 05: Servlet生命周期方法
    Servlet 04: 什么是重定向
    Servlet 03: 通过xml配置文件配置servlet访问路径
    080 面向过程编程
    079 内置函数
    078 匿名函数
    077 递归
    076 生成器
    075 字典生成式
  • 原文地址:https://www.cnblogs.com/bigdata-familyMeals/p/14077397.html
Copyright © 2020-2023  润新知