1. 程式人生 > >hive學習筆記-持續更新

hive學習筆記-持續更新

hive --適用於ETL方面的工作
首先我們要知道hive到底是做什麼的。下面這幾段文字很好的描述了hive的特性:


  1.hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。


  2.Hive是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL),這是一種可以儲存、查詢和分析儲存在 Hadoop 中的大規模資料的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL,它允許熟悉 SQL 的使用者查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。 


  hive和hadoop的關係:發出sql,hive處理,轉換成mapreduce,提交任務到hadoop,mapreduce執行,儲存在hdfs




  使用hive的命令列介面,感覺很像操作關係資料庫,但是hive和關係資料庫還是有很大的不同,下面我就比較下hive與關係資料庫的區別,具體如下:


1.hive和關係資料庫儲存檔案的系統不同,hive使用的是hadoop的HDFS(hadoop的分散式檔案系統),關係資料庫則是伺服器本地的檔案系統;
2.hive使用的計算模型是mapreduce,而關係資料庫則是自己設計的計算模型;
3.關係資料庫都是為實時查詢的業務進行設計的,而hive則是為海量資料做資料探勘設計的,實時性很差;實時性的區別導致hive的應用場景和關係資料庫有很大的不同;
4.Hive很容易擴充套件自己的儲存能力和計算能力,這個是繼承hadoop的,而關係資料庫在這個方面要比資料庫差很多。



1.關係資料庫裡,表的載入模式是在資料載入時候強制確定的(表的載入模式是指資料庫儲存資料的檔案格式),如果載入資料時候發現載入的資料不符合模式,關係資料庫則會拒絕載入資料,這個就叫“寫時模式”,寫時模式會在資料載入時候對資料模式進行檢查校驗的操作。Hive在載入資料時候和關係資料庫不同,hive在載入資料時候不會對資料進行檢查,也不會更改被載入的資料檔案,而檢查資料格式的操作是在查詢操作時候執行,這種模式叫“讀時模式”。在實際應用中,寫時模式在載入資料時候會對列進行索引,對資料進行壓縮,因此載入資料的速度很慢,但是當資料載入好了,我們去查詢資料的時候,速度很快。但是當我們的資料是非結構化,儲存模式也是未知時候,關係資料操作這種場景就麻煩多了,這時候hive就會發揮它的優勢。

2.關係資料庫一個重要的特點是可以對某一行或某些行的資料進行更新、刪除操作,hive不支援對某個具體行的操作,hive對資料的操作只支援覆蓋原資料和追加資料。Hive也不支援事務和索引。更新、事務和索引都是關係資料庫的特徵,這些hive都不支援,也不打算支援,原因是hive的設計是海量資料進行處理,全資料的掃描時常態,針對某些具體資料進行操作的效率是很差的,對於更新操作,hive是通過查詢將原表的資料進行轉化最後儲存在新表裡,這和傳統資料庫的更新操作有很大不同。
3.Hive也可以在hadoop做實時查詢上做一份自己的貢獻,那就是和hbase整合,hbase可以進行快速查詢,但是hbase不支援類SQL的語句,那麼此時hive可以給hbase提供sql語法解析的外殼,可以用類sql語句操作hbase資料庫。


資料倉庫是一種結構體系,而資料庫是一種具體技術,這就是最根本的區別
資料庫屬於操作型系統,資料倉庫屬於分析性系統



Pig 是在MapReduce上構建的查詢語言(SQL-like),適用於大量平行計算。


Chukwa 是基於Hadoop叢集中監控系統,簡單來說就是一個“看門狗” (WatchDog)


Hive 是DataWareHouse 和 Map Reduce交集,適用於ETL方面的工作。


HBase 是一個面向列的分散式資料庫。


Map Reduce 是Google提出的一種演算法,用於超大型資料集的並行運算。


HDFS 可以支援千萬級的大型分散式檔案系統。


Zookeeper 提供的功能包括:配置維護、名字服務、分散式同步、組服務等,用於分散式系統的可靠協調系統。


Avro 是一個數據序列化系統,設計用於支援大批量資料交換的應用。






HBase--Hadoop database

HBase是一個高可靠性、高效能、面向列、可伸縮的分散式儲存系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化儲存叢集。
HBase不同於一般的關係資料庫,它是一個適合於非結構化資料儲存的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。