HDFS_資料遷移&節點遷移
一、資料遷移
使用場景:
① 冷熱叢集資料分類儲存
② 叢集資料整體搬遷
③ 資料的準實時同步,目的在於資料的雙備份可用資料遷移要素考量:
① 頻寬Bandwidth:需要限流
② 效能Performance:採用單機程式還是分散式程式?
③ 增量同步Data-Increment:原始資料檔案進行了追加寫、原始資料檔案被刪除或重新命名
在海量資料儲存系統如HDFS中,一般不會在原始檔內容上做修改,要麼繼續追加寫,要麼刪除檔案。所以 做增量資料同步,只要考慮上述兩個條件即可
判斷追加寫:
1)先比較檔案大小,如果兩個階段檔案大小發生改變,說明檔案在內容上已經發生變更,變更的型別有兩類。擷取對應原始長度部分進行checksum(校驗和)比較,如果一致,則此檔案發生了追加寫。不一致,則說明檔案在原內容上也已經改變
2)如果檔案大小一致,則計算相應的checksum,然後進行比較④ 資料遷移的同步性
資料遷移解決方案:DistCp
1) DistCp支援頻寬限流,可以通過引數bandwidth來控制
2) 增量同步資料,通過update、append、diff這3個引數來控制
·Update:更新目標路徑,只拷貝相對於源端,目標端不存在的檔案或目錄
·Append:追加寫目標路徑下已經存在的檔案,如果這個檔案在源端已經發生了追加寫操作
·Diff:通過快照的diff對比資訊來同步源路徑與目標路徑
·高效的效能:執行的分散式特性(純map任務構成的job)、高效的MR元件
Hadoop DistCp命令:distcp OPTIONS [-source_path···] <target_path>
OPTIONS
-append //拷貝檔案時支援對現有檔案進行追加寫操作
-async //非同步執行distcp拷貝任務
-bandwidth //對每個map任務的頻寬限速
-delete //刪除相對於源端,目標端多出來的檔案
-diff //通過快照diff資訊進行資料的同步
-overrite //以覆蓋的方式進行拷貝,如果目標端檔案已經存在,則直接進行覆蓋
-p //拷貝資料時,擴充套件屬性資訊的保留,包括許可權資訊、塊大小資訊等等
-skipcrccheck //拷貝資料時是否跳過校驗和的校驗
-update //拷貝資料時,只拷貝相對於源端,目標端不存在的檔案資料
其中source_path、target_path需要帶上地址字首以區分不同的叢集:hadoop distcp hdfs://nn1:8020/foo/a hdfs://nn2:8020/bar/foo
二、DataNode節點遷移
目標:
將原DataNode所在節點的機器從A機房換到B機房,其中會涉及主機名和ip地址的改變,需要保證資料不發生丟失相關知識:
機器遷移將使該節點停止心跳,如果超過心跳檢查時間,將被認為是死節點,從而發生大量塊複製現象。為了使得短時間內不成為死節點,需要人工把心跳超時檢查時間設大。<name>dfs.namenode.heartbeat.recheck-interval</name> <value>10800000</value> #3小時
執行以下操作使得配置生效:
① 更新standby namenode的hdfs-site.xml的配置,並重啟
② 等待standby namenode退出safemode之後,再stop active namenode,更新配置並重啟
此種方案只適用於DataNode不涉及主機名和IP地址變化的情況DataNode更換主機名、IP地址時的遷移方案
① 停止叢集hdfs相關的服務,最好把YARN相關的服務也停止
② 修改HDFS叢集名稱相關配置
core-site.xml:<name>fs.defaultFS</name> <value>hdfs://clusterA</value> <final>true</final>
yarn-site.xml:
<name>yarn.resourcemanager.fs.state-store.uri</name> <value>hdfs://clusterA/logs/yarn/rmstore</value>
hdfs-site.xml:
<name>dfs.nameservices</name> <value>clusterA</value> <name>dfs.ha.namenodes.clusterA</name> <value>nn1,nn2</value> <name>dfs.namenode.rpc-address.clusterA.nn1</name> <value>clusternn1:9000</value> <name>dfs.namenode.rpc-address.clusterA.nn2</name> <value>clusternn2:9000</value> <name>dfs.namenode.http-address.clusterA.nn1</name> <value>clusternn1:50070</value> <name>dfs.namenode.http-address.clusterA.nn2</name> <value>clusternn2:50070</value> <name>dfs.client.failover.proxy.provider.clusterA</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
③ 重新格式化HDFS所依賴的znode
hdfs zkfc -formatZK
④ 重啟HDFS相關服務,執行hadoop的fs命令是否可用,最後啟動YARN 服務,並提交一個wordcount任務到YARN上做測試