天天看點

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

如果您是一個大資料開發工程師并且使用過hadoop的hive架構,那麼恭喜您,阿裡雲的大資料計算服務-maxcompute,您已經會了90%。這篇文章就來簡單對比下maxcompute和hive的異同,來友善剛開始使用maxcompute的使用者,從hive秒速遷移到maxcompute的使用上。

首先,回顧下hive的概念。

1、hive是基于hadoop的,以表的形式來存儲資料,實際上資料是存儲在hdfs上,資料庫和表其實是hdfs上的兩層目錄,資料是放在表名稱目錄下的,計算還是轉換成mapreduce計算。

2、hive可以通過用戶端指令行和java api操作資料

3、hive是hql語言操作表,跟通用sql語言的文法大緻相同,可能會多一些符合本身計算的函數等。hql會解析成mapreduce進行相關邏輯計算

4、hive有分區分桶的概念

5、hive可以通過指令從本地伺服器來上傳下載下傳表資料

hive可以通過外部表功能映射hbase和es等架構的資料

6、hive任務可以通過hadoop提供的webui來檢視任務進度,日志等

7、hive支援自定義函數udf,udaf,udtf

8、hive可以通過hue界面化操作

9、hive可以通過sqoop等工具和其他資料源互動

10、資源排程依賴于hadoop-yarn平台

那麼如果你對這些hive的功能稍微熟悉的話,現在我告訴你,maxcompute的功能以及用法和上述hive功能基本一緻。

先看下maxcompute的元件:

maxcompute 主要服務于批量結構化資料的存儲和計算,可以提供海量資料倉庫的解決方案以及針對大資料的分析模組化服務,支援sql查詢計算,自定義函數udf實作複雜邏輯,mapreduce程式實作更具體的業務計算,支援graph面向疊代的圖計算處理架構,提供java api來連接配接操作sqltask。

是不是初步看起來maxcompute也是和hive一樣,可以用sql,udf,mr

①檔案系統對比

hive的資料實際上是在hdfs上,中繼資料一般放在mysql,以表的形式展現。你可以直接到hdfs上查到具體檔案。maxcompute的資料是在飛天檔案系統,對外不暴露檔案系統,底層優化會自動做好。

②hive和maxcompute用戶端

直接上圖來對比

hive的用戶端:

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

maxcompute(原odps)的用戶端:

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

是不是看起來一緻。

實際上

項目空間(project)是 maxcompute 的基本組織單元,它類似于傳統資料庫的database 或 schema 的概念,是進行多使用者隔離和通路控制的主要邊界 。一個使用者可以同時擁有多個項目空間的權限

配置檔案如圖

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

在用戶端中可以執行sql和其他指令。

那麼maxcompute除了指令行用戶端也提供了python和java的sdk來通路。不說了直接上代碼

是不是覺得很親切,跟大多數資料庫的通路方式一樣。

③odpscmd和hivesql

首先來看建表語句

hive标準建表語句:

maxcompute建表語句:

從建表語句上明顯的可以感覺出來,maxcompute沒有指定分隔符,沒有指定檔案存儲路徑,沒有指定檔案的存儲格式。難道是預設的嗎?不。

因為maxcompute是基于阿裡雲飛天檔案系統,使用者無需關心檔案存儲格式,壓縮格式,存儲路徑等,

這些操作由阿裡雲來完成,使用者也不用來疲于檔案存儲成本,壓縮成本效益,讀寫速度等優化,可以将精力集中在業務的開發上。

另外二者的資料的上傳下載下傳;

hive可以通過指令,比如上傳

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

maxcompute是通過指令工具 tunnel上傳下載下傳,同時支援在上傳過程校驗檔案格式髒資料等

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

④分區和分桶

分區的概念相信使用hive的同學很熟悉,其實就是在表目錄上再套一層目錄,将資料區分,目的就是提高查詢效率。那麼從上面建表語句中可以看出maxcomoute和hive都是支援分區的,概念用法一緻。

關于分桶,上面建表語句中hive中有分桶語句,maxcompute沒有分桶的操作,實際上分桶是把一個大檔案根據某個字段hash成多個小檔案,适當的分桶會提高查詢效率,在maxcompute中這些優化底層已經做了。

⑤外部表功能

hive可以通過外部表的功能來操作例如hbase和es的資料。外部表功能maxcompute(2.0版本支援)中也是同樣适用,maxcompute通過外部表來映射阿裡雲的ots和oss兩個資料存儲産品來處理非結構化的資料,例如音頻視訊等。看下建表語句:

⑥webui

hive任務依賴于hadoop的hdfs和yarn提供的webui通路。看下對比

hadoopwebui

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

在這裡可以通過曆史任務來檢視hive任務的執行情況。個人覺得頁面不是很友好。

那麼在maxcompute中當然也是可以通過ui來檢視任務執行狀态,進度,參數,以及任務日志等

首先在任務執行的時候,在用戶端會列印出來一串http位址我們叫做logview,複制下來在浏覽器中打開即可。

如圖

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

在浏覽器中打開

總體上一看,非常清晰明了。任務開始時間結束時間,任務狀态,綠色進度條。很友善的擷取任務的總體情況

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

點選detail按鈕可以看更具體的排程,日志等

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

點選jsonsumary可以看到非常詳細的執行過程

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

那麼可以看到maxcompute的webui還是比較友好的,友善使用者很快定位問題。排程方面這裡也說一下是由阿裡雲統一排程,使用者無需關心優化。

⑦自定義函數的支援

hive和maxcompute都支援自定函數。同樣是三種,udf,udtf,udaf。

代碼寫法一緻。最大的差別在于資料類型的支援上。

目前maxcompute支援的資料類型是

udf 支援 maxcompute sql 的資料類型有:bigint, string, double, boolean 類型 。maxcompute 資料類型與 java 類型的對應關系如下:

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

注意:

java 中對應的資料類型以及傳回值資料類型是對象,首字母請務必大寫;

目前暫不支援 datetime 資料類型,建議可以轉換成 string 類型傳入處理 。

sql 中的 null 值通過 java 中的 null 引用表示,是以 java primitive type 是不允許使用的,因為無法表示 sql 中的 null 值 。

是以不同于hive中支援各種類型。

看maxcompute代碼示例

用法一緻,是以使用hive的使用者基本可以直接遷移。

在此強調一下,在maxcompute中處于安全層面的考慮對udf和mr是有java沙箱限制的,比如在udf代碼中不能啟用其他線程等等,具體可以參考

<a href="https://help.aliyun.com/document_detail/27967.html" target="_blank">https://help.aliyun.com/document_detail/27967.html</a>

⑧界面化操作。

談到界面化的操作,阿裡雲的産品基本上都是界面化操作,可拖拽等等,開發門檻非常低,是以也是非常适合初學大資料或者公司沒有相關開發人力的公司。

hive可以借助hue工具來操作查詢資料,但是實際上互動性不是很強。

那麼這裡就将maxcompute的界面化操作以及資料同步,權限控制,資料管理,和其他資料源互動,定時排程等簡單介紹下,就是阿裡雲的産品-大資料開發套件,目前是免費使用的。需要開通maxcompute項目進入操作。等不及了直接上圖

1,maxcompute sql 查詢界面化

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

maxcompute mapreduce界面化配置

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

maxcompute資料同步界面化

hive可以通過sqoop工具和多種資料源進行資料同步。maxcompute在大資料開發套件中也是非常友善的和其他資料源進行同步

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

并且可以配置流程控制,排程

阿裡雲大資料利器Maxcompute學習之-假如你使用過hive

是不是很神奇,驚不驚喜,意不意外。具體的使用還是大家親自體驗,這裡就不一一介紹了。

那最後來看下hadoop-mapreduce和maxcompute-mapreduce的使用對比。還是用大家最喜歡的wordcount來做示例。

介紹之前還是要強調一下,1,maxcompute-mapreduce輸入輸出都是表(或者分區)的形式,如果需要引用其他檔案,需要先上傳2,maxcompute-mapreduce也是有沙箱限制,不允許在代碼中啟用别的架構線程等。

hadoop-mr代碼就不貼了,直接上maxcompute-mapreduce代碼

再看job主函數配置,代碼邏輯是通用的

那麼基本上主要的功能對比差不多了,大家可以發現,如果您是一位使用過hive的開發人員可以秒遷移到maxcompute上,更加友善簡潔的來做開發,将開發人員從苦逼的加班中解放出來,實際上公司節省了大量的運維成本,開發人力成本等等,将主要精力放在業務開發。如果非要問我hive和maxcompute的性能對比,那我隻能告訴它是經曆雙十一考驗過的。

總結:如果說工業革命是将人們從體力勞動解放出來,那麼如今的網際網路革命,尤其是雲計算大資料的飛速發展是将人們從腦力中解放出來。

有對大資料技術感興趣的,可以加筆者的微信 wx4085116.目前筆者已經從阿裡離職,部落格不代表阿裡立場。筆者開了一個大資料教育訓練班。有興趣的加我。

另外我們這邊長期對外提供優秀的大資料開發工程師人才。

帶領訓練,做過多個項目。主要技能為:

熟悉hadoop的系統架構,熟練使用mapreduce、hive、hbase等主流技術架構以及cdh版本的搭建

熟悉spark原理和執行流程,熟練使用spark core、spark streaming、sparksql,spark mllib

熟悉機器學習主流算法:分類、回歸、預測等。有簡單項目經驗,熟悉python主流庫的使用

熟悉阿裡雲大資料平台等産品:如maxcompute、dataworks、quick-bi、datav、阿裡雲流計算-flink、rds

熟悉資料資料倉庫建設,熟練使用hive進行海量資料統計分析、優化。可以進行使用者畫像分析、資料模組化,各項名額統計分析

熟練操作mysql、redis、hbase資料庫以及elasticsearch搜尋引擎。 快速上手幹活。