Hive數據如何同步到MaxCompute之實踐講解

摘要:本次分享主要介紹 Hive數據如何遷移到MaxCompute。MMA(MaxCompute Migration Assist)是一款MaxCompute數據遷移工具,本文將為大傢介紹MMA工具的功能、技術架構和實現原理,再通過實際操作MMA,演示將Hive數據遷移到MaxCompute。

演講嘉賓簡介:阿裡雲智能產品專傢-雲花

精彩視頻回顧:Hive數據如何同步到MaxCompute

以下內容根據演講視頻以及PPT整理而成。本次分享主要圍繞以下兩個方面:一、MMA功能介紹、技術架構和原理二、MMA數據遷移操作演示

一、MMA功能介紹、技術架構和原理1.MMA功能介紹MMA主要覆蓋的場景包括批處理,存儲,數據集成,作業編排及調度。MMA提供遷移評估分析功能,自動化生成遷移評估報告。遷移評估報告會報告出從Hive表的數據結構到MaxCompute的數據結構之間是否有數據類型映射兼容性問題,如語法問題。MMA支持自動化數據遷移功能,支持批量建表以及數據自動化批量遷移。另外,MMA還支持作業語法分析,可以檢查Hive SQL能否直接運行在MaxCompute裡。MMA還支持工作流遷移,對主流數據集成工具Sqoop進行作業的遷移轉換,並自動創新DataWorks數據繼承作業。

Hive數據如何同步到MaxCompute之實踐講解

2.MMA遷移服務架構MMA遷移服務架構如下圖。左側是客戶Hadoop集群,右側的是Aliyun 大數據服務,主要是DataWorks和MaxCompute。MMA工具會跑在客戶的Hadoop集群上,客戶的服務器需要能夠訪問Hive Server。在機器上部署MMA客戶端工具時會自動化獲取Hive Meta裡的數據,既將Hive的Meta數據從MySQL中讀出來,還可以將Meta信息自動轉換成MaxCompute DDL,然後用DDL在MaxCompute中批量創建表,批量拉起數據同步的作業,向Hive Server並發提交Hive SQL作業。基於Hive SQL作業調用一個UDF,UDF裡面會集成Tunnel的SDK,基於Tunnel將數據批量寫到MaxCompute的表中。作業和工作流的遷移也是基於MMA客戶端工具自動發現的Hive Meta數據,做工作流的作業檢查,包括把工作流的組件中的工作流的配置批量轉換成DataWorks工作流的配置,直接生成DataWorks工作流。以上步驟完成瞭數據到作業到工作流的遷移。最後一步是遷移完成後需要基於MaxCompute和DataWorks架構對接業務系統。

Hive數據如何同步到MaxCompute之實踐講解

3.MMA Agent技術構架和原理通過客戶端和服務端,MMA可支持數據和工作流的批量遷移。安裝在客戶服務器上的MMA客戶端工具包含下圖中的四個能力。首先可自動獲取Hive Metadata,並自動創建生成DDL和UDTF,而且可批量創建表和批量Hive數據遷移。相應的,MMA有四個主要組件。Meta Carrier工具自動將Hive Meta信息提取出來,在本地生成Hive Meta結構。Meta Processor是基於Meta Carrier工具產出的結果,基於Hive Meta數據批量轉成MaxCompute的DDL,既批量轉成建表語句和數據類型的轉換。此外,MMA客戶端工具還內置瞭ODPS Console,基於ODPS Console將Meta Processor產出的ODPS DDL在MaxCompute上批量創建表。最後基於Data Carrier批量創建Hive SQL作業。每個Hive SQL作業相當於多個表或者多個分區並行的數據的同步。

Hive數據如何同步到MaxCompute之實踐講解

二、MMA數據遷移操作演示1.環境準備如下圖所示,MMA環境運行要求是jdk1.6版本以上,Python3+。另外,運行MMA的機器,通過Hive Client提交Hive SQL的作業。機器還需要可以訪問Hive Server,並連接MaxCompute服務。下圖右側的場景案例是客戶在基於MMA做同步數據時發現的問題。例子中客戶有自己的IDC,在阿裡雲有自己的ECS,客戶從IDC拉一條專線訪問阿裡雲。在安裝MMA之前,客戶可以從ECS上直接訪問MaxCompute,但IDC裡的機器不能訪問MaxCompute。此時需要在這條專線上增加VBR路由配置,既在邊界路由上增加一個配置。配置之後可以打通從IDC到ECS,甚至到MaxCompute服務的網絡訪問。

Hive數據如何同步到MaxCompute之實踐講解

2.下載和編譯工具包下載編譯工具包有兩種方法。一是下載下圖中編譯好的工具包。此外,由於用戶的Hive版本各不相同,用戶可以根據MMA官網上提供的GitHub地址下載源碼,拉到本地進行編譯。

Hive數據如何同步到MaxCompute之實踐講解

3.MMA Agent操作說明使用meta-carrier采集Hive Metadata:機器提前安裝好Hadoop環境,本地有Hive Server。提前下載客戶端的odps-data-carrier.zip包,並在本地解壓。解壓完成後會顯示下圖所示目錄。bin目錄下有幾個文件,首先是MMA的幾個核心角色:meta-carrier、meta-processor、odps_ddl_runner用於批量創建表,hive_udtf_sql_runner用於同步數據。libs目錄下是工具依賴的jar包和庫。 res目錄的console目錄下的bin目錄包含odpscmd,是MMA客戶端的工具,odps_config,ini配置文件。本地Hive上面有三個庫,其中dma_demo庫下有五個表,可將五個表自動批量同步到MaxCompute上。首先需要在MaxCompute上創建一個project,既在DataWorks控制臺創建一個空Project。打開新的命令窗口,在本地運行的ODPS Command客戶端工具,連接新創建的空的project。在已經安裝瞭MMA Hive的機器上運行,解壓,進入odps-data-carrier工具的目錄。執行 bin/meta-carrier -h查看其參數說明,-d表示用戶可以指定數據庫,通過指定數據庫提取meta數據,若不指定,會將Hive下所有的庫的meta都拉取出來。-o指定輸出目錄,-t參數指定表,-u參數指定uri地址,即Hive Meta的地址。開始測試時首先指定地址,因為是thirft地址,所以用thirft協議連接。此外由於Hive Meta在本地,所以隻需要將dma_demo庫的meta拉取出來,加-o參數,指定目錄。通過tree meta可以查看meta目錄結構。meta目錄下生成和數據庫同名的dma_demo目錄。dma_demo目錄下的json文件是描述數據庫meta信息的文件。partition_meta裡面的兩個表是分區表,table_meta的表是非分區表,會把所有表集的meta信息寫在下面。

Hive數據如何同步到MaxCompute之實踐講解

使用network-measurement-tool:網絡測量工具network-measurement-tool用於網絡測速,測量Hive集群到MaxCompute各region的網絡連通質量。通過網絡測速可以知道網絡傳輸速度和大概的數據量,根據網絡傳輸速度預估數據傳輸時間。network-measurement-tool工具連接MaxCompute上所有region的節點ENDPOINT地址,由最快到最慢做測速排序。下圖中執行結果最快的是HANGZHOU,連接時間為51ms,最慢的是一個海外region KUALA_LUMPUR,連接時間為3393ms。

Hive數據如何同步到MaxCompute之實踐講解

使用sql-checker檢查Hive SQL是否可以直接在MaxCompute上執行:sql-checker可用於檢查Hive SQL語法兼容性,判斷SQL能否直接在MaxCompute上運行。其參數input要指定meta目錄,指定缺省project和sql參數。若執行結果返回其兼容性OK,即此sql語句可以直接在MaxCompute上運行。

Hive數據如何同步到MaxCompute之實踐講解

使用meta-processor生成ODPS DDL和Hive UDTF SQL:通過第一步已經拉出瞭Hive Meta庫的metadata信息。下一步需要將Hive Meta轉換成MaxCompute DDL。使用bin/meta-processor -h查看參數。-i即input,-o是output目錄。bin/meta-processor的-i就是第一個命令的輸出結果,代表meta的目錄,存放的是carrier拉出的Hive Meta數據。指定-i meta -o output。將bin/meta-processor運行結果放入output中。生成output目錄。tree output可查看結構。output目錄下也會生成一個以MaxCompute的project命名的dma_demo目錄。dma_demo目錄下面有一個hive_udtf_sql目錄,目錄下面的.sql用於批量數據遷移。還包含odps_ddl目錄,用於後續批量創建表,目錄下的.sql是創建表的語句。

Hive數據如何同步到MaxCompute之實踐講解

使用odps_ddl_runner.py批量創建表和分區:既然DDL已經生成,下一步需要批量創建表。批量創建表依賴MaxCompute的命令行工具(客戶端工具)。工具包一級目錄下的odps_config包含幾個基本參數,其中project_name、access_id、access_key、end_point為必填項。配置完成可以開始批量創建表。批量創建表工具要執行Python命令,python36 bin/odps_ddl_runner.py -h。參數中input參數由meta processer自動生成,odpscmd參數不是必須指定的,它會默認找到所在目錄,不需要單獨配置參數。創建表過程要拉起odps_command工具,基於客戶端工具來向MaxCompute提交建表語句。通過show table查看是否創建瞭五個表,再查看分區是否也建好。若Hive和MaxCompute上的分區創建完成,兩邊的表結構也應相同。

Hive數據如何同步到MaxCompute之實踐講解

使用hive_udtf_sql_runner.py遷移數據:通過命令行python36 bin/hive_udtf_sql_runner.py開始讀output目錄下的.sql語句。查看python36 bin/hive_udtf_sql_runner.py命令的參數,Input_all會批量遷移output下所有數據。若隻想做單表的遷移或者單分區的遷移,需要使用input_single_file參數。parallelism參數表示並行度。數據遷移完成後在MaxCompute中查看表中是否有數據。對比MaxCompute中的數據和Hive中對應表的數據。若其size相同,Hive和MaxCompute中對應表的數據相同,說明已經完整遷移數據。

Hive數據如何同步到MaxCompute之實踐講解

進階功能1:僅生成指定的database或table的metadata:在生成meta時可以不生成整個數據庫的meta,可以指定一個表,生成一個表的meta。Meta carrier 工具提供瞭抓取指定數據庫可表的能力。

Hive數據如何同步到MaxCompute之實踐講解

進階功能2:進靈活的hive到MaxCompute映射:如果用戶需要自定義MaxCompute上的表,可以更改命名,加前綴或後綴,修改自定義字段名。如可以修改MaxCompute DDL裡的json文件實現表名或字段名的自定義。

Hive數據如何同步到MaxCompute之實踐講解

進階功能3:單表或單分區遷移:上面的例子中已經批量遷移五張表,通過drop table inventory,演示單分區遷移。首先若隻需同步一個分區的數據,需要重新創建一張表。執行python36 bin/odps_ddl_runner.py創建表,指定其output目錄,開始批量創建表。此時inventory表以及其五個分區已經創建完成。但創建的分區中沒有數據,可指定其中一個分區,如第二個分區。通過使用input_single_file參數,指定具體分區的sql目錄。可指定目錄為output/dma_demo/hive_udtf_sql/single_partition/inventory_1.sql。執行完成後查看結果,對比在Hive上第二分區的數據和遷移進MaxCompute的單分區的數據,若兩個單分區數據一致,則表示遷移完成。

Hive數據如何同步到MaxCompute之實踐講解

4.使用DataWorks自動遷移數據和工作流MMA1.0版本還未將工作流遷移做成服務化功能,目前還是一個線下工具。客戶需要根據下圖模板生成相應目錄。在做工作流遷移時,如果使用開源組件,可以按照模板將配置放到相應目錄下。如果不使用開源組件,如自研的工作流調度編排服務,可基於標準化模板,按照模板的目錄結構生成用戶自己的工作流數據,打成zip包上傳到DataWorks。目前MMA1.0還需要客戶手動打包文件上傳zip包,後臺會進行自動解析並加載到DataWorks工作流。上傳完成後,DataWorks服務會根據ODPS DDL 批量生成MaxCompute的table。MaxCompute表創建後,DataWorks服務會自動拉起DataX的數據同步任務,完成批量數據遷移。

Hive數據如何同步到MaxCompute之實踐講解

下圖是可配置的項目描述文件project.xml,其中project信息可以自定義。另外一個是工作流描述文件,workflow.xml中是工作流自定義的參數,用戶可以通過編輯配置文件進行修改。

Hive數據如何同步到MaxCompute之實踐講解

5.其他類型作業的遷移方案UDF、MR遷移:用戶直接將jar包上傳到MaxCompute上,開啟2.0支持,開啟對Hive兼容的flag。將Hive兼容的flag設置為true,再在MaxCompute下直接遷移Hive下的UDF和MR。需求註意不支持UDF,MR中直接訪問文件系統,網絡訪問和外部數據源連接。外表遷移:原則上能結構化的數據盡量遷移到MaxCompute內部表。如果必須通過外表訪問外部文件,建議先將數據從HDPS遷移到OSS或OTS,再在MaxCompute中創建外部表,實現對文件的訪問。Spark作業遷移:MMA對開源Spark的語法完全兼容。用戶隻需要下載Spark On MaxCompute客戶端,在編寫Spark SQL時僅增加MaxCompute的連接參數,其它部分和Spark SQL的語法相同。

Hive數據如何同步到MaxCompute之實踐講解

6.查看遷移評估報告創建MaxCompute DDL完成後,除瞭生成DDL會SQL以外,還會生成遷移評估報告report.html文件。遷移評估報告是一個兼容性報告,顯示Hive表的數據結構和MaxCompute表的數據結構之間的映射關系是否有風險,並標識風險等級。另外會給出明細說明以及預警提示,如數據類型不兼容或語法不兼容等。用戶在遷移之前可以查看此報告評估遷移風險。

Hive數據如何同步到MaxCompute之實踐講解

查看更多:https://yqh.aliyun.com/detail/6648?utm_content=g_1000106727

上雲就看雲棲號:更多雲資訊,上雲案例,最佳實踐,產品入門,訪問:https://yqh.aliyun.com/

Published in News by Awesome.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *