阿里云大数据利器Maxcompute学习之-假如你使用过hive
摘要: 如果您是一個大數據開發工程師并且使用過hadoop的hive框架,那么恭喜您,阿里云的大數據計算服務-Maxcompute,您已經會了90%。這篇文章就來簡單對比下Maxcompute和hive的異同,來方便剛開始使用Maxcompute的用戶,從hive秒速遷移到Maxcompute的使用上。
點此查看原文:http://click.aliyun.com/m/40814/
如果您是一個大數據開發工程師并且使用過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(原odps)的客戶端:
是不是看起來一致。
實際上
項目空間(Project)是 MaxCompute 的基本組織單元,它類似于傳統數據庫的Database 或 Schema 的概念,是進行多用戶隔離和訪問控制的主要邊界 。一個用戶可以同時擁有多個項目空間的權限
配置文件如圖
在客戶端中可以執行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();}}}是不是覺得很親切,跟大多數數據庫的訪問方式一樣。
③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 '當前時間,用于分區字段')從建表語句上明顯的可以感覺出來,maxcompute沒有指定分隔符,沒有指定文件存儲路徑,沒有指定文件的存儲格式。難道是默認的嗎?不。
因為maxcompute是基于阿里云飛天文件系統,用戶無需關心文件存儲格式,壓縮格式,存儲路徑等,
這些操作由阿里云來完成,用戶也不用來疲于文件存儲成本,壓縮性價比,讀寫速度等優化,可以將精力集中在業務的開發上。
另外二者的數據的上傳下載;
hive可以通過命令,比如上傳
maxcompute是通過命令工具 tunnel上傳下載,同時支持在上傳過程校驗文件格式臟數據等
④分區和分桶
分區的概念相信使用hive的同學很熟悉,其實就是在表目錄上再套一層目錄,將數據區分,目的就是提高查詢效率。那么從上面建表語句中可以看出maxcomoute和hive都是支持分區的,概念用法一致。
關于分桶,上面建表語句中hive中有分桶語句,maxcompute沒有分桶的操作,實際上分桶是把一個大文件根據某個字段hash成多個小文件,適當的分桶會提高查詢效率,在maxcompute中這些優化底層已經做了。
⑤外部表功能
hive可以通過外部表的功能來操作例如hbase和es的數據。外部表功能maxcompute(2.0版本支持)中也是同樣適用,maxcompute通過外部表來映射阿里云的OTS和OSS兩個數據存儲產品來處理非結構化的數據,例如音頻視頻等。看下建表語句:
語法基本一致,maxcompute可以自定義extractor來處理非結構化數據,可以參考https://yq.aliyun.com/articles/61567來學習
⑥webui
hive任務依賴于hadoop的hdfs和yarn提供的webui訪問。看下對比
hadoopwebui
在這里可以通過歷史任務來查看hive任務的執行情況。個人覺得頁面不是很友好。
那么在Maxcompute中當然也是可以通過ui來查看任務執行狀態,進度,參數,以及任務日志等
首先在任務執行的時候,在客戶端會打印出來一串http地址我們叫做logview,復制下來在瀏覽器中打開即可。
如圖
在瀏覽器中打開
總體上一看,非常清晰明了。任務開始時間結束時間,任務狀態,綠色進度條。很方便的獲取任務的總體情況
點擊Detail按鈕可以看更具體的調度,日志等
點擊jsonsumary可以看到非常詳細的執行過程
那么可以看到Maxcompute的webui還是比較友好的,方便用戶很快定位問題。調度方面這里也說一下是由阿里云統一調度,用戶無需關心優化。
⑦自定義函數的支持
hive和Maxcompute都支持自定函數。同樣是三種,udf,udtf,udaf。
代碼寫法一致。最大的區別在于數據類型的支持上。
目前Maxcompute支持的數據類型是
UDF 支持 MaxCompute SQL 的數據類型有:Bigint, String, Double, Boolean 類型 。MaxCompute 數據類型與 Java 類型的對應關系如下:
注意:
java 中對應的數據類型以及返回值數據類型是對象,首字母請務必大寫;
目前暫不支持 datetime 數據類型,建議可以轉換成 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還是比較友好的,方便用戶很快定位問題。調度方面這里也說一下是由阿里云統一調度,用戶無需關心優化。
⑧界面化操作。
談到界面化的操作,阿里云的產品基本上都是界面化操作,可拖拽等等,開發門檻非常低,所以也是非常適合初學大數據或者公司沒有相關開發人力的公司。
hive可以借助hue工具來操作查詢數據,但是實際上交互性不是很強。
那么這里就將Maxcompute的界面化操作以及數據同步,權限控制,數據管理,和其他數據源交互,定時調度等簡單介紹下,就是阿里云的產品-大數據開發套件,目前是免費使用的。需要開通Maxcompute項目進入操作。等不及了直接上圖
1,Maxcompute sql 查詢界面化
maxcompute mapreduce界面化配置
Maxcompute數據同步界面化
hive可以通過sqoop工具和多種數據源進行數據同步。Maxcompute在大數據開發套件中也是非常方便的和其他數據源進行同步
并且可以配置流程控制,調度
是不是很神奇,驚不驚喜,意不意外。具體的使用還是大家親自體驗,這里就不一一介紹了。
那最后來看下hadoop-mapreduce和Maxcompute-mapreduce的使用對比。還是用大家最喜歡的wordcount來做示例。
介紹之前還是要強調一下,1,Maxcompute-mapreduce輸入輸出都是表(或者分區)的形式,如果需要引用其他文件,需要先上傳2,Maxcompute-mapreduce也是有沙箱限制,不允許在代碼中啟用別的框架線程等。
hadoop-mr代碼就不貼了,直接上Maxcompute-mapreduce代碼
再看job主函數配置,代碼邏輯是通用的
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")); //這里輸入出需要是表活著分區InputUtils.addTable(TableInfo.builder().tableName(args[0]).build(), job);OutputUtils.addTable(TableInfo.builder().tableName(args[1]).build(), job);JobClient.runJob(job);}那么基本上主要的功能對比差不多了,大家可以發現,如果您是一位使用過hive的開發人員可以秒遷移到maxcompute上,更加方便簡潔的來做開發,將開發人員從苦逼的加班中解放出來,實際上公司節省了大量的運維成本,開發人力成本等等,將主要精力放在業務開發。如果非要問我hive和maxcompute的性能對比,那我只能告訴它是經歷雙十一考驗過的。
總結:如果說工業革命是將人們從體力勞動解放出來,那么如今的互聯網革命,尤其是云計算大數據的飛速發展是將人們從腦力中解放出來。
即使你是一個人的研發公司,阿里云也可以讓你有對抗世界級企業的能力。你,不是一個人在戰斗。
總結
以上是生活随笔為你收集整理的阿里云大数据利器Maxcompute学习之-假如你使用过hive的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何像阿里巴巴一样高效跨企业项目协作
- 下一篇: 京信通信:数据智能为生产调试“增效瘦身”