擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]

擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]

擴充Hadoop功能的軍火庫 [Hive  可用SQL語法存取Hadoop資料]


資料來源:https://www.ithome.com.tw/node/73980


    HDFS和MapReduce只是打造Hadoop平臺最基本的核心套件,在Apache基金會的網站中還有其他的相關開源套件,共同組成了一個Hadoop體系(Hadoop Ecosystem)。

    透過這些相關專案的延伸,開發人員就算不懂Java,也可以用特定Script語言來撰寫Hadoop上的MapReduce程式,甚至可以用SQL語法來查詢HDFS上的資料。這些周邊專案可說是大幅強化Hadoop功能的軟體軍火庫,想要善用Hadoop的開發人員不可錯過。其中重要的周邊專案包括HBase、Hive 、ZooKeeper、Pig和Mahout。



HBase  能容納PB資料量的分散式資料庫

    HBase是專門用於Hadoop檔案系統上的資料庫系統,採取Column-Oriented 資料庫設計,不同於傳統的關聯式資料庫,例如沒有資料表、Schema資料架構等功能,而是採用Key-Value形式的資料架構,每筆資料都有一個Key值對應到一個Value值,再透過多維度的對應關係來建立類似表格效果的資料架構。如此就能採取分散式儲存方式,可以擴充到數千臺伺服器,以應付PB等級的資料處理。


Hive  可用SQL語法存取Hadoop資料

    Hive是建置在HDFS上的一套分散式資料倉儲系統,可讓使用者以慣用的SQL語法,來存取Hadoop檔案中的大型資料集,例如可以使用Join、Group by、Order by等,而這個語法稱為Hive QL。不過,Hive QL和SQL並非完全相同,例如Hive就不支援Store Procedure、Trigger等功能。

    Hive會將使用者輸入的Hive QL指令編譯成Java程式,再來存取HDFS檔案系統上的資料,所以,執行效率依指令複雜度和處理的資料量而異,可能有數秒鐘,甚至是數分鐘的延遲。和HBase相比,Hive容易使用且彈性高,但執行速度較慢。不少資料庫系統,都是透過先連結到Hive,才能與Hadoop整合。例如微軟就是透過Hive ODBC驅動程式,將SQL指令轉換成Hive QL,讓Excel可以存取Hadoop上的資料。

    在同一個Hadoop叢集中,Hive可以存取HBase上的資料HBase上的資料對應成Hive內的一個表格


Pig  不懂Java開發也能寫MapReduce

    Pig提供了一個Script語言Pig Latin,語法簡單,類似可讀性高的高階Basic語言,可用來撰寫MapReduce程式。Pig會自動將這些腳本程式轉換,成為能在Hadoop中執行的MapReduce Java程式。

    因此,使用者即使不懂Java也能撰寫出MapReduce。不過,一般來說,透過Pig腳本程式轉換,會比直接用Java撰寫MapReduce的效能降低了25%。


ZooKeeper  讓Hadoop內部伺服器能協同運作

    Zookeeper是監控和協調Hadoop分散式運作的集中式服務,可提供各個伺服器的配置和運作狀態資訊,用於提供不同Hadoop系統角色之間的工作協調。

    以HBase資料庫為例,其中有兩種伺服器角色:Region伺服器角色和Master伺服器角色,系統會自動透過ZooKeeper監看Master伺服器的狀態,一旦Master的運作資訊消失,代表當機或網路斷線,HBase就會選出另一臺Region伺服器成為Mater角色來負責管理工作。


Mahout  立即可用的常用MapReduce函式庫

    在Hadoop中,開發人員必須將資料處理作法拆解成可分散運算的Map和Reduce程式,因為思考邏輯和常見的程式開發邏輯不同,所以開發難度很高。Mahout則提供了一個常用的MapReduce函式庫,常見的數值分析方法、叢集分類和篩選方式,都已經有對應的MapReduce函數可呼叫,開發人員就不必再重複開發一次。

One thought on “擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]

  1. Hive、Hbase、mysql區別

    https://www.itread01.com/p/1135524.html

    Hive和HBase的區別
    Hive是為了簡化編寫MapReduce程式而生的,使用MapReduce做過資料分析的人都知道,很多分析程式除業務邏輯不同外,程式流程基本一樣。在這種情況下,就需要Hive這樣的使用者程式設計介面。Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯,就是些表的定義等,也就是表的元資料。使用SQL實現Hive是因為SQL大家都熟悉,轉換成本低,類似作用的Pig就不是SQL。

    HBase為查詢而生的,它通過組織起節點內所有機器的記憶體,提供一個超大的記憶體Hash表,它需要組織自己的資料結構,包括磁碟和記憶體中的,而Hive是不做這個的,表在HBase中是物理表,而不是邏輯表,搜尋引擎使用它來儲存索引,以滿足查詢的實時性需求。

    hive類似CloudBase,也是基於hadoop分散式計算平臺上的提供data warehouse的sql功能的一套軟體。使得儲存在hadoop裡面的海量資料的彙總,即席查詢簡單化。hive提供了一套QL的查詢語言,以sql為基礎,使用起來很方便。

    HBase是一個分散式的基於列儲存的非關係型資料庫。HBase的查詢效率很高,主要由於查詢和展示結果。

    hive是分散式的關係型資料庫。主要用來並行分散式處理大量資料。hive中的所有查詢除了”select * from table;”都是需要通過Map/Reduce的方式來執行的。由於要走Map/Reduce,即使一個只有1行1列的表,如果不是通過select * from table;方式來查詢的,可能也需要8、9秒。但hive比較擅長處理大量資料。當要處理的資料很多,並且Hadoop叢集有足夠的規模,這時就能體現出它的優勢。

    通過hive的儲存介面,hive和Hbase可以整合使用。

    1、hive是sql語言,通過資料庫的方式來操作hdfs檔案系統,為了簡化程式設計,底層計算方式為mapreduce。

    2、hive是面向行儲存的資料庫。

    3、Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。

    4、HBase為查詢而生的,它通過組織起節點內所有機器的記憶體,提供一個超大的記憶體Hash表 。

    5、hbase不是關係型資料庫,而是一個在hdfs上開發的面向列的分散式資料庫,不支援sql。

    6、hbase是物理表,不是邏輯表,提供一個超大的記憶體hash表,搜尋引擎通過它來儲存索引,方便查詢操作。

    7、hbase是列儲存。

    Hive和Hbase有各自不同的特徵:hive是高延遲、結構化和麵向分析的,hbase是低延遲、非結構化和麵向程式設計的。Hive資料倉庫在hadoop上是高延遲的。

    其中HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。

    轉:

    覺得在問區別之前,我應該顯示說相同點,這麼一想,又糊塗了,hive和hbase哪裡像了,好像哪裡都不像,既然哪裡都不像,又何來的“區別是什麼”這一問題,他倆所有的都算區別。

    那麼,hive是什麼?

    白話一點再加不嚴格一點,hive可以認為是map-reduce的一個包裝。hive的意義就是把好寫的hive的sql轉換為複雜難寫的map-reduce程式。

    於是,hbase是什麼?

    同樣白話一點加不嚴格一點,hbase可以認為是hdfs的一個包裝。他的本質是資料儲存,是個NoSql資料庫;hbase部署於hdfs之上,並且克服了hdfs在隨機讀寫方面的缺點。

    所以要問hive和hbase的區別,就應該問問map-reduce和hdfs之間的區別,問區別,就要先說說他倆哪裡像。

    Hive和資料庫的比較
    由於 Hive 採用了 SQL 的查詢語言 HQL,因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。

    查詢語言
    由於SQL被廣泛的應用在資料倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。

    資料儲存位置
    Hive 是建立在 Hadoop 之上的,所有 Hive 的資料都是儲存在 HDFS 中的。而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。

    資料格式
    Hive 中沒有定義專門的資料格式,資料格式可以由使用者指定,使用者定義資料格式需要指定三個屬性:列分隔符(通常為空格、”/t”、”/x001″)、行分隔符(”/n”)以及讀取檔案資料的方法(Hive 中預設有三個檔案格式TextFile,SequenceFile以及RCFile)。由於在載入資料的過程中,不需要從使用者資料格式到 Hive 定義的資料格式的轉換,因此,Hive在載入的過程中不會對資料本身進行任何修改,而只是將資料內容複製或者移動到相應的HDFS目錄中。而在資料庫中,不同的資料庫有不同的儲存引擎,定義了自己的資料格式。所有資料都會按照一定的組織儲存,因此,資料庫載入資料的過程會比較耗時。

    資料更新
    由於Hive是針對資料倉庫應用設計的,而資料倉庫的內容是讀多寫少的。因此,Hive中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 新增資料,使用 UPDATE … SET修改資料。

    索引
    之前已經說過,Hive在載入資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,因此也沒有對資料中的某些Key建立索引。Hive要訪問資料中滿足條件的特定值時,需要暴力掃描整個資料,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問資料,因此即使沒有索引,對於大資料量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的資料的訪問,資料庫可以有很高的效率,較低的延遲。由於資料的訪問延遲較高,決定了 Hive 不適合線上資料查詢。

    執行
    Hive中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的(類似 select * from tbl的查詢不需要MapReduce)。而資料庫通常有自己的執行引擎。

    執行延遲
    之前提到,Hive 在查詢資料的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce框架。由於MapReduce 本身具有較高的延遲,因此在利用MapReduce 執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時 候,Hive的平行計算顯然能體現出優勢。

    可擴充套件性
    由於Hive是建立在Hadoop之上的,因此Hive的可擴充套件性是和Hadoop的可擴充套件性是一致的(世界上最大的Hadoop 叢集在 Yahoo!,2009年的規模在4000 臺節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴充套件行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴充套件能力也只有100臺左右。

    資料規模
    由於Hive建立在叢集上並可以利用MapReduce進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *