hive元件可提供的服務:1、把SQL語句轉換成mapreduce程式碼;2、可以對資料進行存儲,儲存使用 HDFS;3、可以對資料進行計算,計算使用MapReduce。 hive是基於Hadoop的資料倉儲工具,用來進行資料擷取、轉換、載入;hive資料倉儲工具能將結構化的資料檔案對應為資料庫表,提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。
本教學操作環境:windows7系統、Dell G3電腦。
在搭建資料倉儲時,Hive元件在其中發揮了非常關鍵的作用,我們知道Hive是一個基於Hadoop的重要資料倉儲工具,但具體如何應用則需要我們進一步進行探索。
hive是基於Hadoop的資料倉儲工具,用來進行資料擷取、轉換、加載,這是一種可以儲存、查詢和分析儲存在Hadoop中的大規模資料的機制。 hive資料倉儲工具能將結構化的資料檔案對應為資料庫表,並提供SQL查詢功能,能將SQL語句轉換成MapReduce任務來執行。 Hive的優點是學習成本低,可以透過類似SQL語句實現快速MapReduce統計,讓MapReduce變得更加簡單,而不必開發專門的MapReduce應用程式。 hive十分適合用來做什麼資料倉儲
1.把SQL語句轉換成mapreduce程式碼
2.可以對資料進行儲存儲存使用HDFS
3.可以對資料進行運算計算使用MapReduce
a.Hive的優點
(1)簡單容易上手:提供了類別SQL查詢語言HQL
(2)可擴充:為超大資料集設計了運算/擴展能力(MR作為計算引擎,HDFS作為儲存系統)
在一般情況下不需要重啟服務Hive可以自由的擴展集群的規模。
(3)提供統一的元資料管理
(4)延展性:Hive支援使用者自訂函數,使用者可以根據自己的需求來實作自己的函數
(5)容錯:良好的容錯性,節點出現問題SQL仍可完成執行
b.Hive的缺點
(1)hive的HQL表達能力有限
1)迭代式演算法無法表達,例如pagerank
2)資料探勘方面,例如kmeans
(2)hive的效率比較低
1)hive自動產生的mapreduce作業,通常情況下不夠智能化
2)hive調優比較困難,粒度較粗
1)Hive 處理的資料儲存在HDFS
##2) Hive 分析資料底層的預設實作是MapReduce##3) 執行程式運行在Yarn 上
總結:相當於hadoop的一個客戶端的作用。
Hive用於海量資料的離線資料分析。 Hive有sql資料庫的外表,但應用場景完全不同,Hive只適合用來做大量資料統計分析。
(2)Hive的優勢Hive利用HDFS儲存數據,利用MapReduce查詢分析數據。因為直接使用Hadoop MapReduce處理數據,會面臨人員學習成本太高的問題,而且MapReduce實現複雜查詢邏輯開發難度太大。而使用Hive,操作介面採用類SQL語法,提供快速開發的能力的同時也避免了去寫MapReduce,從而減少開發人員的學習成本,功能擴展更加方便。Hive 架構原理
#1.使用者介面: Client
CLI(hive shell)、 JDBC/ODBC(java 存取 hive)、 WEBUI(瀏覽器存取 hive)2.元資料: Metastore元資料包括:表名、表格所屬的資料庫(預設為default)、表格的擁有者、列/分割區欄位、表格
的類型(是否是外部表)、表格的資料所在目錄等;
元資料: Metastore
元資料包含:表名、表格所屬的資料庫(預設為default)、資料表的擁有者、資料列/分割區欄位、表格
的類型(是否為外部表)、表格的資料所在目錄等;
預設儲存在自帶的derby 資料庫中,建議使用MySQL 儲存Metastore。
3. Hadoop
使用 HDFS 進行存儲,使用 MapReduce 進行運算。
4.驅動器: Driver
(1)解析器(SQL Parser):將SQL 字串轉換成抽象語法樹AST,這一步驟一般都用
第三方工具庫完成,例如antlr;對AST 進行語法分析,例如表格是否存在、欄位是否存
在、 SQL 語意是否有誤。
(2)編譯器(Physical Plan):將 AST 編譯成邏輯執行計畫。
(3)優化器(Query Optimizer):對邏輯執行計劃進行最佳化。
(4)執行器(Execution):把邏輯執行計畫轉換成可以運作的實體計畫。對於 Hive 來
說,就是 MR/Spark。
Hive 是建立在 Hadoop 之上的,而所有 Hive 的資料都是儲存在 HDFS 中的。而資料庫則
可以將資料保存在區塊設備或本機檔案系統中。
由於 Hive 是針對資料倉儲應用設計的,而資料倉儲的內容是讀多寫少的。因此, Hive
中不建議資料的改寫,所有的資料都是在載入的時候確定好的。而資料庫中的數據通常是
需要經常進行修改的,因此可以使用INSERT INTO … VALUES 新增數據,使用UPDATE … SET 修改數據。
由於 Hive 採用了類似 SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理解為資料庫。其實從結構來看, Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本節將從多個面向來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是 Hive 是為資料倉儲而設計的,清楚這一點,有助於從應用程式角度理解 Hive 的特性。
1、查詢語言
由於 SQL 被廣泛的應用在資料倉儲中,因此,專門針對 Hive 的特性設計了類別 SQL 的查詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 來開發。
2、資料儲存位置Hive 是建立在 Hadoop 之上的,所有 Hive 的資料都是儲存在 HDFS 中的。而資料庫則可以將資料保存在區塊設備或本機檔案系統中。
3 、資料更新:由於 Hive 是針對資料倉儲應用設計的,而資料倉儲的內容是讀多寫少的。因此, Hive中不建議資料的改寫,所有的資料都是在載入的時候確定好的。而資料庫中的資料通常是需 要 經 常 進 行 修 改 的 , 因 此 可 以 使 用 INSERT INTO … VALUES 添 加 數 據 , 使用 UPDATE … SET 修改資料。
4 、索引:Hive 在載入資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,因此也沒有對資料中的某些 Key 建立索引。 Hive 要存取資料中符合條件的特定值時,需要暴力掃描整個數據,因此存取延遲較高。由於 MapReduce 的引入, Hive 可以並行存取數據,因此即使沒有索引,對於大數據量的訪問, Hive 仍然可以體現出優勢。在資料庫中,通常會針對一個或幾個列建立索引,因此對於少量的特定條件的資料的訪問,資料庫可以有很高的效率,較低的延遲。由於資料的存取延遲較高,決定了 Hive 不適合線上資料查詢。
5、 執行:Hive 中大多數查詢的執行是透過 Hadoop 提供的 MapReduce 來實現的。而資料庫通常有自己的執行引擎。
6、執行延遲:Hive 在查詢資料的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另一個導致 Hive 執行延遲高的因素是 MapReduce 框架。由於 MapReduce 本身有較高的延遲,因此在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,也就是資料規模較小,當資料規模大到超過資料庫的處理能力的時候, Hive 的平行計算顯然能體現出優勢。
7 、可擴展性:由於Hive 是建立在Hadoop 之上的,因此Hive 的可擴展性是和Hadoop 的可擴展性是一致的(世界上最大的Hadoop 集群在Yahoo!, 2009年的規模在4000 台節點左右)。而資料庫由於 ACID 語意的嚴格限制,擴展行非常有限。目前最先進的平行資料庫 Oracle 在理論上的擴充能力也只有 100 台左右。
8、 資料規模:由於 Hive 建立在叢集上並且可以利用 MapReduce 進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。
更多程式相關知識,請造訪:程式設計教學! !
以上是hive組件提供哪些服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!