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