《Apache Hbase 第一干貨 概念及操作》要點:
本文介紹了Apache Hbase 第一干貨 概念及操作,希望對您有用。如果有疑問,可以聯系我們。
相關主題:apache配置
Apache HBase簡單介紹:
Apache HBase(Hadoop Database) 是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用 HBase 技術可在便宜 PC 上搭建起大規模結構化存儲集群.
簡單說便是HBase 是一種“NoSQL”數據庫,再簡單點便是是一種格式化儲存數據的方式.
那么當我們接觸大數據等知識時,難免會遇到數據存儲的問題,那么HBase就應運而生,很好地辦理了這個問題,對于它的優缺點這里不做贅述,咱們這里的干貨就對一些經常使用的操作做一下總結和分析,還有要對要對一些概念進行理順它!
容易混淆的概念:
HBase 與 Hadoop/HDFS 的差異:HDFS是分布式文件系統,適合保留大文件.官方宣稱它并非普通用途文件系統,不提供文件的個別記錄的快速查詢.另一方面,HBase 基于 HDFS,并能夠提供大表的記錄快速查找和更新.這有時會可能引起概念混亂.HBase 內部將數據放到索引好的“StoreFiles”存儲文件中,以便提供高速查詢,而存儲文件位于 HDFS中.
HBase的設計:
其實HBase存了很多表格,HBase 中的每一張表便是所謂的 BigTable.BigTable 會存儲一系列的行記錄,行記錄有三個基本類型的定義:Row Key、Time Stamp、Column.
1、Row Key 是行在 BigTable 中的唯一標識.
2、Time Stamp 是每次數據操作對應關聯的時間戳,可以看做 SVN 的版本.
3、Column 定義為< family>:< label>,通過這兩部分可以指定唯一的數據的存儲列,family 的定義和修改需要 對 HBase 進行類似于 DB 的 DDL 操作,而 label ,不需要定義直接可以使用,這也為動態定制列提供了一種手段 .family 另一個作用體現在物理存儲優化讀寫操作上,同 family 的數據物理上保留的會比較臨近,因此在業務設計的過程中可以利用這個特性.
是不是很簡單,然后我們看下這個數據布局圖,更加直觀:
然后我們對其中的項進行簡單的介紹:
1、 Row Key
與 NoSQL 數據庫一樣,Row Key 是用來檢索記錄的主鍵.拜訪 HBase table 中的行,只有三種方式:
1)通過單個 Row Key 拜訪.
2)通過 Row Key 的 range 全表掃描.
3)Row Key 可以使任意字符串(最大長度是64KB,實際應用中長度一般為 10 ~ 100bytes),在HBase 內部,Row Key 保留為字節數組.
在存儲時,數據依照 Row Key 的字典序(byte order)排序存儲.設計 Key 時,要充分排序存儲這個特性,將經常一起讀取的行存儲到一起(位置相關性).
注意 字典序對 int 排序的結果是 1,10,100,11,12,13,14,15,16,17,18,19,20,21,..., 9,91,92,93,94,95,96,97,98,99.要保留整形的自然序,Row Key 必須用 0 進行左填充.
行的一次讀寫是原子操作(豈論一次讀寫多少列).這個設計決策能夠使用戶很容易理解程序在對同一個行進行并發更新操作時的行為.
2、 列族
HBase 表中的每個列都歸屬于某個列族.列族是表的 Schema 的一部分(而列不是),必需在使用表之前定義.列名都以列族作為前綴,例如 courses:history、courses:math 都屬于 courses 這個列族.
拜訪控制、磁盤和內存的使用統計都是在列族層面進行的.在實際應用中,列族上的控制權限能幫助我們管理不同類型的應用, 例如,允許一些應用可以添加新的基本數據、一些應用可以讀取基本數據并創建繼承的列族、一些應用則只允許瀏覽數據(甚至可能因為隱私的原因不能瀏覽所有數據).
3、 時間戳
HBase 中通過 Row 和 Columns 確定的一個存儲單元稱為 Cell.每個 Cell 都保存著同一份數據的多個版本. 版本通過時間戳來索引,時間戳的類型是 64 位整型.時間戳可以由HBase(在數據寫入時自動)賦值,此時時間戳是精確到毫秒的當前系統時間.時間戳也 可以由客戶顯示賦值.如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳.每個 Cell 中,不同版本的數據依照時間倒序排序,即最新的數據排在最前面.
為了避免數據存在過多版本造成的管理(包含存儲和索引)負擔,HBase 提供了兩種數據版本回收方式. 一是保存數據的最后 n 個版本,二是保存最近一段時間內的版本(比如最近七天).用戶可以針對每個列族進行設置.
4、 Cell
Cell 是由 {row key,column(=< family> + < label>),version} 唯一確定的單元.Cell 中的數據是沒有類型的,全部是字節碼形式存儲
以上已經把基本概念介紹完了,是不是一目了然,如果還有點糊涂,不要緊,多看幾遍,慢慢就熟悉了,
然后我們接下來介紹相關的操作:
而對于HBase shell 基本操作命令可以看下圖:
名稱 | 命令表達式 |
創立表 | create '表名稱','列簇名稱1','列簇名稱2'....... |
添加記錄 | put '表名稱', '行名稱','列簇名稱:','值' |
查看記錄 | get '表名稱','行名稱' |
查看表中的記錄總數 | count '表名稱' |
刪除記錄 | delete '表名',行名稱','列簇名稱' |
刪除表 | ①disable '表名稱' ②drop '表名稱' |
查看所有記錄 | scan '表名稱' |
查看某個表某個列中所有數據 | scan '表名稱',['列簇名稱:'] |
更新記錄 | 即重寫一遍進行覆蓋 |
限于篇幅的關系,對于操作具體代碼我將貼在下一篇文章中,敬請關注!
歡迎參與《Apache Hbase 第一干貨 概念及操作》討論,分享您的想法,維易PHP學院為您提供專業教程。