本文向您詳細介紹如何將 Hadoop Hive 數據遷移到阿里雲MaxCompute大數據計算服務上。html
在進行 Hadoop Hive 數據遷移前,您須要保證本身的Hadoop集羣環境正常。本文使用的Hadoop環境:sql
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:ide
hive -e 'show tables'; hive -e 'select * from hive_sale';
開通MaxCompute,請參考:https://help.aliyun.com/document_detail/58226.html工具
安裝並配置MaxCompute客戶端,請參考:https://help.aliyun.com/document_detail/27804.htmloop
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,執行SQL語句,下面咱們將導出到本地的數據按行以逗號進行分隔:
insert overwrite local directory '/home/sixiang/' row format delimited fields terminated by ',' select * from hive_sale;
查看數據文件:
進入MaxCompute控制檯,執行Tunnel upload命令完成數據上傳:
tunnel upload /home/sixiang/000000_0 daniel.maxcompute_sale;
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,觀察當前狀態爲可用,說明新增自定義資源組成功。
DataWorks新建項目後,默認設置本身爲數據源odps_first;所以咱們只需添加Hadoop集羣數據源,在DataWorks數據集成頁面,點擊數據源 > 新增數據源,在彈框中選擇HDFS類型的數據源。
在彈出窗口中,填寫「數據源名稱」、「DefaultFS」
若是Hadoop集羣爲HA集羣,則此處地址爲hdfs://IP:8020,若是Hadoop集羣爲非HA集羣,則此處地址爲hdfs://IP:9000。在本文中,Hadoop機器與DataWorks經過公網鏈接,所以此處填寫公網IP。
完成配置後,點擊測試連通性,若是提示「測試連通性成功」,則說明數據源添加成功。
在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 命令確認。
完成配置後,點擊運行。若是提示任務運行成功,則說明同步任務已完成。
在DataWorks數據開發/臨時查詢,執行select * FROM hive_sale 驗證結果,以下圖所示:
固然,也能夠經過在odpscmd命令行工具中SQL查詢表結果:
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。