Hadoop Hive遷移至MaxCompute
本文向您詳細介紹如何將 Hadoop Hive 資料遷移到阿里雲MaxCompute大資料計算服務上。
一、環境準備
1.1、Hadoop叢集環境
在進行 Hadoop Hive 資料遷移前,您需要保證自己的Hadoop叢集環境正常。本文使用的Hadoop環境:
- HDFS 2.8.5
- YARN 2.8.5
- Hive 3.1.1
- Ganglia 3.7.2
- Spark 2.3.2
- HUE 4.1.0
- Zeppelin 0.8.0
- Tez 0.9.1
- Sqoop 1.4.7
- Pig 0.14.0
- Knox 1.1.0
- ApacheDS 2.0.0
1.2、Hadoop Hive資料準備
Hive指令碼:
CREATE TABLE IF NOT EXISTS hive_sale( create_time timestamp, category STRING, brand STRING, buyer_id STRING, trans_num BIGINT, trans_amount DOUBLE, click_cnt BIGINT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' lines terminated by '\n'; insert into hive_sale values ('2019-04-14','外套','品牌A','lilei',3,500.6,7), ('2019-04-15','生鮮','品牌B','lilei',1,303,8), ('2019-04-16','外套','品牌C','hanmeimei',2,510,2), ('2019-04-17','衛浴','品牌A','hanmeimei',1,442.5,1), ('2019-04-18','生鮮','品牌D','hanmeimei',2,234,3), ('2019-04-19','外套','品牌B','jimmy',9,2000,7), ('2019-04-20','生鮮','品牌A','jimmy',5,45.1,5), ('2019-04-21','外套','品牌E','jimmy',5,100.2,4), ('2019-04-22','生鮮','品牌G','peiqi',10,5560,7), ('2019-04-23','衛浴','品牌F','peiqi',1,445.6,2), ('2019-04-24','外套','品牌A','ray',3,777,3), ('2019-04-25','衛浴','品牌G','ray',3,122,3), ('2019-04-26','外套','品牌C','ray',1,62,7);
登入Hadoop叢集,建立Hive SQL指令碼,執行Hive命令完成指令碼初始化:
hive -f hive_data.sql
查詢Table:
hive -e 'show tables'; hive -e 'select * from hive_sale';
1.3、MaxCompute環境
開通MaxCompute,請參考: https://help.aliyun.com/document_detail/58226.html
安裝並配置MaxCompute客戶端,請參考: https://help.aliyun.com/document_detail/27804.html
1.4、MaxCompute Create Table
CREATE TABLE IF NOT EXISTS maxcompute_sale( create_time STRING, category STRING, brand STRING, buyer_id STRING, trans_num BIGINT, trans_amount DOUBLE, click_cnt BIGINT );
在建表過程中,需要考慮到Hive資料型別 與 MaxCompute資料型別的對映,可參考:
https://help.aliyun.com/document_detail/54081.html上述通過odpscmd命令列工具完成,命令列工具安裝和配置請參考: https://help.aliyun.com/document_detail/27804.html
注意:MaxCompute2.0支援的資料型別,包括基本資料型別和複雜型別,詳見:
https://help.aliyun.com/document_detail/27821.html二、Hive遷移MaxCompute操作
2.1、通過Tunnel檔案上傳
2.1.1、生成Hive資料檔案
進入Hive,執行SQL語句,下面我們將匯出到本地的資料按行以逗號進行分隔:
insert overwrite local directory'/home/sixiang/' row format delimited fields terminated by ',' select * from hive_sale;
檢視資料檔案:
2.1.2、執行Tunnel命令完成檔案上傳
進入MaxCompute控制檯,執行Tunnel upload命令完成資料上傳:
tunnel upload /home/sixiang/000000_0 daniel.maxcompute_sale;
2.2、通過DataWorks-資料整合上傳
2.2.1、新建自定義資源組
MaxCompute所處的網路環境與Hadoop叢集中的DataNode網路通常不可達,可通過自定義資源組的方式,將DataWorks同步任務執行在Hadoop叢集的Master節點上(Hadoop叢集內Master和DataNode網路可通)
檢視Hadoop叢集DataNode:執行hadoop dfsadmin –report 命令檢視
上圖可以看到,DataNode為內網地址,很難與DataWorks預設資源組互通,所以需要設定自定義資源組,將Master Node設定為執行DataWorks資料同步任務的節點。
進入DataWorks資料整合頁面,選擇資源組,點選新增資源組,如下圖所示:
在新增伺服器步驟中,需要輸入機器的UUID和IP等資訊,機器IP需填寫MasterNode公網IP(內網IP可能不通)。
機器的UUID需要進入MasterNode管理終端,通過命令dmidecode | grep UUID獲取,如下所示:
完成新增伺服器後,需保證Master Node與DataWorks網路可聯通;按照提示安裝自定義資源組agent,觀察當前狀態為可用,說明新增自定義資源組成功。
2.2.3、新建資料來源
DataWorks新建專案後,預設設定自己為資料來源odps_first;因此我們只需新增Hadoop叢集資料來源,在DataWorks資料整合頁面,點選資料來源 > 新增資料來源,在彈框中選擇HDFS型別的資料來源。
在彈出視窗中,填寫“資料來源名稱”、“DefaultFS”
如果Hadoop叢集為HA叢集,則此處地址為hdfs://IP:8020,如果Hadoop叢集為非HA叢集,則此處地址為hdfs://IP:9000。在本文中,Hadoop機器與DataWorks通過公網連線,因此此處填寫公網IP。
完成配置後,點選測試連通性,如果提示“測試連通性成功”,則說明資料來源新增成功。
2.2.4、配置資料同步任務
在DataWorks“資料開發”頁面,選擇新建資料整合節點-資料同步,在匯入模板彈窗選擇資料來源型別如下:
具體指令碼如下:
{ "configuration": { "reader": { "plugin": "hdfs", "parameter": { "path": "/user/hive/warehouse/hive_sale/", "datasource": "hadoop_to_odps", "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://xxx.xxx.xxx.xxx:9000", "fieldDelimiter": ",", "encoding": "UTF-8", "fileType": "text" } }, "writer": { "plugin": "odps", "parameter": { "partition": "", "truncate": false, "datasource": "odps_first", "column": [ "create_time", "category", "brand", "buyer_id", "trans_num", "trans_amount", "click_cnt" ], "table": "maxcompute_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_sale 命令確認。
完成配置後,點選執行。如果提示任務執行成功,則說明同步任務已完成。
2.2.4、驗證結果
在DataWorks資料開發/臨時查詢,執行select * FROM hive_sale 驗證結果,如下圖所示:
當然,也可以通過在odpscmd命令列工具中SQL查詢表結果: