Hadoop學習--HA配置(不含zookeeper)--day05

1.HA配置java

(1).high availability,高可用node

       持續服務的能力web

       多臺主機之間進行集羣配置shell

(2).failover,容災apache

(3).namenode  , 2nnbootstrap

    secondary namenode解決的可靠性問題ubuntu

(4).single point of failure(SPOF),單點故障數組

    nn1+nn2網絡

(5).NFS(Network file System,共享存儲設備EMC)  +QJM架構

(6).HA架構

   兩臺主機,一臺active,另一臺standby,active nn複製客戶端全部操做.

   standby維護足夠多的狀態,隨時提供容災服務.

   Journal是單獨的進程,用於active nn和standby nn之間的同步信息.

   active nn的ns修改動做寫入到jns,standby nn從jn讀取edit,須要不斷觀察log的變化

   一旦log發生變化,standby就會同步到本身的namespace.

   datanode同時向兩個nn發送塊列表信息以及心跳.

   同一時刻只能有一個active nn,若是兩個都是active的namenode,叫作「腦裂」.


2.部署HA配置解析

    一共有8臺機器

    hadoop01  192.168.0.11  namenode  jouralnode resourcemanager

    hadoop02  192.168.0.12  datanode  nodemanager

    hadoop03  192.168.0.13  datanode  nodemanager

    hadoop04  192.168.0.14  datanode  nodemanager

    hadoop05  192.168.0.15  datanode  nodemanager

    hadoop06  192.168.0.16  datanode  nodemanager

    hadoop07  192.168.0.17  secondarynamenode jouralnode 

    hadoop08  192.168.0.18  namenode  jouralnode

(1).在hdfs-site.xml中配置名稱服務:dfs.nameservices

           名稱服務的邏輯名

    <property>

      <name>dfs.nameservices</name>

      <value>mycluster</value>

    </property>       

(2).配置nameservice中每一個namenode

    dfs.ha.namenodes.[nameservice  ID]

    <property>

      <name>dfs.ha.namenodes.mycluster</name>

      <value>nn1,nn2</value>

    </property>

       注意:目前的hadoop2.7.2最多隻能配置2個namenode

(3).配置每一個namenode的rpc地址

    <property>

      <name>dfs.namenode.rpc-address.mycluster.nn1</name>

      <value>s100:8020</value>

    </property>

    <property>

      <name>dfs.namenode.rpc-address.mycluster.nn2</name>

      <value>s800:8020</value>

    </property>

(4).配置每一個namenode的webui地址

    <property>

      <name>dfs.namenode.http-address.mycluster.nn1</name>

      <value>machine1.example.com:50070</value>

    </property>

    <property>

      <name>dfs.namenode.http-address.mycluster.nn2</name>

      <value>machine2.example.com:50070</value>

    </property>    

(5).配置namenode的共享edit log目錄,實際上這是個邏輯目錄

    <property>

      <name>dfs.namenode.shared.edits.dir</name>

      <value>qjournal://s100:8485;s700:8485;s800:8485/mycluster</value>

    </property>

(6).配置客戶端容災代理供應商類

         供客戶端用來檢測哪一個是namenode是活頁節點

   <property>

     <name>dfs.client.failover.proxy.provider.mycluster</name>

     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

   </property>

(7).可選:配置HA防禦方法名集合

    QJM防止腦裂發生,不存在兩個active node

            能夠配置sshfence或者shell腳本

(8).在core-site.xml中配置hdfs的文件系統

   <property>

     <name>fs.defaultFS</name>

     <value>hdfs://mycluster</value>

   </property>

(9).配置JN的本地存放數據(edit log)的目錄

   <property>

     <name>dfs.journalnode.edit.dir</name>

     <value>/home/ubuntu/hadoop/journal</value>

   </property>


3.配置過程

(1).首先將配置好的hdfs-site.xml和core-site.xml文件發送到全部的節點

(2).在JN節點上啓動journalnode進程

    $hadoop-daemon.sh start journalnode

(3).啓動完成JN以後,須要在disk上完成兩個nn的元數據同步工做

  若是正在構建新的hdfs羣集,須要先在一臺 namenode上進行format工做

  若已經格式化文件系統或者在non-ha的羣集之上啓用ha功能,須要複製現有的nn的目錄(~/hadoop/dfs/name)到另一臺的nn的相同目錄下,在未格式化的nn上執行命令:hdfs namnode -bootstrapStandby,該命令保證jn有足夠多的edit來啓動兩個nn

  若是正在將non-ha namenode轉換成ha,執行命令hdfs namenode -initializeShareEdits,會從local的namenode編輯日誌目錄數據初始化到jns中.啓動兩個nn經過webui查看每一個nn的狀態

  http://hadoop01:50070/

  http://hadoop08:50070/

(4).在s100上啓動hdfs namenode -initializeShareEdits會有報錯,關閉namenode解鎖

    s100$hadoop-daemon.sh stop namenode

    而後再次執行:

    s100$hdfs namenode -initializeSharedEdits

(5).而後啓動兩個nn

    s100$hadoop-daemon.sh start namenode

    s800$hadoop-daemon.sh start namenode

(6).啓動全部的數據節點

    s100$hadoop-daemons.sh start datanode

(7).切換活動的節點

    s100$hdfs haadmin -transitionToActive nn1

    這個時候s800將不能容許讀了


4.機架感知

(1).保證在交換機故障或者集羣內部事件問題出現時,數據任然可用的,經過兩種方式來實現配置機架感知

  A:一種是經過配置一個腳原本進行映射

   在core-site.xml中的topology.script.file.name參數指定腳本文件的位置

   具體腳本見rack.sh和topology.data,把原來topology.data文件內容改了下,把hostname也添加進去了,這樣保證正確性.由於JobTracker是經過hostname進行映射的.

  B:另一種是經過實現DNSToSwtichMapping接口的resolve()方法來完成網絡位置的映射dnsToSwitchMapping的值是由"core-site.xml"配置文件中"topology.node.switch.mapping.impl"參數指定,默認值是ScriptBaseMapping,也就是經過讀提早寫好的腳本文件來進行網絡位置映射的,但若是這個腳本沒有配置的話,那就使用默認值

    "default-rack"做爲全部節點的網絡位置。自定義了一個MyResolveNetworkTopology類放在了core包的org.apache.hadoop.net目錄下,

    在「core-site.xml」文件中的配置以下:

      <property>

      <name>topology.node.switch.mapping.impl</name>

      <value>org.apache.hadoop.net.MyResolveNetworkTopology</value>

      <description> The default implementation of the DNSToSwitchMapping. It

         invokes a script specified in topology.script.file.name to resolve

         node names. If the value for topology.script.file.name is not set, the

         default value of DEFAULT_RACK is returned for all node names.

      </description>

      </property>

      

(2).編寫一個腳本或者實現接口org.apache.hadoop.net.DNSToSwitchMapping

   返回數據格式如:'/myrack/myhost'

(3).將自定義的機架感知類打成jar包,分發到全部節點的${hadoop_home}/share/hadoop/common/lib/

(4).配置類,指定自定義的類名

    topology.node.switch.mapping.impl

    具體格式參照以上信息

(5).刪除全部節點的日誌,啓動namenode

    $bin/hadoop dfsadmin -printTopology來查看機架感知的位置信息

    

5.distcp集羣間數據的拷貝

(1).經過hadoop mr技術實現並行複製,遞歸複製文件夾.性能較高,能夠實現跨集羣複製

(2).使用方法

    $hadoop distcp hdfs://s100:8020/user/hadoop/data hdfs://X.X.X.X:8020/user/hadoop/new


14.歸檔

(1).java    jar  //jar archieve

(2).hadoop  har  //hadoop archieve

$hadoop archive -archiveName new.har -p /user/hadoop/new  /user/hadoop

(3).刪除垃圾箱

    $hadoop fs -rm -R -f /user/hadoop/.Trash

(4).查看歸檔文件的內容

    $hadoop fs -lsr har:///user/hadoop/new.har


6.數據完整性

(1).校驗和

    Checksum

(2).CRC-32

    cycle redundent check-32

(3).指定校驗的字節數組長度

    io.bytes.per.checksum

(4).$hdfs dfs -get -crc /user/hadoop/demo.txt ./downloads

    會在指定的文件夾下出現一個叫.demo.txt.crc的文件

(5).$cat .demo.txt.crc 

相關文章
相關標籤/搜索