Hadoop資料遷移MaxCompute最佳實踐
本文向您詳細介紹如何通過使用DataWorks資料同步功能,將Hadoop資料遷移到阿里雲MaxCompute大資料計算服務上。
1. 環境準備
1.1 Hadoop叢集搭建
進行資料遷移前,您需要保證自己的Hadoop叢集環境正常。本文使用阿里雲EMR服務自動化搭建Hadoop叢集,詳細過程請參見https://help.aliyun.com/document_detail/35223.html?spm=a2c4g.11186623.6.557.20e219306ZJC9i。
本文使用的EMR Hadoop版本資訊如下:
EMR版本: EMR-3.11.0
叢集型別: HADOOP
軟體資訊: HDFS2.7.2 / YARN2.7.2 / Hive2.3.3 / Ganglia3.7.2 / Spark2.2.1 / HUE4.1.0 / Zeppelin0.7.3 / Tez0.9.1 / Sqoop1.4.6 / Pig0.14.0 / ApacheDS2.0.0 / Knox0.13.0
Hadoop叢集使用經典網路,區域為華東1(杭州),主例項組ECS計算資源配置公網及內網IP,高可用選擇為否(非HA模式),具體配置如下所示。
1.2 MaxCompute
請參考https://help.aliyun.com/document_detail/58226.html?spm=a2c4g.11174283.6.570.64d4590eaIbcxH
開通MaxCompute服務並建立好專案,本文中在華東1(杭州)區域建立專案bigdata_DOC,同時啟動DataWorks相關服務,如下所示。
2. 資料準備
2.1 Hadoop叢集建立測試資料
進入EMR Hadoop叢集控制檯介面,使用互動式工作臺,新建互動式任務doc。本例中HIVE建表語句:
CREATE TABLE IF NOT EXISTS hive_doc_good_sale(
create_time timestamp,
category STRING,
brand STRING,
buyer_id STRING,
trans_num BIGINT,
trans_amount DOUBLE,
click_cnt BIGINT
)
PARTITIONED BY (pt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY `,` lines terminated by `
`
選擇執行,觀察到Query executed successfully提示則說明成功在EMR Hadoop叢集上建立了測試用表格hive_doc_good_sale,如下圖所示。
插入測試資料,您可以選擇從OSS或其他資料來源匯入測試資料,也可以手動插入少量的測試資料。本文中手動插入資料如下:
insert into hive_doc_good_sale PARTITION(pt =1 ) values(`2018-08-21`,`外套`,`品牌A`,`lilei`,3,500.6,7),(`2018-08-22`,`生鮮`,`品牌B`,`lilei`,1,303,8),(`2018-08-22`,`外套`,`品牌C`,`hanmeimei`,2,510,2),(2018-08-22,`衛浴`,`品牌A`,`hanmeimei`,1,442.5,1),(`2018-08-22`,`生鮮`,`品牌D`,`hanmeimei`,2,234,3),(`2018-08-23`,`外套`,`品牌B`,`jimmy`,9,2000,7),(`2018-08-23`,`生鮮`,`品牌A`,`jimmy`,5,45.1,5),(`2018-08-23`,`外套`,`品牌E`,`jimmy`,5,100.2,4),(`2018-08-24`,`生鮮`,`品牌G`,`peiqi`,10,5560,7),(`2018-08-24`,`衛浴`,`品牌F`,`peiqi`,1,445.6,2),(`2018-08-24`,`外套`,`品牌A`,`ray`,3,777,3),(`2018-08-24`,`衛浴`,`品牌G`,`ray`,3,122,3),(`2018-08-24`,`外套`,`品牌C`,`ray`,1,62,7) ;
完成插入資料後,您可以使用select * from hive_doc_good_sale where pt =1;語句檢查Hadoop叢集表中是否已存在資料可用於遷移。
2.2 利用DataWorks新建目標表
在管理控制檯,選擇對應的MaxCompute專案,點選進入資料開發頁面,點選新建表,如下所示。
在彈框中輸入SQL建表語句,本例中使用的建表語句如下:
CREATE TABLE IF NOT EXISTS hive_doc_good_sale(
create_time string,
category STRING,
brand STRING,
buyer_id STRING,
trans_num BIGINT,
trans_amount DOUBLE,
click_cnt BIGINT
)
PARTITIONED BY (pt string) ;
在建表過程中,需要考慮到HIVE資料型別與MaxCompute資料型別的對映,當前資料對映關係可參見 https://help.aliyun.com/document_detail/54081.html?spm=a2c4e.11153940.blogcont630231.16.587919b0KIgCfQ
由於本文使用DataWorks進行資料遷移,而DataWorks資料同步功能當前暫不支援timestamp型別資料,因此在DataWorks建表語句中,將create_time設定為string型別。
上述步驟同樣可通過odpscmd命令列工具完成,命令列工具安裝和配置請參考https://help.aliyun.com/document_detail/27804.html?spm=a2c4g.11186623.6.572.e66b5a41WP2nyj ,執行過程如下所示。
注意:考慮到部分HIVE與MaxCompute資料型別的相容問題,建議在odpscmd客戶端上執行以下命令。
set odps.sql.type.system.odps2=true;set odps.sql.hive.compatible=true;
完成建表後,可在DataWorks資料開發>表查詢一欄檢視到當前建立的MaxCompute上的表,如下所示。
3. 資料同步
3.1 新建自定義資源組
由於MaxCompute專案所處的網路環境與Hadoop叢集中的資料節點(data node)網路通常不可達,我們可通過自定義資源組的方式,將DataWorks的同步任務執行在Hadoop叢集的Master節點上(Hadoop叢集內Master節點和資料節點通常可達)。
3.1.1 檢視Hadoop叢集datanode
在EMR控制檯上首頁/叢集管理/叢集/主機列表頁檢視,如下圖所示,通常非HA模式的EMR上Hadoop叢集的master節點主機名為 emr-header-1,datanode主機名為emr-worker-X。
您也可以通過點選上圖中Master節點的ECS ID,進入ECS例項詳情頁,通過點選遠端連線進入ECS,通過 hadoop dfsadmin –report命令檢視datenode,如下圖所示。
由上圖可以看到,在本例中,datanode只具有內網地址,很難與DataWorks預設資源組互通,所以我們需要設定自定義資源組,將master node設定為執行DataWorks資料同步任務的節點。
3.1.2 新建自定義資源組
進入DataWorks資料整合頁面,選擇資源組,點選新增資源組,如下圖所示。關於新增排程資源組的詳細資訊,請參考新增排程資源。
在新增伺服器步驟中,需要輸入ECS UUID和機器IP等資訊(對於經典網路型別,需輸入伺服器名稱,對於專有網路型別,需輸入伺服器UUID。目前僅DataWorks V2.0 華東2區支援經典網路型別的排程資源新增,對於其他區域,無論您使用的是經典網路還是專有網路型別,在新增排程資源組時都請選擇專有網路型別),機器IP需填寫master node公網IP(內網IP可能不可達)。ECS的UUID需要進入master node管理終端,通過命令dmidecode | grep UUID獲取(如果您的hadoop叢集並非搭建在EMR環境上,也可以通過該命令獲取),如下所示。
完成新增伺服器後,需保證master node與DataWorks網路可達,如果您使用的是ECS伺服器,需設定伺服器安全組。如果您使用的內網IP互通,可參考https://help.aliyun.com/document_detail/72978.html?spm=a2c4g.11186623.6.580.6a294f79DmqM6f設定。如果您使用的是公網IP,可直接設定安全組公網出入方向規則,本文中設定公網入方向放通所有埠(實際應用場景中,為了您的資料安全,強烈建議設定詳細的放通規則),如下圖所示。
完成上述步驟後,按照提示安裝自定義資源組agent,觀察到當前狀態為可用,說明新增自定義資源組成功。
如果狀態為不可用,您可以登入master node,使用tail –f/home/admin/alisatasknode/logs/heartbeat.log命令檢視DataWorks與master node之間心跳報文是否超時,如下圖所示。
3.2 新建資料來源
關於DataWorks新建資料來源詳細步驟,請參見https://help.aliyun.com/knowledge_list/72788.html?spm=a2c4g.11186623.6.573.7d882b59eqdXhi
DataWorks新建專案後,預設設定自己為資料來源odps_first。因此我們只需新增Hadoop叢集資料來源:在DataWorks資料整合頁面,點選資料來源>新增資料來源,在彈框中選擇HDFS型別的資料來源。
在彈出視窗中填寫資料來源名稱及defaultFS。對於EMR Hadoop叢集而言,如果Hadoop叢集為HA叢集,則此處地址為hdfs://emr-header-1的IP:8020,如果Hadoop叢集為非HA叢集,則此處地址為hdfs://emr-header-1的IP:9000。在本文中,emr-header-1與DataWorks通過公網連線,因此此處填寫公網IP並放通安全組。
完成配置後,點選測試連通性,如果提示“測試連通性成功”,則說明資料來源新增正常。
注意:如果EMR Hadoop叢集設定網路型別為專有網路,則不支援連通性測試。
3.3 配置資料同步任務
在DataWorks資料整合頁面點選同步任務,選擇新建>指令碼模式,在匯入模板彈窗選擇資料來源型別如下:
完成匯入模板後,同步任務會轉入指令碼模式,本文中配置指令碼如下,相關解釋請參見https://help.aliyun.com/document_detail/74304.html?spm=a2c4g.11186631.6.576.2c506aaczJB2i7
在配置資料同步任務指令碼時,需注意DataWorks同步任務和HIVE表中資料型別的轉換如下:
在Hive表中的資料型別 |
DataX/DataWorks 內部型別 |
TINYINT,SMALLINT,INT,BIGINT |
Long |
FLOAT,DOUBLE,DECIMAL |
Double |
String,CHAR,VARCHAR |
String |
BOOLEAN |
Boolean |
Date,TIMESTAMP |
Date |
Binary |
Binary |
詳細程式碼如下:
{
“configuration”: {
“reader”: {
“plugin”: “hdfs”,
“parameter”: {
“path”: “/user/hive/warehouse/hive_doc_good_sale/”,
“datasource”: “HDFS1”,
“column”: [
{
“index”: 0,
“type”: “string”
},
{
“index”: 1,
“type”: “string”
},
{
“index”: 2,
“type”: “string”
},
{
“index”: 3,
“type”: “string”
},
{
“index”: 4,
“type”: “long”
},
{
“index”: 5,
“type”: “double”
},
{
“index”: 6,
“type”: “long”
}
],
“defaultFS”: “hdfs://121.199.11.138:9000”,
“fieldDelimiter”: “,”,
“encoding”: “UTF-8”,
“fileType”: “text”
}
},
“writer”: {
“plugin”: “odps”,
“parameter”: {
“partition”: “pt=1”,
“truncate”: false,
“datasource”: “odps_first”,
“column”: [
“create_time”,
“category”,
“brand”,
“buyer_id”,
“trans_num”,
“trans_amount”,
“click_cnt”
],
“table”: “hive_doc_good_sale”
}
},
“setting”: {
“errorLimit”: {
“record”: “1000”
},
“speed”: {
“throttle”: false,
“concurrent”: 1,
“mbps”: “1”,
“dmu”: 1
}
}
},
“type”: “job”,
“version”: “1.0”
}
其中,path引數為資料在Hadoop叢集中存放的位置,您可以在登入master node後,使用hdfs dfs –ls /user/hive/warehouse/hive_doc_good_sale命令確認。對於分割槽表,您可以不指定分割槽,DataWorks資料同步會自動遞迴到分割槽路徑,如下圖所示。
完成配置後,點選執行。如果提示任務執行成功,則說明同步任務已完成。如果執行失敗,可通過複製日誌進行進一步排查。
4. 驗證結果
在DataWorks資料開發/表查詢頁面,選擇表hive_doc_good_sale後,點選資料預覽可檢視HIVE資料是否已同步到MaxCompute。您也可以通過新建一個table查詢任務,在任務中輸入指令碼select * FROM hive_doc_good_sale where pt =1;後,點選執行來檢視錶結果,如下圖所示。
當然,您也可以通過在odpscmd命令列工具中輸入select * FROM hive_doc_good_sale where pt =1;查詢表結果。
5. MaxCompute資料遷移到Hadoop
{
"configuration": {
"reader": {
"plugin": "odps",
"parameter": {
"partition": "pt=1",
"isCompress": false,
"datasource": "odps_first",
"column": [
"create_time",
"category",
"brand",
"buyer_id",
"trans_num",
"trans_amount",
"click_cnt"
],
"table": "hive_doc_good_sale"
}
},
"writer": {
"plugin": "hdfs",
"parameter": {
"path": "/user/hive/warehouse/hive_doc_good_sale",
"fileName": "pt=1",
"datasource": "HDFS_data_source",
"column": [
{
"name": "create_time",
"type": "string"
},
{
"name": "category",
"type": "string"
},
{
"name": "brand",
"type": "string"
},
{
"name": "buyer_id",
"type": "string"
},
{
"name": "trans_num",
"type": "BIGINT"
},
{
"name": "trans_amount",
"type": "DOUBLE"
},
{
"name": "click_cnt",
"type": "BIGINT"
}
],
"defaultFS": "hdfs://47.99.162.100:9000",
"writeMode": "append",
"fieldDelimiter": ",",
"encoding": "UTF-8",
"fileType": "text"
}
},
"setting": {
"errorLimit": {
"record": "1000"
},
"speed": {
"throttle": false,
"concurrent": 1,
"mbps": "1",
"dmu": 1
}
}
},
"type": "job",
"version": "1.0"
}
您需要參考配置HDFS Writer在執行上述同步任務前對Hadoop叢集進行設定,在執行同步任務後手動拷貝同步過去的檔案。
相關文章
- Hadoop Hive遷移至MaxComputeHadoopHive
- SaaS 模式雲資料倉儲 MaxCompute 資料安全最佳實踐模式
- MaxCompute表設計最佳實踐
- Jenkins搭建與資料遷移實踐Jenkins
- cassandra百億級資料庫遷移實踐資料庫
- 攜程MySQL遷移OceanBase最佳實踐|分享MySql
- 資料庫平滑遷移方案與實踐分享資料庫
- xtts遷移實踐TTS
- 線上資料遷移,數字化時代的必修課 —— 京東雲資料遷移實踐
- 高途資料平臺遷移與成本治理實踐
- MSSQL·最佳實踐·RDSSDK實現資料庫遷移上阿里雲RDSSQLServerSQL資料庫阿里Server
- 快速雲原生化,從資料中心到雲原生的遷移最佳實踐
- Swift Static Libraries遷移實踐Swift
- VPGAME 的 Kubernetes 遷移實踐GAM
- VPGAME的Kubernetes遷移實踐GAM
- GaussDB技術解讀系列:資料庫遷移創新實踐資料庫
- 全量、增量資料在HBase遷移的多種技巧實踐
- 從 Oracle 到 TiDB,全鏈路資料遷移平臺核心能力和杭州銀行遷移實踐OracleTiDB
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- 資料庫上雲實踐:使用Ora2pg進行資料庫遷移資料庫
- 最佳實踐 | 資料庫遷雲解決方案選型 & 流程全解析資料庫
- 小米Kylin平滑遷移HBase實踐
- ORM實操之資料庫遷移ORM資料庫
- 金倉資料庫資料遷移實戰:從MySQL到KES的順利遷移資料庫MySql
- 千億級資料遷移mongodb成本節省及效能最佳化實踐(附效能對比質疑解答)MongoDB
- Kafka資料遷移Kafka
- Harbor資料遷移
- gitlab資料遷移Gitlab
- 資料庫遷移資料庫
- Hadoop 資料遷移用法詳解Hadoop
- Hadoop YARN:排程效能最佳化實踐HadoopYarn
- 銀行業生產系統儲存資料遷移方法及實踐行業
- PHP最佳實踐之資料庫PHP資料庫
- Redis叢集slot遷移改造實踐Redis
- 圖資料庫設計實踐 | 儲存服務的負載均衡和資料遷移資料庫負載
- 資料遷移(1)——通過資料泵表結構批量遷移
- Mysql資料遷移方法MySql
- 【Hive】hive資料遷移Hive