圖解大資料 | 海量資料庫查詢-Hive與HBase詳解

ShowMeAI發表於2022-03-08

作者:韓信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/84
本文地址http://www.showmeai.tech/article-detail/172
宣告:版權所有,轉載請聯絡平臺與作者並註明出處

1.大資料與資料庫

1) 從Hadoop到資料庫

大家知道在計算機領域,關聯式資料庫大量用於資料儲存和維護的場景。大資料的出現後,很多公司轉而選擇像 Hadoop/Spark 的大資料解決方案。

Hadoop使用分散式檔案系統,用於儲存大資料,並使用MapReduce來處理。Hadoop擅長於儲存各種格式的龐大的資料,任意的格式甚至非結構化的處理。

2) Hadoop的限制

Hadoop非常適合批量處理任務,但它只以順序方式訪問資料。這意味著如果要查詢,必須搜尋整個資料集,即使是最簡單的搜尋工作。

當處理結果在另一個龐大的資料集,也是按順序處理一個巨大的資料集。在這一點上,一個新的解決方案,需要訪問資料中的任何點(隨機訪問)單元。

3) HBase與大資料資料庫、

HBase是建立在Hadoop檔案系統之上的分散式面向列的資料庫

HBase是一個資料模型,類似於谷歌的Bigtable設計,可以提供快速隨機訪問海量結構化資料。它利用了Hadoop的檔案系統(HDFS)提供的容錯能力。

它是Hadoop的生態系統,提供對資料的隨機實時讀/寫訪問,是Hadoop檔案系統的一部分。我們可以直接或通過HBase的儲存HDFS資料。使用HBase在HDFS讀取消費/隨機訪問資料。 HBase在Hadoop的檔案系統之上,並提供了讀寫訪問。

2.BigTable與HBase

要提到HBase,就要順帶提到google的BigtableHBase是在谷歌BigTable的基礎之上進行開源實現的,是一個高可靠、高效能、面向列、可伸縮的分散式資料庫,可以用來儲存非結構化和半結構化的稀疏資料。

1) 結構化資料和非結構化資料

BigTable和HBase儲存的都是非結構化資料。

2) BigTable簡介

BigTable是一個用於管理結構化資料的分散式儲存系統,構建在GFS、Chubby、SSTable等google技術之上。本質上說,BigTable是一個稀疏的、分散式的、持久化的、多維的、排序的鍵值(key-value)對映。

3) HBase簡介

  • HBase是一個高可靠、高效能、面向列、可伸縮的分散式資料庫,是谷歌BigTable的開源實現。

  • HBase主要用來儲存非結構化和半結構化的鬆散資料,目標是處理非常龐大的表,可以通過水平擴充套件的方式,利用廉價計算機叢集處理由超過10億行資料和數百萬列元素組成的資料表。

4) HBase在大資料生態環境中的位置

HBase在大資料生態環境中的位置如下圖所示,它建立在Hadoop HDFS之上的分散式面向列的資料庫。

5) HBase的特點

如下圖所示,HBase有以下特點:

  • :一個表可以有上億行,上百萬列。
  • 面向列:面向列表(簇)的儲存和許可權控制,列(簇)獨立檢索。
  • 稀疏:對於為空(NULL)的列,並不佔用儲存空間,因此,表可以設計的非常稀疏。
  • 無模式:每一行都有一個可以排序的主鍵和任意多的列,列可以根據需要動態增加,同一張表中不同的行可以有截然不同的列。
  • 資料多版本:每個單元的資料有多個版本,預設情況下,版本號是單元格插入時的時間戳。
  • 資料型別單一:HBase中的資料都是字串,沒有型別。 

6) HBase的訪問介面

型別 特點 場合
Native Java API 最常規和高效的訪問方式 適合Hadoop MapReduce作業並行批處理HBase表資料
HBase Shell HBase的命令列工具 最簡單的介面 適合HBase管理使用
Thrift Gateway 利用Thrift序列化技術 支援C++、PHP、Python等 適合其他異構系統線上訪問HBase表資料
REST Gateway 解除了語言限制 支援REST風格的Http API訪問HBase
Pig 使用Pig Latin流式程式語言來處理HBase中的資料 適合做資料統計
Hive 簡單 當需要以類似SQL語言方式來訪問HBase的時候

3.HBase資料模型

1) 邏輯儲存模型

元件 描述
表 Table HBase採用表來組織資料,表由行和列組成,列劃分為若干個列族
行 Row 每個HBase表都由若干行組成,每個行由行鍵(row key)來標識
列族 Column Family 一個HBase表被分組成許多“列族”(Column Family)的集合
列限定符Column Qualifier 列族裡的資料通過列限定符(或列)來定位
單元格 Cell 通過行、列族和列限定符確定一個單元格,單元格中儲存的資料都視為byte
時間戳 Times tamp 同一份資料的多個版本,時間戳用於索引資料版本

HBase中需要根據行鍵、列族、列限定符和時間戳來確定一個單元格。因此,可以視為一個“四維座標”,即 [行鍵, 列族, 列限定符, 時間戳]

2) 物理儲存模型

Table在行的方向上分割為多個Region,每個Region分散在不同的RegionServer中。

每個HRegion由多個Store構成,每個Store由一個MemStore和0或多個StoreFile組成,每個Store儲存一個Columns Family。StoreFile以HFile格式儲存在HDFS中。

4.HBase系統架構

1) HBase架構元件

HBase包含以下三個元件:

  • Region Server:提供資料的讀寫服務,當客戶端訪問資料時,直接和Region Server通訊。
  • HBase Master:Region的分配,DDL操作(建立表,刪除表)。
  • ZooKeeper:是HDFS的一部分,維護一個活躍的叢集狀態。

2) Region元件

HBase Tables 通過行健的範圍(row key range)被水平切分成多個Region。一個Region包含了所有的在Region開始鍵(startKey)和結束鍵(endKey)之內的行。
Regions被分配到叢集的節點上,成為Region Servers,提供資料的讀寫服務;一個Region Server可以服務1000個Region。

3) HMaster元件

  • 分配Region,DDL操作(建立表, 刪除表)。
  • 協調各個Reion Server:在啟動時分配Region、在恢復或是負載均衡時重新分配Region;監控所有叢集當中的Region Server例項,從ZooKeeper中監聽通知。
  • 提供建立、刪除、更新表的介面。

4) ZooKeeper元件

  • HBase使用ZooKeeper作為分散式協調服務,來維護叢集中的Server狀態。
  • ZooKeeper維護著哪些Server是活躍或是可用的,提供Server 失敗時的通知。
  • Zookeeper使用一致性機制來保證公共的共享狀態,注意,需要使用奇數的三臺或五臺機器,保證一致。

5.Hive介紹

1) Hive簡介

Hive是基於Hadoop的一個資料倉儲工具,用於結構化資料的查詢、分析和彙總。Hive提供類SQL查詢功能,它將SQL轉換為MapReduce程式。

Hive不支援OLTP,Hive無法提供實時查詢。

2) Hive在大資料生態環境中的位置

3) Hive特點

Hive的優點

  • 簡單容易上手:提供了類SQL查詢語言HQL。
  • 可擴充套件:一般情況下不需要重啟服務Hive可以自由的擴充套件叢集的規模。
  • 提供統一的後設資料管理。
  • 延展性:Hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。
  • 容錯:良好的容錯性,節點出現問題SQL仍可完成執行。

Hive的缺點(侷限性)

  • Hive的HQL表達能力有限:迭代式演算法無法表達,比如pagerank;資料探勘方面,比如kmeans。
  • Hive的效率比較低:Hive自動生成的MapReduce作業,不夠智慧化;Hive調優比較困難,粒度較粗;Hive可控性差。

4) Hive與傳統資料庫對比

5) Hive的體系架構

  • client 三種訪問方式:CLI、JDBC/ODBC、WEBUI。
  • Meta store 後設資料:表名、表所屬資料庫、表擁有者、列、分割槽欄位、表型別、表資料所在的目錄等,預設儲存在自帶的derby資料庫中。
  • Driver:解析器、編譯器、優化器、執行器。

6) Hive中的資料模型

Hive 中所有的資料都儲存在 HDFS 中Hive 中包含以下資料模型:

  • 表(Table)
  • 外部表(External Table)
  • 分割槽(Partition)
  • 桶(Bucket)

6.SQL介紹與Hive應用場景

1) 資料庫操作和表操作

作用 HiveQL
檢視所有資料庫 SHOW DATABASES;
使用指定的資料庫 USE database_name;
建立指定名稱的資料庫 CREATE DATABASE database_name;
刪除資料庫 DROP DATABASE database_name;
建立表 CREATE TABLE pokes (foo INT, bar STRING)
檢視所有的表 SHOW TABLES
支援模糊查詢 SHOW TABLES ‘TMP’
檢視錶有哪些分割槽 SHOW PARTITIONS TMP_TABLE
檢視錶結構 DESCRIBE TMP_TABLE
建立表並建立索引ds CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING)
複製一個空表 CREATE TABLE empty_key_value_store LIKE key_value_store
表新增一列 ALTER TABLE pokes ADD COLUMNS (new_col INT)
更改表名 ALTER TABLE events RENAME TO 3koobecaf

2) 查詢語句

作用 HiveQL
檢索資訊 SELECT from_columns FROM table WHERE conditions;
選擇所有的資料 SELECT * FROM table;
行篩選 SELECT * FROM table WHERE rec_name = “value”;
多個限制條件 SELECT * FROM TABLE WHERE rec1 = “value1” AND rec2 = “value2”;
選擇多個特定的列 SELECT column_name FROM table;
檢索unique輸出記錄 SELECT DISTINCT column_name FROM table;
排序 SELECT col1, col2 FROM table ORDER BY col2;
逆序 SELECT col1, col2 FROM table ORDER BY col2 DESC;
統計行數 SELECT COUNT(*) FROM table;
分組統計 SELECT owner, COUNT(*) FROM table GROUP BY owner;
求某一列最大值 SELECT MAX(col_name) AS label FROM table;
從多個表中檢索資訊 SELECT pet.name, comment FROM pet JOIN event ON (pet.name = event.name);

3) Hive的應用場景

Hive並不適合需要低延遲的應用,適合於大資料集的批處理作業:

  • 日誌分析:大部分網際網路公司使用hive進行日誌分析,包括百度、淘寶等。例如,統計網站一個時間段內的pv、uv,多維度資料分析等。
  • 海量結構化資料離線分析。

4) Hive和HBase的區別與聯絡

7.參考資料

ShowMeAI相關文章推薦

ShowMeAI系列教程推薦

相關文章