【基礎】手把手搭建docker環境
Hive:由 Facebook 開源用於解決海量結構化日誌的資料統計工具。
Hive 是基於 Hadoop 的一個數據倉庫工具,可以將結構化的資料檔案對映為一張表,並提供類 SQL 查詢功能。
Hive 本質:將 HQL 轉化成 MapReduce 程式
(1)Hive 處理的資料儲存在 HDFS
(2)Hive 分析資料底層的實現是 MapReduce
(3)執行程式執行在 Yarn 上
優點
(1)操作介面採用類 SQL 語法,提供快速開發的能力(簡單、容易上手)。
(2)避免了去寫 MapReduce,減少開發人員的學習成本。
(3)Hive 的執行延遲比較高,因此 Hive 常用於資料分析,對實時性要求不高的場合。(延遲高,空間和時間轉換)
(4)Hive 優勢在於處理大資料,對於處理小資料沒有優勢,因為 Hive 的執行延遲比較 高。
(5)Hive 支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。
缺點
1)Hive 的 HQL 表達能力有限
(1)迭代式演算法無法表達
(2)資料探勘方面不擅長,由於 MapReduce 資料處理流程的限制,效率更高的演算法卻 無法實現。
2)Hive 的效率比較低
(1)Hive 自動生成的 MapReduce 作業,通常情況下不夠智慧化
(2)Hive 調優比較困難,粒度較粗
1)使用者介面:Client
CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(瀏覽器訪問 hive)
2)元資料: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 通過給使用者提供的一系列互動介面,接收到使用者的指令(SQL),使用自己的 Driver, 結合元資料(MetaStore),將這些指令翻譯成 MapReduce,提交到 Hadoop 中執行,最後,將 執行返回的結果輸出到使用者互動介面。
Hive 和資料庫比較
由於 Hive 採用了類似 SQL 的查詢語言 HQL(Hive Query Language),因此很容易將 Hive 理
解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。 本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是 Hive 是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。
查詢語言
由於 SQL 被廣泛的應用在資料倉庫中,因此,專門針對 Hive 的特性設計了類 SQL 的查 詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 進行開發。
資料更新
由於 Hive 是針對資料倉庫應用設計的,而資料倉庫的內容是讀多寫少的。因此,Hive 中 不建議對資料的改寫,所有的資料都是在載入的時候確定好的。而資料庫中的資料通常是需 要經常進行修改的,因此可以使用 INSERT INTO … VALUES 新增資料,使用 UPDATE … SET 修 改資料。
執行延遲
Hive 在查詢資料的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導 致 Hive 執行延遲高的因素是 MapReduce 框架。由於 MapReduce 本身具有較高的延遲,因此 在利用 MapReduce 執行 Hive 查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。 當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時候,
Hive 的平行計算顯然能體現出優勢。
資料規模
由於 Hive 建立在叢集上並可以利用 MapReduce 進行平行計算,因此可以支援很大規模 的資料;對應的,資料庫可以支援的資料規模較小。