Hadoop 上的HIVE,HBase和Pig Latin 數據流編程語言

hive是基於hadoop的數據倉庫。

Hive是一種建立在Hadoop文件系統上的數據倉庫架構,對存儲在HDFS中的數據進行分析和管理工具。    

HBase是一個分佈式的、面向列的開源數據庫。HBase – Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構存儲集羣。HBase利用Hadoop HDFS作爲其文件存儲系統。HBase同樣利用Hadoop MapReduce來處理HBase中的海量數據;HBase利用Zookeeper作爲協同服務。Pig和Hive還爲HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的非常簡單。 Sqoop則爲HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的非常方便。

Sqoop是讓hadoop技術支持的clouder公司開發的一個在關係數據庫和hdfs,hive之間數據導入導出的一個工具。

Pig是一種編程語言,它簡化了Hadoop常見的工作任務。Pig可加載數據、表達轉換數據以及存儲最終結果。Pig內置的操作使得半結構化數據變得有意義(如日誌文件)。同時Pig可擴展使用Java中添加的自定義數據類型並支持數據轉換。
Hive在Hadoop中扮演數據倉庫的角色。Hive添加數據的結構在HDFS(hive superimposes structure on data in HDFS),並允許使用類似於SQL語法進行數據查詢。與Pig一樣,Hive的核心功能是可擴展的。
Hive更適合於數據倉庫的任務,Hive主要用於靜態的結構以及需要經常分析的工作。Hive與SQL相似促使其成爲Hadoop與其他BI工具結合的理想交集。Pig賦予開發人員在大數據集領域更多的靈活性,並允許開發簡潔的腳本用於轉換數據流以便嵌入到較大的應用程序。Pig相比Hive相對輕量,它主要的優勢是相比於直接使用Hadoop Java APIs可大幅削減代碼量。
本質上說說Pig與Hive。經過Pig Latin的轉換後變成了一道MapReduce的作業,通過MapReduce多個線程,進程或者獨立系統並行執行處理的結果集進行分類和歸納。Map() 和 Reduce() 兩個函數會並行運行,即使不是在同一的系統的同一時刻也在同時運行一套任務,當所有的處理都完成之後,結果將被排序,格式化,並且保存到一個文件。Pig利用MapReduce將計算分成兩個階段,第一個階段分解成爲小塊並且分佈到每一個存儲數據的節點上進行執行,對計算的壓力進行分散,第二個階段聚合第一個階段執行的這些結果,這樣可以達到非常高的吞吐量,通過不多的代碼和工作量就能夠驅動上千臺機器並行計算,充分的利用計算機的資源,打消運行中的瓶頸。
也就是說,Pig最大的作用就是對mapreduce算法(框架)實現了一套shell腳本 ,類似我們通常熟悉的SQL語句,在Pig中稱之爲Pig Latin,在這套腳本中我們可以對加載出來的數據進行排序、過濾、求和、分組(group by)、關聯(Joining),Pig也可以由用戶自定義一些函數對數據集進行操作,也就是傳說中的UDF(user-defined functions)。

Hive定義了一種類似SQL的查詢語言,被稱爲HQL,對於熟悉SQL的用戶可以直接利用Hive來查詢數據。同時,這個語言也允許熟悉 MapReduce 開發者們開發自定義的mappers和reducers來處理內建的mappers和reducers無法完成的複雜的分析工作。Hive可以允許用戶編寫自己定義的函數UDF,來在查詢中使用。Hive中有3種UDF:User Defined Functions(UDF)、User Defined Aggregation Functions(UDAF)、User Defined Table Generating Functions(UDTF)。

Hive已經是一個成功的Apache項目,很多組織把它用作一個通用的、可伸縮的數據處理平臺。

   Hive和傳統的關係型數據庫有很大的區別,Hive將外部的任務解析成一個MapReduce可執行計劃,而啓動MapReduce是一個高延遲的一件事,每次提交任務和執行任務都需要消耗很多時間,這也就決定Hive只能處理一些高延遲的應用(如果你想處理低延遲的應用,你可以去考慮一下Hbase)。同時,由於設計的目標不一樣,Hive目前還不支持事務;不能對錶數據進行修改(不能更新、刪除、插入;只能通過文件追加數據、重新導入數據);不能對列建立索引(但是Hive支持索引的建立,但是不能提高Hive的查詢速度。如果你想提高Hive的查詢速度,請學習Hive的分區、桶的應用)。

同時補充一下hive與hbase的聯繫與區別:
共同點:
1.hbase與hive都是架構在hadoop之上的。都是用hadoop作爲底層存儲

區別:
2.Hive是建立在Hadoop之上爲了減少MapReduce jobs編寫工作的批處理系統,HBase是爲了支持彌補Hadoop對實時操作的缺陷的項目 。
3.想象你在操作RMDB數據庫,如果是全表掃描,就用Hive+Hadoop,如果是索引訪問,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以從5分鐘到數小時不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不存儲和計算數據,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。
6.hive借用hadoop的MapReduce來完成一些hive中的命令的執行
7.hbase是物理表,不是邏輯表,提供一個超大的內存hash表,搜索引擎通過它來存儲索引,方便查詢操作。
8.hbase是列存儲。
9.hdfs作爲底層存儲,hdfs是存放文件的系統,而Hbase負責組織文件。
10.hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。




http://blog.csdn.net/lifuxiangcaohui/article/details/40145859

http://zhidao.baidu.com/link?url=PtJ7CweeOVb1XQFk1R95WgitdMmlJlc70VRBIj_eSaUFYZsbd9LONXiV656KIgIeMdMvMoDiD2edhT3p9DzY0q

http://blog.csdn.net/rzhzhz/article/details/7557607

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章