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

1.HA配置

(1).high availability,高可用

       持續服務的能力

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

(2).failover,容災

(3).namenode  , 2nn

    secondary namenode解決的可靠性問題

(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 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章