第六章 hbase shell 命令
| hbase shell命令???????????? | ??????????????? 描述? |
| alter | 修改列族(Column Family)模式 |
| count | 統計表中行的數量 |
| create | 創建表 |
| describe | 顯示表相關的詳細信息 |
| delete | 刪除指定對象的值(可以為表,行,列對應的值,另外也可以指定時間戳的值) |
| deleteall | 刪除指定行的所有元素值 |
| disable | 使表無效 |
| drop | 刪除表 |
| enable | 使表有效 |
| exists | 測試表是否存在 |
| exit | 退出hbase shell |
| get | 獲取行或單元(cell)的值 |
| incr | 增加指定表,行或列的值 |
| list | 列出hbase中存在的所有表 |
| put | 向指向的表單元添加值 |
| tools | 列出hbase所支持的工具 |
| scan | 通過對表的掃描來獲取對用的值 |
| status | 返回hbase集群的狀態信息 |
| shutdown | 關閉hbase集群(與exit不同) |
| truncate | 重新創建指定表 |
| version | 返回hbase版本信息 |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
需要注意shutdown與exit之間的不同:shutdown表示關閉hbase服務,必須重新啟動hbase才可以恢復,exit只是退出hbase shell,退出之后完全可以重新進入。
????? hbase使用坐標來定位表中的數據,行健是第一個坐標,下一個是列族。
???? ?hbase是一個在線系統,和hadoop mapreduce的緊密結合又賦予它離線訪問的功能。
???? ?hbase接到命令后存下變化信息或者寫入失敗異常的拋出,默認情況下。執行寫入時會寫到兩個地方:預寫式日志(write-ahead log,也稱hlog)和memStore,以保證數據持久化。memStore是內存里的寫入緩沖區。客戶端在寫的過程中不會與底層的HFile直接交互,當menStore寫滿時,會刷新到硬盤,生成一個新的HFile.HFile是hbase使用的底層存儲格式。menStore的大小由hbase-site.xml文件里的系統級屬性hbase.hregion.memstore.flush.size來定義。
???? ?hbase在讀操作上使用了LRU緩存機制(BlockCache),BlockCache設計用來保存從HFile里讀入內存的頻繁訪問的數據,避免硬盤讀。每個列族都有自己的BlockCache。BlockCache中的Block是hbase從硬盤完成一次讀取的數據單位。Block是建立索引的最小數據單位,也是從硬盤讀取的最小數據單位。如果主要用于隨機查詢,小一點的block會好一些,但是會導致索引變大,消耗更多內存,如果主要執行順序掃描,大一點的block會好一些,block變大索引項變小,因此節省內存。
?
??????數據模型概括:
表(table)---------hbase用表來組織數據。表名是字符串(String),由可以在文件系統路徑里使用的字符組成。
行(row)---------在表里,數據按行存儲。行由行健(rowkey)唯一標識。行健沒有數據類型,總是視為字節數組byte[].
列族(column family)-----------行里的數據按照列族分組,列族也影響到hbase數據的物理存放。因此,它們必須事前定義并且不輕易修改。表中每行擁有相同列族,盡管行不需要在每個列族里存儲數據。列族名字是字符串,由可以在文件系統路徑里使用的字符組成。
列限定符(column qualifier)--------列族里的數據通過列限定符或列來定位。列限定符不必事前定義。列限定符不必在不同行之間保持一致,就像行健一樣,列限定符沒有數據類型,總是視為字節數組byte[].
單元(cell)-------行健,列族和列限定符一起確定一個單元。存儲在單元里的數據稱為單元值(value),值也沒有數據類型,總是視為字節數組byte[].
時間版本(version)--------單元值有時間版本,時間版本用時間戳標識,是一個long。沒有指定時間版本時,當前時間戳作為操作的基本。hbase保留單元值時間版本的數量基于列族進行配置。默認數量是3個。
?? hbase在表里存儲數據使用的是四維坐標系統,依次是:行健,列族,列限定符和時間版本。 hbase按照時間戳降序排列各時間版本,其他映射建按照升序排序。
?? hbase把數據存放在一個提供單一命名空間的分布式文件系統上。一張表由多個小一點的region組成,托管region的服務器叫做regionserver.單個region大小由配置參數hbase.hregion.max.filesize決定,當一個region大小變得大于該值時,會切分成2個region.
?? hbase是一種搭建在hadoop上的數據庫。依靠hadoop來實現數據訪問和數據可靠性。hbase是一種以低延遲為目標的在線系統,而hadoop是一種為吞吐量優化的離線系統。互補可以搭建水平擴展的數據應用。
???? hbase表設計:
?? hbase表很靈活,可以用字符數組形式存儲任何東西。在同一列族里存儲相似訪問模式的所有東西。
??? 索引建立在keyvalue對象的key部分上,key由行健,列限定符和時間戳按次序組成。高表可能支持你把運算復雜度降到O(1),但是要在原子性上付出代價。
??? hbase不支持跨行事務,列限定符可以用來存儲數據,列族名字的長度影響了通過網絡傳回客戶端的數據大小(在keyvalue對象里),所以盡量簡練。
??? 散列支持定長鍵和更好的數據分布,但是失去排序的好處。設計hbase模式時進行反規范化處理是一種可行的辦法。從性能觀點看,規范化為寫做優化,而反規范化為讀做優化。
????
?
1.創建表,其中users是表名,info是users的列族。hbase中的表至少有一個列族.它們之中,列族直接影響hbase數據存儲的物理特性。
hbase(main):011:0>create 'users','info'
0 row(s) in 1.2210seconds
2.獲得表的描述.通過list可以列出所有已創建的表
hbase(main):012:0>list
TABLE??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
users???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1 row(s) in 0.0160seconds
3.使用describe命令可以看到這個表的所有默認參數
hbase(main):006:0>describe 'users'
DESCRIPTION????????????????????????????????????????????????????????????????????????????????????????? ENABLED??????????????????????????????????????????????
{NAME => 'users', FAMILIES => [{NAME=> 'address', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', true????????????????????????????????????????????????
? VERSIONS => '3', COMPRESSION => 'NONE',TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'fa??????????????????????????????????????????????????????
lse', BLOCKCACHE => 'true'}, {NAME =>'info', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSI??????????????????????????????????????????????????????
ONS => '3', COMPRESSION => 'NONE', TTL=> '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false',???????????????????????????????????????????????????????
BLOCKCACHE => 'true'}]}
1 row(s) in 0.0230seconds
?
轉載于:https://www.cnblogs.com/junrong624/p/3507040.html
總結
以上是生活随笔為你收集整理的第六章 hbase shell 命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server数据库中批量导入数据
- 下一篇: session多服务器共享的方案梳理