自建hadoop集群遷移到EMR之資料遷移篇

2021-09-22 08:53:36 字數 2440 閱讀 7423

自建集群要遷移到emr集群,往往需要遷移已有資料。本文主要介紹hdfs資料和hive meta資料如何遷移。

已按需求建立好emr集群。

主要依靠distcp,核心是打通網路,確定hdfs引數和要遷移內容,測速,遷移。

需要自建集群和emr各個節點網路互通。同為vpc網路只需要同乙個安全組,不同的安全組需要設定安全組互通。

如果自建集群是經典網路,emr集群是vpc,網路訪問需要設定classiclink.參見文件,詳情可以諮詢ecs客服。

設定後可以在新集群節點上ssh 老集群節點確定網路連通情況,distcp操作如果有xx 節點無法連線xx節點的異常,說明沒有連通,需要繼續設定。

hdfs有許可權設定,確定老集群是否有acl規則,是否要同步,檢查dfs.permissions.enabled 和dfs.namenode.acls.enabled的配置新老集群是否一致,按照實際需要修改。

如果有acl規則要同步,distcp引數要加-p同步許可權引數。如果distcp操作提示xx集群不支援acl,說明對應集群沒配置。新集群沒配置可以修改配置並重啟nm。舊集群不支援,說明舊集群根本就沒有acl方面的設定,也不需要同步。

一般在新集群上執行同步,這樣同步的作業可以在新集群上執行,對老集群影響較小。

distcp引數細節,一般命令格式如下:

hadoop distcp -ddfs.replication=3 -pbugpcax -m 1000 -bandwidth 30 hdfs://oldclusterip:8020 /user/hive/warehouse /user/hive/

注意事項:

hdfs://oldclusterip:8020寫老集群nameode ip,多個namenode寫當前active的。

指定了副本數3,如想保留原有副本數-p後加r如-prbugpcax。如果不同步許可權和acl,-p後去掉p和a。

-m指定map數,和集群規模,資料量有關。比如集群有2000核cpu,就可以指定2000個map。 -bandwidth指定單個map的同步速度,是靠控制副本複製速度實現的,是大概值。

4.遷移整體速度受集群間頻寬,集群規模影響。同時檔案越多,checksum需要的時間越長。如果遷移資料量大,可以先試著同步幾個目錄評估一下整體時間。如果只能在指定時間段內同步,可以將目錄切為幾個小目錄,依次同步。

5.如果遷移過程中老集群還有寫入,可以用-udpate再將變化同步過來。

6.一般完全同步,需要有個短暫的業務停寫,以啟用雙寫雙算或直接將業務切換到新集群上。

hive meta資料同步,本質是hive meta db,一般是mysql db的資料同步。和一般的mysql資料同步相比,要注意location改變,和hive版本對齊。

meta資料較多時,一般推薦用rds作為meta db。自建集群可能已有乙個rds db,由於location不同,一般需要新建乙個資料庫。最佳實踐是跟emr集群在乙個可用區,乙個vpc 安全組下新建乙個rds 資料庫。

登入新集群master節點(如果是ha集群兩個master都需要),修改/usr/local/emr/emr-agent/run/meta_db_info.json,把裡面的use_local_meta_db設定為false,meta資料庫資訊的鏈結位址、使用者名稱和密碼換成新建rds的資訊。然後重啟hive元件的metaserver。

初始化meta的表資訊:

···cd /usr/lib/hive-current/bin

./schematool - initschema -dbtype mysql

···hive的表,分割槽等資訊是有location資訊的,帶dfs nameservices字首,如hdfs://mycluster:8020/,而emr集群的nameservices字首是統一的emr-cluster,所以需要訂正。訂正的最佳方式是先導出資料mysqldump --databases hivemeta --single-transaction -u root –p > hive_databases.sql,用sed替換hdfs://oldcluster:8020/為hdfs://emr-cluster/ ,再匯入新db中。

mysql hivemeta -p < hive_databases.sql

emr的hive版本一般是當前社群最新的穩定版,自建集群hive版本可能會更老,所以匯入的舊版本資料可能不能直接使用。需要執行hive的公升級指令碼,位址。例如hive從1.2公升級到2.3.0,需要依次執行upgrade-1.2.0-to-2.0.0.mysql.sql,upgrade-2.0.0-to-2.1.0.mysql.sql,upgrade-2.1.0-to-2.2.0.mysql.sql,upgrade-2.2.0-to-2.3.0.mysql.sql。指令碼主要是建表,加欄位,改內容,如有表已存在,欄位已存在的異常可以忽略。

meta資料全部訂正後,就可以重啟metaserver了。命令列hive,查詢庫和表,查詢資料,驗證正確性。

Hadoop集群間HBase資料遷移

背景 hbase cluster1 hbase cluster2 利用hbase的snapshots功能,進行集群之間的hbase資料前移 1.開啟snapshots功能 0.95及以上版本預設開啟了 hbase.snapshot.enabledname truevalue property 2.建...

hadoop 資料遷移

distcp 分布式拷貝 是用於大規模集群內部和集群之間拷貝的工具。它使用map reduce實現檔案分發,錯誤處理和恢復,以及報告生成。它把檔案和目錄的列表作為map任務的輸入,每個任務會完成源列表中部分檔案的拷貝。由於使用了map reduce方法,這個工具在語義和執行上都會有特殊的地方。這篇文...

集群資料遷移

靜態遷移方案 必須在hbase集群停掉的情況下進行 hadoop distcp 動態遷移方案 三種 replication備份方案 修改hbase site.xml配置,增加hbase.replication屬性,增加表屬性replication scope屬性 add peer copytable...