作者:韓信子@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的Bigtable。HBase是在谷歌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.參考資料
- Lars George 著,代志遠 / 劉佳 / 蔣傑 譯,《 HBase權威指南》,東南大學出版社,2012
- Edward Capriolo / Dean Wampler)/ Jason Rutherglen 著,曹坤 譯,《Hive程式設計指南》,人民郵電出版社,2013
- 深入瞭解HBase架構: https://blog.csdn.net/Lic_LiveTime/article/details/79818695
- APACHE HIVE TM:http://hive.apache.org/
- Apache HBase ™ Reference Guide:http://hbase.apache.org/book.html
ShowMeAI相關文章推薦
- 圖解大資料 | 導論:大資料生態與應用
- 圖解大資料 | 分散式平臺:Hadoop與Map-reduce詳解
- 圖解大資料 | 實操案例:Hadoop系統搭建與環境配置
- 圖解大資料 | 實操案例:應用map-reduce進行大資料統計
- 圖解大資料 | 實操案例:Hive搭建與應用案例
- 圖解大資料 | 海量資料庫與查詢:Hive與HBase詳解
- 圖解大資料 | 大資料分析挖掘框架:Spark初步
- 圖解大資料 | Spark操作:基於RDD的大資料處理分析
- 圖解大資料 | Spark操作:基於Dataframe與SQL的大資料處理分析
- 圖解大資料 | 綜合案例:使用spark分析美國新冠肺炎疫情資料
- 圖解大資料 | 綜合案例:使用Spark分析挖掘零售交易資料
- 圖解大資料 | 綜合案例:使用Spark分析挖掘音樂專輯資料
- 圖解大資料 | 流式資料處理:Spark Streaming
- 圖解大資料 | Spark機器學習(上)-工作流與特徵工程
- 圖解大資料 | Spark機器學習(下)-建模與超參調優
- 圖解大資料 | Spark GraphFrames:基於圖的資料分析挖掘