1. 程式人生 > 其它 >【基礎】手把手搭建docker環境

【基礎】手把手搭建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 支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。

缺點

1Hive  HQL 表達能力有限

(1)迭代式演算法無法表達

(2)資料探勘方面不擅長,由於 MapReduce 資料處理流程的限制,效率更高的演算法卻 無法實現。

2Hive 的效率比較低

(1)Hive 自動生成的 MapReduce 作業,通常情況下不夠智慧化

(2)Hive 調優比較困難,粒度較粗

 

1)使用者介面:Client

CLI(command-line interface)、JDBC/ODBC(jdbc 訪問 hive)、WEBUI(瀏覽器訪問 hive)

 

2)元資料:Metastore

元資料包括:表名、表所屬的資料庫(預設是 default)、表的擁有者、列/分割槽欄位、 表的型別(是否是外部表)、表的資料所在目錄等;

預設儲存在自帶的 derby 資料庫中,推薦使用 MySQL 儲存 Metastore

3Hadoop

使用 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 進行平行計算,因此可以支援很大規模 的資料;對應的,資料庫可以支援的資料規模較小。