Apache Hive 架構和命令:模式、特徵和應用
已發表: 2021-06-30目錄
什麼是蜂巢?
Apache Hive 是 Facebook 開發的一種開源數據倉庫工具,用於分佈式處理和數據分析。 它是在 Hadoop 分佈式文件系統 (HDFS) 之上開發的。 Hive 提供了一種將結構投影到 Hadoop 中的數據的機制。 一種稱為 HiveQL (HQL) 的類 SQL 語言用於查詢該數據。 Hive 中的表和關係數據庫中的表之間存在相似性。 任何熟悉 SQL 的人都可以輕鬆編寫 Hive 查詢。
Hive 的一些功能是:
- 將架構信息存儲到數據庫中,並將處理後的數據存儲到 HDFS 中。
- 專為 OLAP 設計。
- 查詢語言為 HiveQL 或 HQL,與 SQL 類似。
- 它快速、熟悉、可擴展且可擴展。
蜂巢的用途
- 它是 Apache Hive 分佈式存儲。
- 提供的工具使用戶能夠輕鬆地提取、轉換和加載數據。
- 提供了多種數據格式來提供結構。
- Hive 可以訪問存儲在 Hadoop 分佈式文件系統 (HDFS) 中的文件。
蜂巢的命令
蜂巢命令是:
- 數據定義語言(DDL):通過這些命令構建和修改數據庫中的表和其他對象。
- CREATE:用於創建表或數據庫。
- SHOW:用於顯示數據庫、表、屬性等。
- ALTER:用於對現有表進行更改。
- DESCRIBE:描述表列。
- TRUNCATE:用於永久截斷和刪除表的行。
- DELETE:刪除表數據,但可以恢復。
- 數據操作語言(DML):用於檢索、存儲、修改、刪除、插入和更新數據庫中的數據。
- LOAD、INSERT 語句的語法
將數據 <LOCAL> inpath <文件路徑> 加載到表 [tablename] 中
- 加載數據後,數據操作命令用於檢索數據。
- 計數聚合函數用於統計表中記錄的總數。
- “create external”關鍵字用於創建表並提供創建表的位置。 EXTERNAL 表指向其存儲的任何 HDFS 位置。
- 插入命令用於加載數據 Hive 表。 “插入覆蓋”用於覆蓋現有數據,“插入”用於將數據附加到現有數據中。
- 通過“partitioned by”命令將表劃分為分區,並通過“clustered by”命令劃分為桶。
- 由於未啟用動態分區,因此插入數據會引發錯誤。 因此,需要在 Hive shell 中設置以下參數。
設置 hive.exec.dynamic.partition=true;
啟用動態分區,默認為 false
設置 hive.exec.dynamic.partition.mode=nonstrict;
- 'Drop Table' 命令刪除表的數據和元數據
- 聚合: 語法:
從表名中選擇計數(DISTINCT 類別);
該命令將計算“cate”表的不同類別。
- 分組: 語法:
按類別從txt記錄中選擇類別,總和(金額)
結果集將被分組為一列或多列。
- 連接操作:通過使用每列共有的值來組合兩個表中的字段。
- 左外連接:對於表 A 和 B,左外連接是包含“左”表(A)的所有記錄,即使連接條件在“右”表(B)中沒有找到任何匹配的記錄。
- 右外連接:“右”表 (B) 中的每一行將至少出現在連接表中一次。
- 完全連接:連接表將包含兩個表中的所有記錄連接表將包含兩個表中的所有記錄。
蜂巢架構
apache hive 架構如圖1所示。
主要部件清單
Hive 架構的主要組件是:
1. Hive 客戶端
用 Java、Python、C++ 等語言編寫的不同應用程序通過使用 Hive 提供的不同驅動程序進行通信。 它可以根據選擇用任何語言編寫。 客戶端和服務器依次與 Hive 服務中的 Hive 服務器通信。
大多數情況下,它們分為三種類型:
- Thrift 客戶端:它基於 Apache Thrift 來服務來自 Thrift 客戶端的請求。 Thrift 客戶端將用於基於 Thrift 的應用程序的通信。
- JDBC 客戶端: JDBC 是為與 Java 相關的應用程序提供的。 Java 應用程序使用 JDBC 驅動程序連接到 Hive。 它進一步使用 Thrift 與 Hive 服務器進行通信。
- ODBC 客戶端:允許基於 ODBC 協議的應用程序通過 ODBC 驅動程序連接到 Hive。 與 JDBC 類似,它使用 Thrift 與 Hive 服務器通信。
2. 蜂巢服務
Hive 服務為 Hive 與客戶端的交互提供了手段。 必須由客戶執行的任何與查詢相關的操作都必須通過租用服務進行通信。 對於數據定義語言 (DDL) 操作,CLI 充當 Hive 服務。
所有驅動程序都必須與 Hive 服務器通信,然後與 Hive 服務中的主驅動程序通信。 Hive 服務中的驅動程序代表與客戶端特定應用程序和所有類型的 JDBC、ODBC 等通信的主要驅動程序。來自不同應用程序的請求由驅動程序處理到元存儲和字段系統,這些系統將進一步處理。
Hive 提供的服務有:
- Beeline: Beeline 是一個命令外殼,用戶可以在其中向系統提交查詢。 HiveServer2 支持它。 它是一個基於 SQLLINE CLI 的 JDBC 客戶端。
- Hive Server 2:允許客戶端對 hive 執行查詢。 HiveServer1 的繼承者,它允許從多個客戶端執行多個查詢。 它為 JDBC 和 ODBC 等開放 API 客戶端提供了最佳支持。
- Hive Driver:用戶通過命令行向 Hive 驅動提交 HiveQL 語句。 它將查詢發送到編譯器並為查詢創建會話句柄。
- Hive 編譯器: Hive 編譯器用於傳遞查詢。 使用存儲在元存儲中的元數據,Hive 編譯器對不同的查詢塊和表達式執行語義分析和類型檢查。 然後由編譯器生成執行計劃,即 DAG(有向無環圖)。 DAG 的每個階段都是元數據操作、HDFS 上的操作,或者是 map/reduce 作業。
- 優化器:優化器的主要作用是對執行計劃進行變換操作。 它通過拆分任務來提高效率和可擴展性。
- 執行引擎:編譯和優化步驟完成後,執行引擎的作用就是執行編譯器創建的執行計劃。 該計劃是按照它們的依賴關係使用 Hadoop 執行的。
- Metastore :Metastore 一般是關係型數據庫,存儲與表和分區結構相關的元數據信息。 它是一個中央存儲庫,還包括存儲列和列類型的信息。 與序列化器和反序列化器相關的信息也存儲在 Metastore 中,該 Metastore 與存儲數據的 HDFS 文件一起進行讀/寫操作。 Metastore 提供了一個 Thrift 接口,用於查詢和操作 Hive 元數據。
Metastore 可以配置為兩種模式:
- 遠程:此模式對非 Java 應用程序很有用,在遠程模式下,元存儲是 Thrift 服務。
- Embedded:在這種模式下,客戶端可以通過 JDBC 直接與 Metastore 交互。
- HCatalog: Hadoop 的表和存儲管理層是 HCatalog。 可以使用不同的數據處理工具在網格上讀取和寫入數據,如 Pig、MapReduce 等。建立在 Hive Metastore 之上,Hive Metastore 的表格數據暴露給其他數據處理工具。
- WebHCat: WebHCat 是 HCatalog 的 HTTP 接口和 REST API。 它執行 Hive 元數據操作並提供運行 Hadoop MapReduce(或 YARN)、Pig、Hive 作業的服務。
3. 處理和資源管理
查詢的執行由內部 MapReduce 框架執行。
MapReduce 框架是一個軟件框架,用於在大型商用硬件集群上處理大量數據。 數據被分成塊,然後由 map-reduce 任務處理。
4.分佈式存儲
Hive 服務與 Hive 存儲通信以執行以下操作:
- Hive“元存儲數據庫”保存在 Hive 中創建的表的元數據信息。
- HDFS 上的 Hadoop 集群將存儲查詢結果和加載到表中的數據。
Hive 的不同模式
根據數據的大小,Hive 可以在兩種模式下運行。
- 本地模式
Hive 的本地模式在以下情況下使用
- 安裝的Hadoop只有一個數據節點,安裝在偽模式下。
- 單臺本地機器的數據量更小。
- 由於存在較小的數據集,因此可以在本地機器上進行快速處理。
- 地圖縮減模式
Hive 的 Map reduce 模式在以下情況下使用
- Hadoop 有多個數據節點,數據分佈在不同的節點上。
- 數據量較大,需要並行執行查詢。
- 可以以更好的性能處理大型數據集。
蜂巢的特徵
- 在創建表和數據庫之後將數據加載到表中。
- Hive 只能對存儲在表中的結構化數據進行管理和查詢。
- Hive 框架在處理 Map Reduce 中不存在的結構化數據時具有優化和可用性的特點。
- 為了易於使用,與 Map Reduce 的複雜編程語言相比,受 Hive SQL 啟發的語言是一種更簡單的方法。 Hive 中使用了熟悉的表、行、列等概念。
- 為了提高查詢的性能,Hive 可以使用目錄結構對數據進行分區。
- Hive 包含一個名為“Metastore”的重要組件,它駐留在關係數據庫中並存儲模式信息。 可以使用兩種方法與 Hive 交互:Web GUI 和 Java 數據庫連接 (JDBC) 接口。
- 大多數交互都使用命令行界面 (CLI)。 CLI 用於使用 Hive 查詢語言 (HQL) 編寫 Hive 查詢。
- HQL 語法類似於 SQL 語法。
- Hive 支持四種文件格式; TEXTFILE、SEQUENCEFILE、ORC 和 RCFILE(記錄列文件)。
結論
Apache Hive 是一個開源數據倉庫工具,由 Hive 客戶端、Hive 服務、處理框架和資源管理以及分佈式存儲等主要組件組成。
它建立在 Hadoop 生態系統之上,用於處理結構和半結構化數據。 Hive 提供的用戶界面使用戶能夠以 Hive 查詢語言 (HQL) 提交他們的查詢。 這被傳遞給編譯器以生成執行計劃。 該計劃最終由執行引擎執行。
如果您有興趣了解有關大數據的更多信息,請查看我們的 PG 大數據軟件開發專業文憑課程,該課程專為在職專業人士設計,提供 7 多個案例研究和項目,涵蓋 14 種編程語言和工具,實用的動手操作研討會,超過 400 小時的嚴格學習和頂級公司的就業幫助。
在 upGrad 查看我們的其他軟件工程課程。