自建集羣要遷移到EMR集羣,每每須要遷移已有數據。本文主要介紹hdfs數據和hive meta數據如何遷移。node
前置mysql
已按需求建立好EMR集羣。程序員
遷移hdfs數據面試
主要依靠distcp,核心是打通網絡,肯定hdfs參數和要遷移內容,測速,遷移。sql
網絡數據庫
須要自建集羣和EMR各個節點網絡互通。同爲VPC網絡只須要同一個安全組,不一樣的安全組須要設置安全組互通。json
若是自建集羣是經典網絡,EMR集羣是vpc,網絡訪問須要設置CLASSICLINK.參見文檔,詳情能夠諮詢ECS客服。安全
設置後能夠在新集羣節點上ssh 老集羣節點肯定網絡連通狀況,distcp操做若是有xx 節點沒法鏈接xx節點的異常,說明沒有連通,須要繼續設置。網絡
hdfs權限配置確認架構
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數據同步,本質是hive meta db,通常是mysql db的數據同步。和通常的mysql數據同步相比,要注意location改變,和hive版本對齊。
meta db設置
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
···
location
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,查詢庫和表,查詢數據,驗證正確性。
結語
感謝您的觀看,若有不足之處,歡迎批評指正。
若是有對大數據感興趣的小夥伴或者是從事大數據的老司機能夠加羣:
658558542
歡迎你們交流分享,學習交流,共同進步。(裏面還有大量的免費資料,幫助你們在成爲大數據工程師,乃至架構師的路上披荊斬棘!)
最後祝福全部遇到瓶頸的大數據程序員們突破本身,祝福你們在日後的工做與面試中一切順利。