圖解大數據 | 海量數據庫查詢-Hive與HBase詳解


ShowMeAI研究中心

作者:韓信子@ShowMeAI
教程地址https://www.showmeai.tech/tutorials/84
本文地址https://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系列教程推薦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM