作者:韓信子@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的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
【大數據技術與處理】推薦閱讀
- 圖解大數據 | 大數據生態與應用導論
- 圖解大數據 | 分布式平台Hadoop與Map-Reduce詳解
- 圖解大數據 | Hadoop系統搭建與環境配置@實操案例
- 圖解大數據 | 應用Map-Reduce進行大數據統計@實操案例
- 圖解大數據 | Hive搭建與應用@實操案例
- 圖解大數據 | Hive與HBase詳解@海量數據庫查詢
- 圖解大數據 | 大數據分析挖掘框架@Spark初步
- 圖解大數據 | 基於RDD大數據處理分析@Spark操作
- 圖解大數據 | 基於Dataframe / SQL大數據處理分析@Spark操作
- 圖解大數據 | 使用Spark分析新冠肺炎疫情數據@綜合案例
- 圖解大數據 | 使用Spark分析挖掘零售交易數據@綜合案例
- 圖解大數據 | 使用Spark分析挖掘音樂專輯數據@綜合案例
- 圖解大數據 | Spark Streaming @流式數據處理
- 圖解大數據 | 工作流與特征工程@Spark機器學習
- 圖解大數據 | 建模與超參調優@Spark機器學習
- 圖解大數據 | GraphFrames @基於圖的數據分析挖掘
ShowMeAI系列教程推薦
- 大廠技術實現方案系列
- 圖解Python編程:從入門到精通系列教程
- 圖解數據分析:從入門到精通系列教程
- 圖解AI數學基礎:從入門到精通系列教程
- 圖解大數據技術:從入門到精通系列教程
- 圖解機器學習算法:從入門到精通系列教程
- 機器學習實戰:手把手教你玩轉機器學習系列
- 深度學習教程:吳恩達專項課程 · 全套筆記解讀
- 自然語言處理教程:斯坦福CS224n課程 · 課程帶學與全套筆記解讀
- 深度學習與計算機視覺教程:斯坦福CS231n · 全套筆記解讀