HBase簡介

来源:https://www.cnblogs.com/cjsblog/archive/2017/12/31/8158349.html
-Advertisement-
Play Games

參考 http://hbase.apache.org/book.html#_architecture Architecture 65. Overview 65.1. NoSQL? HBase是一種"NoSQL"資料庫。“NoSQL”一般指的是非關係型資料庫,我們知道,關係型資料庫支持SQL,也就是說 ...


參考  http://hbase.apache.org/book.html#_architecture

Architecture

65. Overview

65.1. NoSQL?

HBase是一種"NoSQL"資料庫。“NoSQL”一般指的是非關係型資料庫,我們知道,關係型資料庫支持SQL,也就是說HBase不支持SQL。非關係型資料庫有許多種,BerkeleyDB是一種本地非關係型資料庫,然而,HBase是分散式資料庫。從技術上來講,HBase更像是“Data Store”,而不是“Data Base”,因為它缺少許多關係型資料庫的特性,比如:列類型、輔助索引、觸發器、查詢語言等等。(PS:意思是,從技術的角度講,HBase更像一個數據存儲,而不像資料庫)

HBase集群擴展通過增加RegionServer來實現。如果一個集群從10擴展到20個RegionServer,那麼,不僅僅是存儲容量增加一倍,連處理能力也會增加一倍。對於關係型資料庫而言,也可以用scale做到這樣,但是需要指出的是,這需要特別的硬體和存儲設備。HBase特性如下:

  • 強一致性讀寫:HBase不是一個“最終一致性”的數據存儲。這使得它更適合高速度的聚集任務。
  • 自動分區:HBase的表通過region被分佈在集群中,而region是自動拆分並重新分佈數據行的。
  • 自動RegionServer容災
  • Hadoop/HDFS集成:HBase支持HDFS作為它的分散式文件系統
  • MapReduce:HBase支持通過MapReduce基於HBase作為數據源的大量的並行處理
  • Java Client API:HBase支持通過Java API編程的方式來訪問
  • Thrift/REST API:HBase也支持Thrift和REST這樣的非Java的客戶端
  • Block Cache and Bloom Filters
  • Operational Management:HBase提供web界面

65.2. When Should I Use HBase?

並不是所有的問題都適合用HBase

第一、確保你有足夠的數據。如果你有數以億計的數據行,那麼HBase是一個不錯的選擇。如果你只有數千或者百萬的數據,那麼使用傳統的關係型資料庫可能更好,因為事實上你的這些數據可能只需要一個或者兩個節點就能處理得完,這樣的話集群中的其它的節點就處於空閑狀態。

第二、確保你不需要用到關係型資料庫的特性(比如:固定類型的列、輔助索引、事務、查詢語言等等)。基於關係型資料庫構建的應用不能通過簡單的改變JDBC驅動來傳輸到HBase中。從RDBMS到HBase是完全相反的兩套設計。

第三、確保你有足夠的硬體。因為當DataNode數量小於5的時候HDFS將不能正常工作了。

65.3. What Is The Difference Between HBase and Hadoop/HDFS?

HDFS是一個分散式的文件系統,適合存儲大文件,但它不能提供快速的個性化的在文件中查找。HBase是構建於HDFS基礎之上的,並且它支持對大表的中的記錄進行快速查找和更新。HBase內部將數據存放在HDFS中被索引的“StoreFiles”上以供快速查找。

69. Master

HMaster是Master Server的一個實現。Master Server負責監視集群中所有的RegionServer實例,並且它也是所有元數據改變的一個對外介面。在分散式集群中,典型的Master運行在NameNode那台機器上。

69.3. Interface

HMasterInterface介面是操作元數據的主要介面,提供以下操作:

  • Table (createTable, modifyTable, removeTable, enable, disable)
  • ColumnFamily (addColumn, modifyColumn, removeColumn)
  • Region (move, assign, unassign)

70. RegionServer

HRegionServer是RegionServer的實現,它負責服務並管理regions。在分散式集群中,一個RegionServer通常運行在一個DataNode上。

70.1. Interface

HRegionRegionInterface既包含數據的操作也包含region維護的操作

  • Data (get, put, delete, next, etc.)
  • Region (splitRegion, compactRegion, etc.)

70.5. RegionServer Splitting Implementation

region server處理寫請求,它們被累積在記憶體中一個叫memstore的地方。一旦memstore文件滿了,內容將被寫到磁碟上作為store file。這個事件叫做memstore flush。隨著store file的不斷累積,RegionServer將合併它們成大文件,以減少store file的數量。在每次刷新或者合併以後,region中數據的數量會發生改變。RegionServer根據切分策略來查看是否region太大了或者應該被切分。

邏輯上,region切分的操作很簡單。找一個合適的位置,將region中的數據切分成兩個新的region。然而,這個處理的過程並不簡單。當切分發生的時候,數據並不是立刻被重寫到這個心創建的女兒region上。

 

 

71. Regions

73. HDFS

Data Model

在HBase中,數據被存儲在表中,有行和列。這些術語和關係型數據有一些重疊,當然這不是一個很好的類比,但是它對我們思考HBase的表示一個多維的map很有幫助。

Table

  由多行組成

Row

  HBase中的行由一個row key和一個或多個列組成。Rows在存儲的時候按照row key的字典序存儲。正因為如此,row key的設計就顯得非常重要。基於這一點,相關連的行相互之間存在附近。通常,row key是一個網站的功能變數名稱。如果你的row key是功能變數名稱,你應該以倒置的方式存儲它們(比如:org.apache.www,org.apache.mail,org.apache.jira等等)。這樣的話,所有的apache功能變數名稱在表中是相近的位置,而不是被子功能變數名稱的第一部分分開。

Column

  HBase中的列由一個列簇和一個列修飾符組成,它們之間用冒號分隔(:)

Column Family

  列簇由一系列的列和它們的值組成,這是基於性能考慮的。每一個列簇都有一系列的存儲屬性,比如:是否它們的值應該被緩存到記憶體中,它們的數據怎樣被壓縮,它們的row key怎樣被編碼,等等。表中的每一行都有相同的列簇,即使一個給定的行在給定的列簇上沒有存儲任何數據。

Column Qualifier

  一個列修飾符被添加到列簇中為了給指定的數據片段提供索引。假設,給定的列簇是content,那麼,一個列修飾符可能是content:html,其它的還有可能是content:pdf。雖然,列簇在表創建的時候就固定了,但是列修飾符是不確定的,而且不同的行可能有不通的列修飾符。

Cell

Timestamp

  一個timestamp被寫在每個value的旁邊,它是一個value的版本修飾符。預設的,timestamp代表數據被RegionServer寫入的時間,你也可以在寫數據的時候指定一個不同的timestamp值

20. Conceptual View

在這個例子中,有一個表叫“webtable”,它包含兩行數據(com.cnn.www和com.example.www)和三個列簇(contents,anchor,people)。對於第一行(com.cnn.www),anchor包含兩列(anchor:cssnsi.com,anchor:my.look.ca),contents包含一列(contents:html)。row key為“com.cnn.www”的行有5個版本,而row key為“com.example.www”的行有1個版本。contents:html列包含整個網站的HTML。

在這個表格中的空的單元格並不占用空間

下圖是一個模擬,目的在於解釋說明上面我們所說的,便於我們理解:

21. Physical View

雖然,在概念上,表看起來像是一行一行的,但物理上,它們是按照列簇被存儲的。一個新的列修飾符可以在任意時刻被添加到列簇中。

在前面的概念視圖中的空的單元格是不被存儲的。因此,請求contents:html列並且timestamp為t8將返回沒有值。然而,如果不指定timestamp,那麼某個列的大部分值都會被返回。如果指定多個版本,只有找到的第一個會被返回,因為數據是按照timestamp降序存儲的。

22. Namespace

一個命名空間是表的一個邏輯分組

23. Table

24. Row

行按照row key字典升序存儲

25. Column Family

Columns in Apache HBase are grouped into column families.

列簇中所有的列成員都有相同的首碼。例如,列courses:history和courses:math都是courses這個列簇的成員。用冒號分隔列簇和列修飾符。列簇首碼必須由可以列印輸出的字元組成。列修飾符可以由任意位元組組成。列簇必須在表被定義的時候就聲明好,因此列就不需要在表創建的時候定義了,並且可以隨時新增。

物理上,所有的列簇成員被存儲在一起。

26. Cells

A {row, column, version} tuple exactly specifies a cell in HBase.

27. Data Model Operations

數據模型有4個主要操作,分別是Get、Put、Scan和Delete。這些操作是應用在表上的。

27.1. Get

返回指定行的屬性

27.2. Put

添加新的行到表中,或者更新已經存在的行

27.3. Scans

掃描特定屬性的多行

27.4. Delete

從表中刪除一行

28. Versions

在HBase中,{row,column,version}可以確定一個單元格。當行和列被壓縮成位元組的時候,版本用long類型指定。在HBase中,版本以降序存儲,所以,最近的值總是最先被髮現。

29. Sort Order

對於所有的數據模型操作,HBase以數據被存儲時的順序返回。首先按行排序,其次按列簇,再其次按列修飾符,最後是timestamp。(PS:前是三個是字典升序,最後一個timestamp是降序)

30. Column Metadata

不存儲列的元數據,因此,HBase可以支持每一行有許多列,行與行之間可以有多種不同的列。

31. Joins

HBase不直接join操作,至少不支持關係型資料庫那種join。在HBase中,讀取數據通過Get和Scan。

33. Schema Creation

34. Table Schema Rules Of Thumb

  • regions的大小在10~50GB之間
  • cells的大小不超過10MB
  • 典型的,每個表的列簇在1~3個之間。HBase的表不應該被設計成模仿關係型資料庫的表
  • 一個有1~2個列簇的表所擁有的regions大約在50~100個左右
  • 保持你的列簇名字儘可能的短

50. HBase as a MapReduce Job Data Source and Data Sink

HBase可以作為MapReduce作業的數據源。對於讀寫HBase的MapReduce作業,建議使用TableMapper和TableReducer。

如果你運行HBase作為數據源的MapReduce作業,你需要在配置文件中指定表和列名。

當你從HBase讀取數據的時候,TableInputFormat請求regions的列表並且作為一個map。

 

54. HBase MapReduce Examples

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 昨天微信更新了,出現了一個小游戲“跳一跳”,玩了一下 趕緊還蠻有意思的 但純粹是拼手感的,玩了好久,終於搞了個135分拿了個第一名,沒想到過一會就被朋友刷下去了,最高的也就200來分把,於是就想著要是開發個輔助就好了,於是簡單想了一下最高游戲 先來說下這個游戲的界面和規則: 先看看界面 規則:按住屏 ...
  • 一、遷移說明 ABP模板項目Entity Framework Core預設使用的是Sql Server,也很容易將資料庫遷移到MySQL,步驟如下。 二、遷移MySQL步驟 1、 下載項目 請到 http://aspnetboilerplate.com/Templates 下載一個新的項目,選擇AS ...
  • 一.ROS架構 ROS架構上分為三個層級: 計算圖級(Computation Graph level):體現進程與系統的關係,描述系統怎麼運行。 文件系統級(Filesystem level):組織構建程式文件。 社區級(Community level):開源社區,共用知識、演算法和代碼等。 1.1 ...
  • 參考地址:https://help.aliyun.com/knowledge_detail/41817.html PS:目前恢復只支持 Linux 下進行。Linux下恢復的數據文件,無論 Windows、Linux 操作系統,MySQL 都可以正常使用 1、概述和軟體說明 1.1 概述 RDS M ...
  • VMware相關服務 啟動腳本: VMwareStart.bat 關閉相關服務腳本: VMwareStop.bat ...
  • 一、下載安裝 Notepad++ 1、下載 Notepad++ : https://pan.baidu.com/s/1o7VrS4y 密碼 : ck8a 2、安裝 Notepad++ 2.1、勾選所有 2.2勾選所有 二、下載安裝 NppFTP 插件 1、下載 NppFTP github 下載 : ...
  • pstack命令可顯示每個進程的棧跟蹤,pstack $pid即可,pstack命令須由$pid進程的屬主或者root運行。 這次出現cpu占比100%的情況,但看memory占比,並無異常,懷疑是某個地方死迴圈了。經同事提醒,用pstack命令查看相關進程,通過運行多次pstack,發現代碼棧總是 ...
  • 關於HSQLDB資料庫的創建,本文不做過多描述,可以在百度上搜索一下,有許多。 對於訪問已存在的庫文件,網上找了半天,沒有整理的很清楚的參考資料,現將自己的操作過程整理如下,以供參考。 1、先下載一個HSQLDB客戶端,如HsqlManager,解壓在某一個路徑下,如下圖所示: 2、將hsqldb. ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...