HDFS—>運維篇

1、增長節點

  1. 操做系統配置:① 主機名、網絡、防火牆、ssh配置
    ssh-keygen -t rsa
    同時能夠把集羣中任意一臺節點的ssh的auth*-keys文件分發到最新的這個節點
  2. 在全部節點的/etc/hosts 文件中添加該節點的域名映射
  3. 把namenode的相關配置文件複製到該節點
    經過 tar cf 將jdk打包並跟hadoop目錄一塊兒經過scp傳輸過去
    將環境變量文件也scp過來,好比JAVA_HOME、HADOOP_HOME的路徑
  4. 修改全部master節點的slaves文件,增長該節點。不須要刷新slaves文件
  5. 單獨啓動該節點上的datanode和nodemanager
    hadoop-daemon.sh start datanode
    yarn-daemon.sh start nodemanager
    啓動完後經過hdfs dfsadmin -repor檢查集羣的狀態
    yarm rmadmin
  6. 進行數據負載均衡(避免都往這個節點寫數據致使數據熱點)
    ① 這個操做盡可能在datanode節點執行
    ② 執行前最好限制balance的帶寬且指定幾臺服務器
    運行 start-balancer.sh -threshold 5(單個節點的使用率跟平均節點使用率的差值)
  7. 調整節點的副本數(可選)
    調整hdfs-site.xml文件裏面的dfs.replication的值進行調整
    經過hdfs fsck / 來掃描確認文件是否正常
    進行調整後的副本數僅對後來添加的文件產生做用
    也可經過hdfs dfs -setrep -w 3 -R /lin (副本數可大於節點數,不要對根目錄進行該操做)

2、節點下線

節點硬件故障或者任務運行在該節點比較吃力java

下線前要先確保沒有任務在運行,不然會下線得特別慢node

  1. 修改Master節點的hdfs-site.xml配置,增長dfs.hosts.exclude參數
  2. 修改Master節點的yarn-site.xml配置,增長
    yarn.resourcemanager.nodes.exclude-path參數
  3. 修改Master節點的mapred-site.xml配置,增長
    mapreduce.jobtracker.hosts.exclude.filename參數
  4. 新建excludes文件,添加須要刪除的主機名(前面三個參數都指向這個地址)
  5. 執行refreshNodes讓配置生效
    hdfs dfsadmin -refreshNodes
    yarn rmadmin -refreshNodes

3、Federation

背景:存在單個Namenode負載過大的問題apache

分配
避免相互干擾bootstrap

  • 單獨分配一個Namenode去管理HBase的目錄
  • 單獨分配一個Namenode去管理數據倉庫Hive的目錄
  • 其餘的按照業務或者部門進行分配管理多個Namenode

配置步驟服務器

  1. core-site.xml網絡

    • 使用viewfs協議配置Federation集羣堆外提供服務的NS邏輯名稱
    • 修改core-site.xml配置負載均衡

      添加配置指向cmt.xml  
      <configuration  xmlns:xi="http://www.w3.org/2001/XInclude">
        <xi:include  href="cmt.xml"/>
        <property>
          <name>fs.defaultFS</name>
          <value>viewfs://nsX</value>
        </property>
      
        <property>
          <name>hadoop.tmp.dir</name>
          <value>$HADOOP_HOME/tmp</value>
        </property>
      
        <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>$HADOOP_HOME/journalnode/data</value>
        </property>
      
        <property>
          <name>ha.zookeeper.quorum</name>
          <value>slave1:2181,slave2:2181,hadoop04:2181</value>
        </property>
      </configuration>
  2. cmt.xml
    配置虛擬路徑和物理路徑的映射關係運維

    //將集羣中的/view_ns1目錄掛載到namenode1中的根目錄
    //也就是說以後/view_ns1下文件的操做都僅跟namenode1有關
    <property>
      <name>fs.viewfs.mounttable.nsX.link./view_ns1</name>
      <value>hdfs://ns1/</value>    // 按照規劃master就是namenode1
    </property>
    
    <property>
      <name>fs.viewfs.mounttable.nsX.link./view_ns2</name>
      <value>hdfs://ns2/</value>     // 按照規劃master就是namenode2
    </property>
  3. hdfs-site.xml
    配置兩個命名服務以及rpc、http服務地址ssh

    <property>
      <name>dfs.nameservices</name>
      <value>ns1,ns2</value>
    </property>
    
    ## 配置nameservice1的ha
    <property>
      <name>dfs.ha.namenodes.ns1</name>
      <value>nn1,nn2</value>
    </property>
    
    ## 配置nameservice2的ha
    <property>
      <name>dfs.ha.namenodes.ns2</name>
      <value>nn3,nn4</value>
    </property>
    
    ## 配置這四個namenode的RPC通訊端口
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn1</name>
      <value>master:9000</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.ns2.nn3</name>
      <value>slave1:9000</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.ns1.nn2</name>
      <value>hadoop04:9000</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.ns2.nn4</name>
      <value>slave2:9000</value>
    </property>
    
    ## 配置這四個namenode的HTTP通訊端口
    <property>
      <name>dfs.namenode.http-address.ns1.nn1</name>
      <value>master:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.ns2.nn3</name>
      <value>slave1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.ns1.nn2</name>
      <value>hadoop04:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.ns2.nn4</name>
      <value>slave2:50070</value>
    </property>
    
    ## 配置四個namenode的編輯日誌存放地址
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      ## ns1的nn1和nn2用這個值
      <value>qjournal://hadoop04:8485;slave1:8485;slave2:8485/ns1</value>
      ## ns2的nn3和nn4用這個值
      <value>qjournal://hadoop04:8485;slave1:8485;slave2:8485/ns2</value>
    </property>    
    
    ## 配置錯誤恢復
    <property>
      <name>dfs.client.failover.proxy.provider.ns1</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfigureFailoverProxyProvider</value>
    </property>
    <property>
      <name>dfs.client.failover.proxy.provider.ns2</name>
     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfigureFailoverProxyProvider</value>
    </property>
    
    ## 配置ha的fence
     <property>
      <name>dfs.ha.fencing.methods</name>
      <value>sshfence</value>
    </property>
     <property>
      <name>dfs.ha.fencing.ssh.private-key-files</name>
      <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
     <property>
      <name>dfs.ha.fencing.ssh.connect-timeout</name>
      <value>30000</value>
    </property>
     <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
  4. 建立相應的物理路徑
  5. 啓動服務ide

    • 同步 etc/hadoop下全部的配置文件到全部的Namenode上
    • 每一個Namenode都須要單獨格式化而且格式化的時候須要指定同一個集羣id
      hdfs namenode -format -clusterid hd260
    • 格式化zookeeper
      在全部namenode的節點執行這個指令
      hdfs zkfc -formatZK
    • 格式化journalnode節點
      hdfs namenode -initializeSharedEdits
    • 指定從服務器
      如今多個master主服務器單獨啓動namenode,而後在全部從服務器執行指令
      hdfs namenode -bootstrapStandby
  6. 訪問hdfs

    • 直接經過 hfds dfs -ls /
    • 指定namenode訪問: hdfs dfs -ls hdfs://slave1:9000/

4、特色

  1. which java/which hadoop 查看這些安裝目錄
  2. du -ms * du -h0 free
  3. yarn rmadmin -refreshNodes 來刷新節點???
  4. hdfs dfs -ls -R /lin 能夠遞歸列舉出該目錄下全部文件
  5. 經過 hdfs dfsadmin -repor 檢查集羣節點狀態

    hdfs  fsck /  檢查文件是否都正常
  6. 指定中止哪幾臺hdfs服務
    順序執行
    hadoop-daemons.sh --hostnames 'slave1 slave2' stop datanode
    hadoop-daemons.sh --hostnames 'master hdoop04' stop namenode
    hadoop-daemons.sh --hostnames 'slave1 slave2 hdoop04' stop journalnode
    hadoop-daemon.sh stop zkfc

    啓動
    hadoop-daemons.sh --hostnames 'slave1 slave2' start namenode
    hadoop-daemons.sh start datanode //默認是啓動全部的

    hadoop-daemons.sh --hostnames 'slave1 slave2 slave*' start zkfc

5、小結

將hadoop經常使用的運維操做記錄下來,方便從此的維護工做

相關文章
相關標籤/搜索