天天看點

Hive資料如何同步到MaxCompute之實踐講解

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

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

精彩視訊回顧:

Hive資料如何同步到MaxCompute

以下内容根據演講視訊以及PPT整理而成。

本次分享主要圍繞以下兩個方面:

一、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之實踐講解

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之實踐講解

如在資料同步過程中遇見其它問題,點選連結加入 MaxCompute開發者社群2群

https://wx.dingtalk.com/invite-page/weixin.html?spm=a2c4e.10696291.0.0.559219a4ezTb2M&bizSource=____source____&corpId=dingb682fb31ec15e09f35c2f4657eb6378f&inviterUid=E3F28CD2308408A8&encodeDeptId=0054DC2B53AFE745

或掃碼加入

Hive資料如何同步到MaxCompute之實踐講解