hbase 的shell操作中相关属性说明
生活随笔
收集整理的這篇文章主要介紹了
hbase 的shell操作中相关属性说明
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Hbase 是一個分布式的、面向列的開源數據庫,其實現是建立在google 的bigTable 理論之上,并基于hadoop HDFS文件系統。? ? ?Hbase不同于一般的關系型數據庫(RDBMS)。是一種適用于非結構化數據存儲的數據庫,且Hbase是基于列的數據庫。
? ? ?下面的內容基于我們已經安裝好hadoop、hbase。
? ? 一、hbase shell 介紹
? ? ?hbase shell是用戶和hbase 交互的接口之一,當然還可以通過其它方式比如java api等
? ? ?下表列出了 hbase 基本命令操作:
? ? ??
?
利用上面基礎命令可以完成基本的hbase 操作,下面幾個shell 命令在后續的hbase 操作中可以起到很到的作用,且主要體現在建表的過程中,看下面幾個create 屬性
1、BLOOMFILTER ?默認是NONE 是否使用布隆過慮 使用何種方式
? ? ?布隆過濾可以每列族單獨啟用。使用?HColumnDescriptor.setBloomFilterType(NONE | ROW | ROWCOL)?對列族單獨啟用布隆。 Default =?NONE?沒有布隆過濾。對?ROW,行鍵的哈希在每次插入行時將被添加到布隆。對?ROWCOL,行鍵 + 列族 + 列族修飾的哈希將在每次插入行時添加到布隆
? ?使用方法: create 'table',{BLOOMFILTER =>'ROW'}?
? ?啟用布隆過濾可以節省必須讀磁盤過程,可以有助于改進讀取延遲?
2、VERSIONS 默認是3 這個參數的意思是數據保留三個 版本,如果我們認為我們的數據沒有這么大的必要保留這么多,隨時都在更新,而老版本的數據對我們毫無價值,那將此參數設為1 能節約2/3的空間
? ? ?使用方法: create 'table',{VERSIONS=>'2'}
3、COMPRESSION 默認值是NONE 即不使用壓縮
? ? ?這個參數意思是該列族是否采用壓縮,采用什么壓縮算法
? ? ?使用方法: create 'table',{NAME=>'info',COMPRESSION=>'SNAPPY'}?
? ? ?我建議采用SNAPPY壓縮算法,個壓縮算法的比較網上比較多,我從網上摘抄一個表格作為參考,具體的snappy 的安裝后續會以單獨章節進行描述。
? ? ?這個表是Google幾年前發布的一組測試數據,實際測試Snappy 和下表所列相差無幾。
? ??HBase中,在Snappy發布之前(Google 2011年對外發布Snappy),采用的LZO算法,目標是達到盡可能快的壓縮和解壓速度,同時減少對CPU的消耗;
? ??在Snappy發布之后,建議采用Snappy算法(參考《HBase: The Definitive Guide》),具體可以根據實際情況對LZO和Snappy做過更詳細的對比測試后再做選擇。
? ? ?? ? ?
??
? ? ?如果建表之初沒有 壓縮,后來想要加入壓縮算法,怎么辦 hbase 有另外的一個命令alter 4、alter? ? ? ?使用方法: ? ? ?如 修改壓縮算法? ? ?? ? ? ??disable 'table' ? ? ??alter 'table',{NAME=>'info',COMPRESSION=>'snappy'}? ? ? ? enable 'table' ? ? ?刪除列族 ? ? ?disable 'table' ? ? ?alter 'table',{NAME=>'info',METHOD=>'delete'} ? ? ?enable 'table' ? ? ?但是這樣修改之后發現表數據還是那么大,并沒有發生多大變化。怎么辦 ? ? ?major_compact 'table' 命令之后 才會做實際的操作。
5、TTL 默認是 2147483647 即:Integer.MAX_VALUE 值 大概是68年吧 ? ? ?這個參數是說明該列族數據的 存活時間 也就是數據的生命周期 單位是s 默寫文章寫的單位是ms 是錯誤的。 ? ? ?這個參數可以根據 具體的需求 對數據設定 存活時間,超過存過時間的數據將在表中不在顯示,待下次major compact的時候再徹底刪除數據 ? ? ?為什么在下次major compact的時候刪除數據,后面會具體介紹到。 ? ? ?注意的是TTL設定之后?MIN_VERSIONS=>'0' 這樣設置之后,TTL時間戳過期后,將全部徹底刪除該family 下所有的數據,如果MIN_VERSIONS 不等于0 那將保留最新 ? ? ?的MIN_VERSIONS個版本的數據,其它的全部刪除,比如MIN_VERSIONS=>'1' 屆時將保留一個最新版本的數據,其它版本的數據將不再保存。 6、describe 'table' 這個命令查看了create table 的各項參數 或者是默認值。 7、disable_all 'toplist.*' disable_all 支持正則表達式,并列出當前匹配的表的如下: ? ? ??toplist_a_total_1001 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ??toplist_a_total_1002????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1008????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1009????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1019????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1035 ? ? ?... ? ? ?Disable the above 25 tables (y/n)? 并給出確認提示 8、drop_all 這個命令和disable_all的使用方式是一樣的 9、hbase 表預分區 也就是手動分區
? ? ?默認情況下,在創建HBase表的時候會自動創建一個region分區,當導入數據的時候,所有的HBase客戶端都向這一個region寫數據,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先創建一些空的regions,這樣當數據寫入HBase時,會按照region分區情況,在集群內做數據的負載均衡。 ? ? ?使用方法:create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} ? ? ?也可以使用 api的方式? ? ? ?hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f info ? ? ? ?參數很容易看懂?test_table? 是表名?HexStringSplit?是split 方式 -c 是分10個region -f 是family ? ? ?這樣就可以將表預先分為10個區,減少數據達到storefile 大小的時候自動分區的時間消耗,并且還有以一個優勢,就是合理設計rowkey 能讓各個region 的并發請求 平均分配(趨于均勻) 使IO 效率達到最高,但是預分區需要將filesize 設置一個較大的值,設置哪個參數呢?hbase.hregion.max.filesize 這個值默認是10G 也就是說單個region 默認大小是10G ? ? ?這個值發生從0.90 到0.92到0.94.3 從 256M--1G--10G 這個根據自己的需求將這個值修改。 ? ? ?但是如果MapReduce Input類型為TableInputFormat 使用hbase作為輸入的時候,就要注意了,每個region一個map,如果數據小于10G 那只會啟用一個map 造成很大的資源浪費,這時候可以考慮適當調小 該參數的值,或者采用預分配region 的方式,并將hbase.hregion.max.filesize 設為一個相對比較大的值,不容易達到的值比如1000G,檢測如果達到這個值,再手動分配region。
?前面說到了 compact 為什么設置了TTL 超過存活時間的數據 就消失了,是如何消失的呢?是刪除了嗎?通過哪些參數刪除的。 后面將要說到 hbase compact? ? 原文出自:http://blog.csdn.net/zhouleilei/article/details/12654329 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
| 操作 | 命令表達式 | 注意 |
| 創建表 | create?'table_name,?'family1','family2','familyN' | |
| 添加記錄?????? | put?'table_name',?'rowkey',?'family:column',?'value' | |
| 查看記錄 | get?'table_name',?'rowkey'??? | 查詢單條記錄,也是hbase?最常用的命令 |
| 查看表中的記錄總數 | count??'table_name' | 這個命令并不快,且目前沒有找到更快的方式統計行數 |
| 刪除記錄 | delete?'table_name'?,'rowkey','family_name:column' deleteall?'table_name','rowkey' | 第一種方式刪除一條記錄單列的數據 第二種方式刪除整條記錄 |
| 刪除一張表 | 1、disable?'table_name'? | |
| 2、drop?'table_name' | ||
| 查看所有記錄 | scan?"table_name"?,{LIMIT=>10} | LIMIT=>10?只返回10條記錄,否則將全部展示 |
| Algorithm | % remaining | Encoding | Decoding |
| GZIP | 13.4% | 21 MB/s | 118 MB/s |
| LZO | 20.5% | 135 MB/s | 410 MB/s |
| Zippy/Snappy | 22.2% | 172 MB/s | 409 MB/s |
??
? ? ?如果建表之初沒有 壓縮,后來想要加入壓縮算法,怎么辦 hbase 有另外的一個命令alter 4、alter? ? ? ?使用方法: ? ? ?如 修改壓縮算法? ? ?? ? ? ??disable 'table' ? ? ??alter 'table',{NAME=>'info',COMPRESSION=>'snappy'}? ? ? ? enable 'table' ? ? ?刪除列族 ? ? ?disable 'table' ? ? ?alter 'table',{NAME=>'info',METHOD=>'delete'} ? ? ?enable 'table' ? ? ?但是這樣修改之后發現表數據還是那么大,并沒有發生多大變化。怎么辦 ? ? ?major_compact 'table' 命令之后 才會做實際的操作。
5、TTL 默認是 2147483647 即:Integer.MAX_VALUE 值 大概是68年吧 ? ? ?這個參數是說明該列族數據的 存活時間 也就是數據的生命周期 單位是s 默寫文章寫的單位是ms 是錯誤的。 ? ? ?這個參數可以根據 具體的需求 對數據設定 存活時間,超過存過時間的數據將在表中不在顯示,待下次major compact的時候再徹底刪除數據 ? ? ?為什么在下次major compact的時候刪除數據,后面會具體介紹到。 ? ? ?注意的是TTL設定之后?MIN_VERSIONS=>'0' 這樣設置之后,TTL時間戳過期后,將全部徹底刪除該family 下所有的數據,如果MIN_VERSIONS 不等于0 那將保留最新 ? ? ?的MIN_VERSIONS個版本的數據,其它的全部刪除,比如MIN_VERSIONS=>'1' 屆時將保留一個最新版本的數據,其它版本的數據將不再保存。 6、describe 'table' 這個命令查看了create table 的各項參數 或者是默認值。 7、disable_all 'toplist.*' disable_all 支持正則表達式,并列出當前匹配的表的如下: ? ? ??toplist_a_total_1001 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ??toplist_a_total_1002????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1008????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1009????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1019????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ??toplist_a_total_1035 ? ? ?... ? ? ?Disable the above 25 tables (y/n)? 并給出確認提示 8、drop_all 這個命令和disable_all的使用方式是一樣的 9、hbase 表預分區 也就是手動分區
? ? ?默認情況下,在創建HBase表的時候會自動創建一個region分區,當導入數據的時候,所有的HBase客戶端都向這一個region寫數據,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先創建一些空的regions,這樣當數據寫入HBase時,會按照region分區情況,在集群內做數據的負載均衡。 ? ? ?使用方法:create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'} ? ? ?也可以使用 api的方式? ? ? ?hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f info ? ? ? ?參數很容易看懂?test_table? 是表名?HexStringSplit?是split 方式 -c 是分10個region -f 是family ? ? ?這樣就可以將表預先分為10個區,減少數據達到storefile 大小的時候自動分區的時間消耗,并且還有以一個優勢,就是合理設計rowkey 能讓各個region 的并發請求 平均分配(趨于均勻) 使IO 效率達到最高,但是預分區需要將filesize 設置一個較大的值,設置哪個參數呢?hbase.hregion.max.filesize 這個值默認是10G 也就是說單個region 默認大小是10G ? ? ?這個值發生從0.90 到0.92到0.94.3 從 256M--1G--10G 這個根據自己的需求將這個值修改。 ? ? ?但是如果MapReduce Input類型為TableInputFormat 使用hbase作為輸入的時候,就要注意了,每個region一個map,如果數據小于10G 那只會啟用一個map 造成很大的資源浪費,這時候可以考慮適當調小 該參數的值,或者采用預分配region 的方式,并將hbase.hregion.max.filesize 設為一個相對比較大的值,不容易達到的值比如1000G,檢測如果達到這個值,再手動分配region。
?前面說到了 compact 為什么設置了TTL 超過存活時間的數據 就消失了,是如何消失的呢?是刪除了嗎?通過哪些參數刪除的。 后面將要說到 hbase compact? ? 原文出自:http://blog.csdn.net/zhouleilei/article/details/12654329 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的hbase 的shell操作中相关属性说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows8.1专业版激活密钥(Wi
- 下一篇: 单节点配置SecondaryNameNo