阿里云大数据利器Maxcompute学习之-假如你使用过hive
摘要: 如果您是一個大數(shù)據(jù)開發(fā)工程師并且使用過hadoop的hive框架,那么恭喜您,阿里云的大數(shù)據(jù)計算服務-Maxcompute,您已經(jīng)會了90%。這篇文章就來簡單對比下Maxcompute和hive的異同,來方便剛開始使用Maxcompute的用戶,從hive秒速遷移到Maxcompute的使用上。
點此查看原文:http://click.aliyun.com/m/40814/
如果您是一個大數(shù)據(jù)開發(fā)工程師并且使用過hadoop的hive框架,那么恭喜您,阿里云的大數(shù)據(jù)計算服務-Maxcompute,您已經(jīng)會了90%。這篇文章就來簡單對比下Maxcompute和hive的異同,來方便剛開始使用Maxcompute的用戶,從hive秒速遷移到Maxcompute的使用上。
首先,回顧下hive的概念。
1、hive是基于hadoop的,以表的形式來存儲數(shù)據(jù),實際上數(shù)據(jù)是存儲在hdfs上,數(shù)據(jù)庫和表其實是hdfs上的兩層目錄,數(shù)據(jù)是放在表名稱目錄下的,計算還是轉換成mapreduce計算。
2、hive可以通過客戶端命令行和java api操作數(shù)據(jù)
3、hive是hql語言操作表,跟通用sql語言的語法大致相同,可能會多一些符合本身計算的函數(shù)等。hql會解析成mapreduce進行相關邏輯計算
4、hive有分區(qū)分桶的概念
5、hive可以通過命令從本地服務器來上傳下載表數(shù)據(jù)
hive可以通過外部表功能映射hbase和es等框架的數(shù)據(jù)
6、hive任務可以通過hadoop提供的webUI來查看任務進度,日志等
7、hive支持自定義函數(shù)udf,udaf,udtf
8、hive可以通過hue界面化操作
9、hive可以通過sqoop等工具和其他數(shù)據(jù)源交互
10、資源調度依賴于hadoop-yarn平臺
那么如果你對這些hive的功能稍微熟悉的話,現(xiàn)在我告訴你,Maxcompute的功能以及用法和上述hive功能基本一致。
先看下Maxcompute的組件:
MaxCompute 主要服務于批量結構化數(shù)據(jù)的存儲和計算,可以提供海量數(shù)據(jù)倉庫的解決方案以及針對大數(shù)據(jù)的分析建模服務,支持sql查詢計算,自定義函數(shù)udf實現(xiàn)復雜邏輯,mapreduce程序實現(xiàn)更具體的業(yè)務計算,支持Graph面向迭代的圖計算處理框架,提供java api來連接操作sqltask。
是不是初步看起來MaxCompute也是和hive一樣,可以用sql,udf,mr
①文件系統(tǒng)對比
hive的數(shù)據(jù)實際上是在hdfs上,元數(shù)據(jù)一般放在mysql,以表的形式展現(xiàn)。你可以直接到hdfs上查到具體文件。Maxcompute的數(shù)據(jù)是在飛天文件系統(tǒng),對外不暴露文件系統(tǒng),底層優(yōu)化會自動做好。
②hive和Maxcompute客戶端
直接上圖來對比
hive的客戶端:
Maxcompute(原odps)的客戶端:
是不是看起來一致。
實際上
項目空間(Project)是 MaxCompute 的基本組織單元,它類似于傳統(tǒng)數(shù)據(jù)庫的Database 或 Schema 的概念,是進行多用戶隔離和訪問控制的主要邊界 。一個用戶可以同時擁有多個項目空間的權限
配置文件如圖
在客戶端中可以執(zhí)行sql和其他命令。
那么MaxCompute除了命令行客戶端也提供了python和java的sdk來訪問。不說了直接上代碼
import java.util.List;import com.aliyun.odps.Instance;import com.aliyun.odps.Odps;import com.aliyun.odps.OdpsException;import com.aliyun.odps.account.Account;import com.aliyun.odps.account.AliyunAccount;import com.aliyun.odps.data.Record;import com.aliyun.odps.task.SQLTask;public class testSql { //這里accessId和accessKey是阿里云為安全設置的賬戶訪問驗證,類似于密碼,不止是在Maxcompute中使用private static final String accessId = "";private static final String accessKey = “”; //這里是的服務地址private static final String endPoint = "http://service.odps.aliyun.com/api"; //Maxcompute的項目名稱,類似于hive的databaseprivate static final String project = "";private static final String sql = "select category from iris;";public static voidmain(String[] args) {Account account = new AliyunAccount(accessId, accessKey);Odps odps = new Odps(account);odps.setEndpoint(endPoint);odps.setDefaultProject(project);Instance i;try {i = SQLTask.run(odps, sql);i.waitForSuccess();List<Record> records = SQLTask.getResult(i); for(Record r:records){System.out.println(r.get(0).toString());}} catch (OdpsException e) {e.printStackTrace();}}}是不是覺得很親切,跟大多數(shù)數(shù)據(jù)庫的訪問方式一樣。
③odpscmd和hivesql
首先來看建表語句
hive標準建表語句:
maxcompute建表語句:
create table page_view ( page_id bigint comment '頁面ID', page_name string comment '頁面名稱', page_url string comment '頁面URL' ) partitioned by (ds string comment '當前時間,用于分區(qū)字段')從建表語句上明顯的可以感覺出來,maxcompute沒有指定分隔符,沒有指定文件存儲路徑,沒有指定文件的存儲格式。難道是默認的嗎?不。
因為maxcompute是基于阿里云飛天文件系統(tǒng),用戶無需關心文件存儲格式,壓縮格式,存儲路徑等,
這些操作由阿里云來完成,用戶也不用來疲于文件存儲成本,壓縮性價比,讀寫速度等優(yōu)化,可以將精力集中在業(yè)務的開發(fā)上。
另外二者的數(shù)據(jù)的上傳下載;
hive可以通過命令,比如上傳
maxcompute是通過命令工具 tunnel上傳下載,同時支持在上傳過程校驗文件格式臟數(shù)據(jù)等
④分區(qū)和分桶
分區(qū)的概念相信使用hive的同學很熟悉,其實就是在表目錄上再套一層目錄,將數(shù)據(jù)區(qū)分,目的就是提高查詢效率。那么從上面建表語句中可以看出maxcomoute和hive都是支持分區(qū)的,概念用法一致。
關于分桶,上面建表語句中hive中有分桶語句,maxcompute沒有分桶的操作,實際上分桶是把一個大文件根據(jù)某個字段hash成多個小文件,適當?shù)姆滞皶岣卟樵冃?#xff0c;在maxcompute中這些優(yōu)化底層已經(jīng)做了。
⑤外部表功能
hive可以通過外部表的功能來操作例如hbase和es的數(shù)據(jù)。外部表功能maxcompute(2.0版本支持)中也是同樣適用,maxcompute通過外部表來映射阿里云的OTS和OSS兩個數(shù)據(jù)存儲產(chǎn)品來處理非結構化的數(shù)據(jù),例如音頻視頻等??聪陆ū碚Z句:
語法基本一致,maxcompute可以自定義extractor來處理非結構化數(shù)據(jù),可以參考https://yq.aliyun.com/articles/61567來學習
⑥webui
hive任務依賴于hadoop的hdfs和yarn提供的webui訪問??聪聦Ρ?
hadoopwebui
在這里可以通過歷史任務來查看hive任務的執(zhí)行情況。個人覺得頁面不是很友好。
那么在Maxcompute中當然也是可以通過ui來查看任務執(zhí)行狀態(tài),進度,參數(shù),以及任務日志等
首先在任務執(zhí)行的時候,在客戶端會打印出來一串http地址我們叫做logview,復制下來在瀏覽器中打開即可。
如圖
在瀏覽器中打開
總體上一看,非常清晰明了。任務開始時間結束時間,任務狀態(tài),綠色進度條。很方便的獲取任務的總體情況
點擊Detail按鈕可以看更具體的調度,日志等
點擊jsonsumary可以看到非常詳細的執(zhí)行過程
那么可以看到Maxcompute的webui還是比較友好的,方便用戶很快定位問題。調度方面這里也說一下是由阿里云統(tǒng)一調度,用戶無需關心優(yōu)化。
⑦自定義函數(shù)的支持
hive和Maxcompute都支持自定函數(shù)。同樣是三種,udf,udtf,udaf。
代碼寫法一致。最大的區(qū)別在于數(shù)據(jù)類型的支持上。
目前Maxcompute支持的數(shù)據(jù)類型是
UDF 支持 MaxCompute SQL 的數(shù)據(jù)類型有:Bigint, String, Double, Boolean 類型 。MaxCompute 數(shù)據(jù)類型與 Java 類型的對應關系如下:
注意:
java 中對應的數(shù)據(jù)類型以及返回值數(shù)據(jù)類型是對象,首字母請務必大寫;
目前暫不支持 datetime 數(shù)據(jù)類型,建議可以轉換成 String 類型傳入處理 。
SQL 中的 NULL 值通過 Java 中的 NULL 引用表示,因此 Java primitive type 是不允許使用的,因為無法表示 SQL 中的 NULL 值 。
所以不同于hive中支持各種類型。
看maxcompute代碼示例
import com.aliyun.odps.udf.UDF;public final class Lower extends UDF {public String evaluate(String s) {if (s == null) { return null; }return s.toLowerCase();}}用法一致,所以使用hive的用戶基本可以直接遷移。
在此強調一下,在MaxCompute中處于安全層面的考慮對udf和mr是有java沙箱限制的,比如在udf代碼中不能啟用其他線程等等,具體可以參考
https://help.aliyun.com/document_detail/27967.html
那么可以看到Maxcompute的webui還是比較友好的,方便用戶很快定位問題。調度方面這里也說一下是由阿里云統(tǒng)一調度,用戶無需關心優(yōu)化。
⑧界面化操作。
談到界面化的操作,阿里云的產(chǎn)品基本上都是界面化操作,可拖拽等等,開發(fā)門檻非常低,所以也是非常適合初學大數(shù)據(jù)或者公司沒有相關開發(fā)人力的公司。
hive可以借助hue工具來操作查詢數(shù)據(jù),但是實際上交互性不是很強。
那么這里就將Maxcompute的界面化操作以及數(shù)據(jù)同步,權限控制,數(shù)據(jù)管理,和其他數(shù)據(jù)源交互,定時調度等簡單介紹下,就是阿里云的產(chǎn)品-大數(shù)據(jù)開發(fā)套件,目前是免費使用的。需要開通Maxcompute項目進入操作。等不及了直接上圖
1,Maxcompute sql 查詢界面化
maxcompute mapreduce界面化配置
Maxcompute數(shù)據(jù)同步界面化
hive可以通過sqoop工具和多種數(shù)據(jù)源進行數(shù)據(jù)同步。Maxcompute在大數(shù)據(jù)開發(fā)套件中也是非常方便的和其他數(shù)據(jù)源進行同步
并且可以配置流程控制,調度
是不是很神奇,驚不驚喜,意不意外。具體的使用還是大家親自體驗,這里就不一一介紹了。
那最后來看下hadoop-mapreduce和Maxcompute-mapreduce的使用對比。還是用大家最喜歡的wordcount來做示例。
介紹之前還是要強調一下,1,Maxcompute-mapreduce輸入輸出都是表(或者分區(qū))的形式,如果需要引用其他文件,需要先上傳2,Maxcompute-mapreduce也是有沙箱限制,不允許在代碼中啟用別的框架線程等。
hadoop-mr代碼就不貼了,直接上Maxcompute-mapreduce代碼
再看job主函數(shù)配置,代碼邏輯是通用的
public static void main(String[] args) throws Exception {if (args.length != 2) {System.err.println("Usage: WordCount <in_table> <out_table>");System.exit(2);}JobConf job = new JobConf();job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(SumCombiner.class);job.setReducerClass(SumReducer.class); //這里可以直接指定map端輸出的字段job.setMapOutputKeySchema(SchemaUtils.fromString("word:string"));job.setMapOutputValueSchema(SchemaUtils.fromString("count:bigint")); //這里輸入出需要是表活著分區(qū)InputUtils.addTable(TableInfo.builder().tableName(args[0]).build(), job);OutputUtils.addTable(TableInfo.builder().tableName(args[1]).build(), job);JobClient.runJob(job);}那么基本上主要的功能對比差不多了,大家可以發(fā)現(xiàn),如果您是一位使用過hive的開發(fā)人員可以秒遷移到maxcompute上,更加方便簡潔的來做開發(fā),將開發(fā)人員從苦逼的加班中解放出來,實際上公司節(jié)省了大量的運維成本,開發(fā)人力成本等等,將主要精力放在業(yè)務開發(fā)。如果非要問我hive和maxcompute的性能對比,那我只能告訴它是經(jīng)歷雙十一考驗過的。
總結:如果說工業(yè)革命是將人們從體力勞動解放出來,那么如今的互聯(lián)網(wǎng)革命,尤其是云計算大數(shù)據(jù)的飛速發(fā)展是將人們從腦力中解放出來。
即使你是一個人的研發(fā)公司,阿里云也可以讓你有對抗世界級企業(yè)的能力。你,不是一個人在戰(zhàn)斗。
總結
以上是生活随笔為你收集整理的阿里云大数据利器Maxcompute学习之-假如你使用过hive的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何像阿里巴巴一样高效跨企业项目协作
- 下一篇: 京信通信:数据智能为生产调试“增效瘦身”