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

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

演講嘉賓簡介:阿里雲智能產品專家-雲花html

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

如下內容根據演講視頻以及PPT整理而成。sql

本次分享主要圍繞如下兩個方面:數據庫

1、MMA功能介紹、技術架構和原理
2、MMA數據遷移操做演示json

1、MMA功能介紹、技術架構和原理

1.MMA功能介紹服務器

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

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架構對接業務系統。架構

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做業至關於多個表或者多個分區並行的數據的同步。

2、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服務的網絡訪問。

2.下載和編譯工具包

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

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信息寫在下面。

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

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

使用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_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中對應表的數據相同,說明已經完整遷移數據。

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

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

進階功能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的單分區的數據,若兩個單分區數據一致,則表示遷移完成。

4.使用DataWorks自動遷移數據和工做流

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

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

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的語法相同。

6.查看遷移評估報告

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


本文做者:亢海鵬

原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索