版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
版權(quán)所有?
2015
華為技術(shù)有限公司HBase二次開發(fā)版權(quán)所有?2015華為技術(shù)有第1頁前言版權(quán)所有?
2015
華為技術(shù)有限公司第1頁
HBase是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設(shè)計(jì)目標(biāo)是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時(shí)的局限性。
本章主要介紹HBase的接口以及二次開發(fā)的使用指導(dǎo)。前言版權(quán)所有?2015華為技術(shù)有限公司第1頁 HBas目錄版權(quán)所有?
2015
華為技術(shù)有限公司第2頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第2頁1. HBaHBase常用接口版權(quán)所有?
2015
華為技術(shù)有限公司第3頁客戶端使用主要方式:HBase
ShellHBase的命令行工具,最簡單的接口,適合HBase管理使用。Java
APIHBase客戶端程序通過底層RPC接口與HBase集群進(jìn)行通信,客戶程序直接集成HBase的Java包,通過調(diào)用相關(guān)API即可完成操作。其余接口:REST
接口REST(Representational
StateTransfer)表述性狀態(tài)轉(zhuǎn)移接口。Thrift接口Thrift
是一個(gè)基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實(shí)現(xiàn),它可以生成包括C++,
Java,
Python,
Ruby,
PHP
等主流語言的代碼,這些代碼實(shí)現(xiàn)了
RPC
的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務(wù)的調(diào)用和實(shí)現(xiàn)。Avro接口Avro是一個(gè)數(shù)據(jù)序列化系統(tǒng),設(shè)計(jì)用于支持大批量數(shù)據(jù)交換的應(yīng)用。HBase常用接口版權(quán)所有?2015華為技術(shù)有限公司第3目錄版權(quán)所有?
2015
華為技術(shù)有限公司第4頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第4頁1. HBa常用Shell接口–
連接通過/hbaseshell來連接正在運(yùn)行的HBase
Shell客戶端用法://
安全登錄,在進(jìn)入hbase
shell客戶端之前,需要進(jìn)行安裝客戶端和用戶登錄的準(zhǔn)備工作,具體需要參考CPI文檔中《安裝與使用客戶端》章節(jié)//進(jìn)入HBase
shell客戶端#
.bin/hbase
shellHBase
Shell;
enter
'help<RETURN>'
for
list
ofsupported
commands.Type
"exit<RETURN>"
toleave
the
HBaseShellVersion
0.94.0,
r,
SunAug
2622:12:56CST
2012hbase(main):001:0>版權(quán)所有?
2015
華為技術(shù)有限公司第5頁常用Shell接口–連接通過/hbaseshell來連接常用Shell接口–
創(chuàng)建表創(chuàng)建表時(shí),可以選擇多個(gè)參數(shù),但表名和列族名是必須的參數(shù),其它參數(shù)還包括版本數(shù)、TTL
以及預(yù)分Region建表的key數(shù)組等用法:hbase>
create
't1',
{NAME
=>
'f1',
VERSIONS
=>
5}hbase>
create
't1',
{NAME
=>
'f1'},{NAME
=>
'f2'},
{NAME
=>
'f3'}hbase>
#
The
above
in
shorthand
would
be
the
following:hbase>
create
't1',
'f1',
'f2',
'f3'hbase>
create
't1',
{NAME
=>
'f1',
VERSIONS
=>
1,
TTL
=>
2592000,
BLOCKCACHE
=>
true}hbase>
create
't1',
'f1',
{SPLITS
=>
['10',
'20',
'30',
'40']}hbase>
create
't1',
'f1',
{SPLITS_FILE
=>
'splits.txt'}hbase>
#
Optionally
pre-split
the
table
into
NUMREGIONS,
usinghbase>
#
SPLITALGO
("HexStringSplit",
"UniformSplit"
or
classname)hbase>
create
't1',
'f1',
{NUMREGIONS
=>
15,
SPLITALGO=>
'HexStringSplit'}版權(quán)所有?
2015
華為技術(shù)有限公司第6頁常用Shell接口–創(chuàng)建表創(chuàng)建表時(shí),可以選擇多個(gè)參數(shù),但表常用Shell接口–
插入一行數(shù)據(jù)PutPut數(shù)據(jù)時(shí),必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時(shí)間戳用法:hbase>put
't1',
'r1','c1',
'value',
ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計(jì)算test表中的數(shù)據(jù)的條數(shù)示例://向表test中put數(shù)據(jù),RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1版權(quán)所有?
2015
華為技術(shù)有限公司第7頁hbase(main):002:0>0
row(s)in
0.5940hbase(main):003:0>0
row(s)in
0.0080//指定時(shí)間戳為3hbase(main):011:0>0
row(s)in
0.0510hbase(main):013:0>3
row(s)in
0.0160put'test','rowkey1','cf:qualifier1','value1'secondsput'test','rowkey2','cf:qualifier2','value2'secondsput'test','rowkey3','cf:qualifier3','value3',3secondscount'test'seconds常用Shell接口–插入一行數(shù)據(jù)PutPut數(shù)據(jù)時(shí),必選參常用Shell接口–
讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時(shí),必選參數(shù)是表名和RowKey,可選參數(shù)包括列名(包括列族和列名)、時(shí)間戳、版本數(shù)等用法:版權(quán)所有?
2015
華為技術(shù)有限公司第8頁hbase>hbase>hbase>hbase>hbase>hbase>get
't1',get
't1',get
't1',get
't1',get
't1',get
't1','r1''r1','r1','r1','r1','r1',{TIMERANGE=>[ts1,
ts2]}=>
'c1'}=>
['c1',
'c2',
'c3']}=>=>{COLUMN{COLUMN{COLUMN{COLUMN'c1','c1',TIMESTAMPTIMERANGE=>ts1}=>[ts1,ts2],VERSIONS=>
4}hbase>getVERSIONS=>
4}'t1','r1',{COLUMN
=>
'c1','c1''c1','c2'['c1',
'c2']TIMESTAMP=>ts1,hbase>hbase>hbase>get
't1',get
't1',get
't1','r1','r1','r1',常用Shell接口–讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時(shí),必選常用Shell接口–
讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選參數(shù)是表名,可選參數(shù)包括列名(包括列族和列名)、起止Key、Filter用法://查詢元表版權(quán)所有?
2015
華為技術(shù)有限公司第9頁hbase>hbase>hbase>hbase>hbase>scanscanscanscanscan'.META.''.META.',
{COLUMNS
=>
'info:regioninfo'}'t1','t1','t1',{COLUMNS
=>
['c1','c2'],LIMIT
=>10,
STARTROW
=>'xyz'}{COLUMNS
=>
'c1',
TIMERANGE
=>
[1303668804,
1303668904]}{FILTER
=>"(PrefixFilter
('row2')AND
(QualifierFilters(>=,'binary:xyz')))AND(TimestampsFilterhbase>scan't1',(
123,
456))"}{FILTER
=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,
0)}hbase>scan't1',
{COLUMNS
=>
['c1','c2'],CACHE_BLOCKS
=>false}hbase>
scan't1',
{RAW=>true,VERSIONS
=>10}常用Shell接口–讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選常用Shell接口–
其他常用命令HBase還提供了一些其它的Shell
API,包括general、ddl、dml、tools、replication和security六組,每組又包括多個(gè)Shell命令。每組命令和每個(gè)命令的用法均可以通過help查詢其用法COMMAND
GROUPS:Group
name:generalCommands:
status,
version,
whoamiGroup
name:
ddlCommands:
alter,
alter_async,
alter_status,create,
describe,
disable,
disable_all,
drop,drop_all,
enable,
enable_all,
exists,
is_disabled,
is_enabled,
list,show_filtersGroup
name:dmlCommands:
count,
delete,
deleteall,
get,
get_counter,
incr,put,scan,
truncateGroup
name:toolsCommands:
assign,
balance_switch,
balancer,
close_region,
compact,
flush,
hlog_roll,major_compact,
move,split,
unassign,
zk_dumpGroup
name:replicationCommands:
add_peer,
disable_peer,
enable_peer,
list_peers,
remove_peer,
start_replication,stop_replicationGroup
name:securityCommands:
grant,
revoke,
user_permission版權(quán)所有?
2015
華為技術(shù)有限公司第10頁常用Shell接口–其他常用命令HBase還提供了一些其它目錄版權(quán)所有?
2015
華為技術(shù)有限公司第11頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第11頁1. HB在開始使用HBase
Java
API之前,需要做幾項(xiàng)準(zhǔn)備工作:
要求JDK版本1.7及以上版本。HBase開發(fā)相關(guān)的jar包(包括ZooKeeper、HDFS、MapReduce等)需要和HBase集群節(jié)點(diǎn)上的版本保持一致。在hosts文件中添加HBase服務(wù)器節(jié)點(diǎn)的IP和HostName的映射關(guān)系。HBase采用的接口與Apache
HBase保持一致,請參見:/apidocs/index.html版權(quán)所有?
2015
華為技術(shù)有限公司第12頁工程搭建
–
準(zhǔn)備工作在開始使用HBaseJavaAPI之前,需要做幾項(xiàng)準(zhǔn)備工1.
獲取客戶端安裝包中的配置文件core-site.xml、hbase-site.xml、hdfs-site.xml并放置在到Java工程中的conf目錄下。并將conf目錄添加到classpath下。2.
獲取客戶端安裝包中的HBase開發(fā)依賴的jar文件,并添加到工程的classpath路徑下。3.
具體操作請參考CPI文檔中開發(fā)環(huán)境準(zhǔn)備的章節(jié)。在Eclipse工具中,單擊“New
>Java
Project”,輸入工程名,單擊“Finish”即可創(chuàng)建Java工程。下載客戶端安裝包配置開發(fā)環(huán)境創(chuàng)建Java工程開發(fā)應(yīng)用編譯運(yùn)行//
初始化配置信息Configurationconf
=
HBaseConfiguration.create();//
創(chuàng)建表HBaseAdmin
admin=
new
HBaseAdmin(conf);admin.createTable(htd);//
插入一行數(shù)據(jù)HTable
table
=
new
HTable(conf,
tableName);Put
put=
new
Put(Bytes.toBytes("012005000201"));put.add(FAMILIES,
Bytes.toBytes("name"),
Bytes.toBytes("張三"));put.add(FAMILIES,
Bytes.toBytes("gender"),
Bytes.toBytes("男"));put.add(FAMILIES,
Bytes.toBytes("address"),
Bytes.toBytes("廣東省深圳市"));table.put(put);工程搭建
–
準(zhǔn)備工作版權(quán)所有?
2015
華為技術(shù)有限公司第13頁1.獲取客戶端安裝包中的配置文件core-site.xml//
安全版本Configurationconf=
HBaseConfiguration.create();conf.addResource("user-hbase.xml");版權(quán)所有?
2015
華為技術(shù)有限公司第14頁if(User.isHBaseSecurityEnabled(conf)){conf.set(HBASE_KEYTAB_FILE,System.getProperty("user.dir")
+
File.separator
+
"conf"+File.separator
+
conf.get(HBASE_KEYTAB_FILE));Stringkrbfilepath
=
System.getProperty("user.dir")
+
File.separator+"conf"+File.separator
+
"krb5.conf";System.setProperty("java.security.krb5.conf",
krbfilepath);try{ZKUtil.loginClient(conf,
HBASE_KEYTAB_FILE,
HBASE_KERBEROS_PRINCIPAL,InetAddress.getLocalHost().getCanonicalHostName());User.login(conf,HBASE_KEYTAB_FILE,HBASE_KERBEROS_PRINCIPAL,InetAddress.getLocalHost().getCanonicalHostName());}catch(IOExceptione){e.printStackTrace();}}通過調(diào)用HBaseConfiguration的create()方法來實(shí)例化。否則,將無法正確加載HBase中的相關(guān)配置項(xiàng)常用Java接口
–
創(chuàng)建安全版本的Configuration實(shí)例//安全版本版權(quán)所有?2015華為技術(shù)有限公司第14頁通過HBaseAdmin的createTable方法來創(chuàng)建一張表,指定表名、列族名稱。創(chuàng)建表分為快速建表和預(yù)分Region建表,前者表示創(chuàng)建表后整張表只有一個(gè)Region,隨著數(shù)據(jù)量的增加會(huì)自動(dòng)分裂成多個(gè)Region;后者表示,創(chuàng)建表時(shí)預(yù)先分配多個(gè)Region,此種方法建表可以提高寫入大量數(shù)據(jù)初期的數(shù)據(jù)寫入速度示例://
表名和列族名稱StringtableName="myTable";String[]families={"f1"};//
通過已有的Configuration對象實(shí)例化一個(gè)HBaseAdmin對象HBaseAdminadmin=newHBaseAdmin(config);//
表的描述信息,指定表名、列族名稱HTableDescriptortableDesc=newHTableDescriptor(tableName);tableDesc.addFamily(newHColumnDescriptor(families[i]));//
不預(yù)分Region建表admin.createTable(tableDesc);//
預(yù)分Region建表的兩種方式://
①指定起止RowKey和Region個(gè)數(shù);此時(shí)的起始RowKey為第一個(gè)Region的endKey,結(jié)束key為最后一個(gè)Region的startKey。admin.createTable(tableDesc,
Bytes.toBytes(10),Bytes.toBytes(800000),30);//
②指定RowKey數(shù)組,不包括第一個(gè)Region的startKey和最后一個(gè)Region的endKey,因此Region個(gè)數(shù)等于數(shù)組長度+1//
例如以下語句創(chuàng)建的表包括4個(gè)Region,各Region的起止key分別為[,a),
[a,k),[k,z),[z,),可以看成左閉右開區(qū)間,a屬于[a,k)這個(gè)Region,k屬于[k,z)這個(gè)Region,z屬于[z,)這個(gè)Region。byte[][]keys={Bytes.toBytes("a"),
Bytes.toBytes("k"),Bytes.toBytes("z")};admin.createTable(tableDesc,keys);版權(quán)所有?
2015
華為技術(shù)有限公司第15頁常用Java接口
–
創(chuàng)建表通過HBaseAdmin的createTable方法來創(chuàng)創(chuàng)建開啟壓縮功能有利于減少HBase中數(shù)據(jù)存儲(chǔ)的冗余數(shù)據(jù),HBase中有兩類壓縮機(jī)制,
HFile文件級別的壓縮Compress和DataBlockEncode前綴壓縮。HBase中數(shù)據(jù)存儲(chǔ)格式是HFile,文件級別的壓縮既是針對
HFile的壓縮,前綴壓縮式針對HFile中數(shù)據(jù)主要部分DataBlock進(jìn)行壓縮。使用HBase壓縮功能的方法是在創(chuàng)建表時(shí),針對列族在HColumnDescriptor類中通過接口設(shè)置示例:columnDesc=newHColumnDescriptor(families[i]);//
設(shè)置前綴壓縮,HBase提供了PREFIX、DIF、FAST_DIFF三種前綴壓縮方法columnDesc.setDataBlockEncoding(DataBlockEncoding.FAST_DIFF);//
設(shè)置文件壓縮,文件壓縮通常需要安裝壓縮算法共享庫,這里建議先先通過//
org.apache.hadoop.hbase.util.CompressionTest檢查一下壓縮算法可用性columnDesc.setCompressionType(Algorithm.SNAPPY);tableDesc.addFamily(columnDesc);版權(quán)所有?
2015
華為技術(shù)有限公司第16頁常用Java接口
–
開啟壓縮方式開啟壓縮功能有利于減少HBase中數(shù)據(jù)存儲(chǔ)的冗余數(shù)據(jù),HBHBase是一個(gè)面向列的數(shù)據(jù)庫,一行數(shù)據(jù),可能對應(yīng)多個(gè)列族,而一個(gè)列族又可以對應(yīng)多個(gè)列。通常,寫入數(shù)據(jù)的時(shí)候,我們需要
指定要寫入的列(含列族名稱和列名稱)。如果要往HBase表中寫入一行數(shù)據(jù),需要首先構(gòu)建一個(gè)Put實(shí)例。Put中包含了數(shù)據(jù)的
RowKey值和指定列(含列族名稱和列名稱)的Value值,一個(gè)RowKey的Value值可以有多個(gè)(即包含多個(gè)列)示例://
表的名稱為personprivatestaticfinalbyte[]TABLENAME=Bytes.toBytes("person");//
列族名稱的名稱為privateInfoprivatestaticfinalbyte[]FAMILIES=Bytes.toBytes("privateInfo");版權(quán)所有?
2015
華為技術(shù)有限公司第17頁//
列族privateInfo中有兩個(gè)列name和addressprivatestaticfinalbyte[][]qualifiers={Bytes.toBytes("name"),Bytes.toBytes("addres")};//
實(shí)例化一個(gè)put對象Putput=newPut(Bytes.toBytes(rowkey));put.add(FAMILIES,qualifiers[0],Bytes.toBytes(values[0][0]+
i));put.add(FAMILIES,
qualifiers[0],
Bytes.toBytes(values[0][1]
+
i));//
多個(gè)put存放到一個(gè)List中puts.add(put);//
提交一次put數(shù)據(jù)請求hTable.put(puts);常用Java接口
–
插入數(shù)據(jù)PutHBase是一個(gè)面向列的數(shù)據(jù)庫,一行數(shù)據(jù),可能對應(yīng)多個(gè)列族從表中讀取一條數(shù)據(jù),首先需要實(shí)例化該表對應(yīng)的HTable對象,然后創(chuàng)建一個(gè)Get對象。也可以為get對象設(shè)定參數(shù)值,如列族的名稱和列的名稱。查詢結(jié)果的該行數(shù)據(jù)存儲(chǔ)Result對象中,Result中存儲(chǔ)了多個(gè)KeyValue對示例:HTabletable=null;try{table=newHTable(conf,tableName);Getget=newGet(rowKey.getBytes());//
設(shè)定列族名和列名get.addColumn(family,qualifier);//
設(shè)定列族名get.addFamily(family);Resultresult=table.get(get);for(KeyValuekv:result.raw()){System.out.println(kv.getRow()+
"
"
+
(kv.getFamily())
+
"
"+(kv.getQualifier())+
"
"
+
kv.getTimestamp()
+
"
"+kv.getValue()+
"
");}}catch(IOExceptione){//TODO}finally{if(null!=table){try{table.close();}catch(IOExceptione){//TODO}}}版權(quán)所有?
2015
華為技術(shù)有限公司第18頁常用Java接口
–
讀取一行數(shù)據(jù)Get從表中讀取一條數(shù)據(jù),首先需要實(shí)例化該表對應(yīng)的HTable對要從表中讀取數(shù)據(jù),首先需要實(shí)例化該表對應(yīng)的HTable對象,然后創(chuàng)建一個(gè)Scan對象,并針對查詢條件設(shè)置scan的參數(shù)值,為了提高查詢效率,最好指定StartKey和EndKey。查詢結(jié)果的多行數(shù)據(jù)保存在ResultScanner對象,每行數(shù)據(jù)以Result對象形式存儲(chǔ),Result中存儲(chǔ)了多個(gè)KeyValue對示例:HTabletable=null;ResultScannerrScanner
=
null;try
{table=newHTable(conf,tableName);Scanscan=newScan();scan.setStartRow(startRow);scan.setStopRow(stopRow);//
重要參數(shù):每次RPC從服務(wù)端取回的記錄數(shù)scan.setCaching(1000);版權(quán)所有?
2015
華為技術(shù)有限公司第19頁rScanner=table.getScanner(scan);for(Resultr=rScanner.next();
r
!=
null;
r
=
rScanner.next())
{for
(KeyValue
kv
:
r.raw())
{//TODO}}}catch(IOExceptione){//TODO}finally{if(null!=rScanner)
{rScanner.close();}if(null!=table){try{table.close();}catch(IOExceptione){//TODO}}}常用Java接口
–
讀取多行數(shù)據(jù)Scan要從表中讀取數(shù)據(jù),首先需要實(shí)例化該表對應(yīng)的HTable對象
HBase
Filter主要通過設(shè)置一些過濾條件,在查詢(Scan)過程中進(jìn)行Row級別的數(shù)據(jù)過濾??梢栽O(shè)置RowKey過濾條件,也可以設(shè)置列名或者列值的過濾條件。
HBase中提供了多種過濾器,這些過濾器都在
org.apache.hadoop.hbase.filter包中。單個(gè)過濾器的使用,首先需要?jiǎng)?chuàng)建一個(gè)Scan對象,然后設(shè)置該對象的Filter參數(shù)為過濾器對象。也可以多個(gè)過濾器條件配合使用,采用FilterList。具體
HBase中提供了哪些filter,可以查詢API示例:Scans=
new
Scan();//
前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new
PrefixFilter(Bytes.toBytes("132")));//
查找符合條件的6行數(shù)據(jù)s.setFilter(newPageFilter(6));//
多個(gè)過濾器結(jié)合使用FilterList
list
=
new
FilterList(Operator.MUST_PASS_ALL);list.addFilter(new
SingleColumnValueFilter(family,qualifier,CompareOp.EQUAL,value));list.addFilter(new
PageFilter(6));s.setFilter(list);版權(quán)所有?
2015
華為技術(shù)有限公司第20頁常用Java接口
–
過濾器FilterHBaseFilter主要通過設(shè)置一些過濾條件,在查示例://
new
IndexAdmin對象進(jìn)行索引管理操作HBaseAdmin
admin
=
new
IndexAdmin(conf);版權(quán)所有?
2015
華為技術(shù)有限公司第21頁//
創(chuàng)建表的Desc對象和列族對象String
userTableName
=
"testAddIndex";HTableDescriptorhtd
=
newHTableDescriptor(TableName.valueOf(userTableName));HColumnDescriptorhcd
=
newHColumnDescriptor("cf");htd.addFamily(hcd);//
創(chuàng)建一個(gè)二級索引對象TableIndices
tableIndices
=
new
TableIndices();tableIndices.addIndex(iSpec);IndexSpecification
spec
=
new
IndexSpecification("index1");spec.addIndexColumn(hcd,
"q1",
ValueType.String,
10);//
創(chuàng)建表和二級索引admin.createTable(htd);常用Java接口
–
創(chuàng)建索引HBase通過
IndexAdmin可以進(jìn)行二級索引管理相關(guān)操作:創(chuàng)建索引、增加索引、刪除索引等??梢酝ㄟ^將索引信息和列族信息添加到
HTableDescriptor里面,實(shí)現(xiàn)創(chuàng)建表的同時(shí)創(chuàng)建索引用IndexSpecification來描述索引的定義信息,包括索引名、索引列、索引列類型、索引列長度。示例:版權(quán)所有?2015華為技術(shù)有限公司第21頁//創(chuàng)示例://
new
IndexAdmin對象HBaseAdminadmin
=
new
IndexAdmin(conf);String
userTableName
=
"testAddIndex";版權(quán)所有?
2015
華為技術(shù)有限公司第22頁//
new
索引對象IndexSpecification
spec
=
new
IndexSpecification("index1");spec.addIndexColumn(hcd,
"q1",
ValueType.String,
10);//
new
增加索引admin.addIndex(TableName.valueOf(userTableName),
spec);常用Java接口
–
增加索引HBase通過
IndexAdmin可以進(jìn)行二級索引管理相關(guān)操作:創(chuàng)建索引、增加索引、刪除索引等。如果表已經(jīng)創(chuàng)建了,需要增加索引,則需要采用IndexAdmin的addIndex接口來實(shí)現(xiàn)用IndexSpecification來描述索引的定義信息,包括索引名、索引列、索引列類型、索引列長度。示例:版權(quán)所有?2015華為技術(shù)有限公司第22頁//n示例://
new
IndexAdmin對象HBaseAdminadmin
=
new
IndexAdmin(conf);版權(quán)所有?
2015
華為技術(shù)有限公司第23頁//
表名和索引名String
userTableName
=
"testAddIndex";String
indexName=
“index1”;//
刪除索引admin.dropIndex(TableName.valueOf(userTableName),
indexName
);常用Java接口
–
刪除索引HBase通過
IndexAdmin可以進(jìn)行二級索引管理相關(guān)操作:創(chuàng)建索引、增加索引、刪除索引等。如果表和索引已經(jīng)創(chuàng)建了,需要?jiǎng)h除已有索引,則需要采用IndexAdmin的dropIndex接口來實(shí)現(xiàn)刪除索引只需要指定需要?jiǎng)h除的索引名和索引所在的表。示例:版權(quán)所有?2015華為技術(shù)有限公司第23頁//表思考題版權(quán)所有?
2015
華為技術(shù)有限公司第24頁1. 讀取數(shù)據(jù)時(shí)Scan接口的caching參數(shù)的作用是什么?為什么要設(shè)置該參數(shù)?思考題版權(quán)所有?2015華為技術(shù)有限公司第24頁1. 讀本章總結(jié)版權(quán)所有?
2015
華為技術(shù)有限公司第25頁
介紹HBase的幾種常用接口介紹HBase的常用Shell接口
介紹HBase二次開發(fā)工程搭建的準(zhǔn)備工作和方法
介紹HBase常用Java接口的使用方法本章總結(jié)版權(quán)所有?2015華為技術(shù)有限公司第25頁 介學(xué)習(xí)推薦版權(quán)所有?
2015
華為技術(shù)有限公司第26頁華為Learning網(wǎng)站/learning/Index!toTrainIndex華為Support案例庫/enterprise/servicecenter?lang=zh學(xué)習(xí)推薦版權(quán)所有?2015華為技術(shù)有限公司第26頁華為Lwww.huawe謝謝謝謝第28頁版權(quán)所有?
2015
華為技術(shù)有限公司HBase二次開發(fā)版權(quán)所有?2015華為技術(shù)有第29頁前言版權(quán)所有?
2015
華為技術(shù)有限公司第1頁
HBase是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設(shè)計(jì)目標(biāo)是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時(shí)的局限性。
本章主要介紹HBase的接口以及二次開發(fā)的使用指導(dǎo)。前言版權(quán)所有?2015華為技術(shù)有限公司第1頁 HBas目錄版權(quán)所有?
2015
華為技術(shù)有限公司第2頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第2頁1. HBaHBase常用接口版權(quán)所有?
2015
華為技術(shù)有限公司第3頁客戶端使用主要方式:HBase
ShellHBase的命令行工具,最簡單的接口,適合HBase管理使用。Java
APIHBase客戶端程序通過底層RPC接口與HBase集群進(jìn)行通信,客戶程序直接集成HBase的Java包,通過調(diào)用相關(guān)API即可完成操作。其余接口:REST
接口REST(Representational
StateTransfer)表述性狀態(tài)轉(zhuǎn)移接口。Thrift接口Thrift
是一個(gè)基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實(shí)現(xiàn),它可以生成包括C++,
Java,
Python,
Ruby,
PHP
等主流語言的代碼,這些代碼實(shí)現(xiàn)了
RPC
的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務(wù)的調(diào)用和實(shí)現(xiàn)。Avro接口Avro是一個(gè)數(shù)據(jù)序列化系統(tǒng),設(shè)計(jì)用于支持大批量數(shù)據(jù)交換的應(yīng)用。HBase常用接口版權(quán)所有?2015華為技術(shù)有限公司第3目錄版權(quán)所有?
2015
華為技術(shù)有限公司第4頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第4頁1. HBa常用Shell接口–
連接通過/hbaseshell來連接正在運(yùn)行的HBase
Shell客戶端用法://
安全登錄,在進(jìn)入hbase
shell客戶端之前,需要進(jìn)行安裝客戶端和用戶登錄的準(zhǔn)備工作,具體需要參考CPI文檔中《安裝與使用客戶端》章節(jié)//進(jìn)入HBase
shell客戶端#
.bin/hbase
shellHBase
Shell;
enter
'help<RETURN>'
for
list
ofsupported
commands.Type
"exit<RETURN>"
toleave
the
HBaseShellVersion
0.94.0,
r,
SunAug
2622:12:56CST
2012hbase(main):001:0>版權(quán)所有?
2015
華為技術(shù)有限公司第5頁常用Shell接口–連接通過/hbaseshell來連接常用Shell接口–
創(chuàng)建表創(chuàng)建表時(shí),可以選擇多個(gè)參數(shù),但表名和列族名是必須的參數(shù),其它參數(shù)還包括版本數(shù)、TTL
以及預(yù)分Region建表的key數(shù)組等用法:hbase>
create
't1',
{NAME
=>
'f1',
VERSIONS
=>
5}hbase>
create
't1',
{NAME
=>
'f1'},{NAME
=>
'f2'},
{NAME
=>
'f3'}hbase>
#
The
above
in
shorthand
would
be
the
following:hbase>
create
't1',
'f1',
'f2',
'f3'hbase>
create
't1',
{NAME
=>
'f1',
VERSIONS
=>
1,
TTL
=>
2592000,
BLOCKCACHE
=>
true}hbase>
create
't1',
'f1',
{SPLITS
=>
['10',
'20',
'30',
'40']}hbase>
create
't1',
'f1',
{SPLITS_FILE
=>
'splits.txt'}hbase>
#
Optionally
pre-split
the
table
into
NUMREGIONS,
usinghbase>
#
SPLITALGO
("HexStringSplit",
"UniformSplit"
or
classname)hbase>
create
't1',
'f1',
{NUMREGIONS
=>
15,
SPLITALGO=>
'HexStringSplit'}版權(quán)所有?
2015
華為技術(shù)有限公司第6頁常用Shell接口–創(chuàng)建表創(chuàng)建表時(shí),可以選擇多個(gè)參數(shù),但表常用Shell接口–
插入一行數(shù)據(jù)PutPut數(shù)據(jù)時(shí),必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時(shí)間戳用法:hbase>put
't1',
'r1','c1',
'value',
ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計(jì)算test表中的數(shù)據(jù)的條數(shù)示例://向表test中put數(shù)據(jù),RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1版權(quán)所有?
2015
華為技術(shù)有限公司第7頁hbase(main):002:0>0
row(s)in
0.5940hbase(main):003:0>0
row(s)in
0.0080//指定時(shí)間戳為3hbase(main):011:0>0
row(s)in
0.0510hbase(main):013:0>3
row(s)in
0.0160put'test','rowkey1','cf:qualifier1','value1'secondsput'test','rowkey2','cf:qualifier2','value2'secondsput'test','rowkey3','cf:qualifier3','value3',3secondscount'test'seconds常用Shell接口–插入一行數(shù)據(jù)PutPut數(shù)據(jù)時(shí),必選參常用Shell接口–
讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時(shí),必選參數(shù)是表名和RowKey,可選參數(shù)包括列名(包括列族和列名)、時(shí)間戳、版本數(shù)等用法:版權(quán)所有?
2015
華為技術(shù)有限公司第8頁hbase>hbase>hbase>hbase>hbase>hbase>get
't1',get
't1',get
't1',get
't1',get
't1',get
't1','r1''r1','r1','r1','r1','r1',{TIMERANGE=>[ts1,
ts2]}=>
'c1'}=>
['c1',
'c2',
'c3']}=>=>{COLUMN{COLUMN{COLUMN{COLUMN'c1','c1',TIMESTAMPTIMERANGE=>ts1}=>[ts1,ts2],VERSIONS=>
4}hbase>getVERSIONS=>
4}'t1','r1',{COLUMN
=>
'c1','c1''c1','c2'['c1',
'c2']TIMESTAMP=>ts1,hbase>hbase>hbase>get
't1',get
't1',get
't1','r1','r1','r1',常用Shell接口–讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時(shí),必選常用Shell接口–
讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選參數(shù)是表名,可選參數(shù)包括列名(包括列族和列名)、起止Key、Filter用法://查詢元表版權(quán)所有?
2015
華為技術(shù)有限公司第9頁hbase>hbase>hbase>hbase>hbase>scanscanscanscanscan'.META.''.META.',
{COLUMNS
=>
'info:regioninfo'}'t1','t1','t1',{COLUMNS
=>
['c1','c2'],LIMIT
=>10,
STARTROW
=>'xyz'}{COLUMNS
=>
'c1',
TIMERANGE
=>
[1303668804,
1303668904]}{FILTER
=>"(PrefixFilter
('row2')AND
(QualifierFilters(>=,'binary:xyz')))AND(TimestampsFilterhbase>scan't1',(
123,
456))"}{FILTER
=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,
0)}hbase>scan't1',
{COLUMNS
=>
['c1','c2'],CACHE_BLOCKS
=>false}hbase>
scan't1',
{RAW=>true,VERSIONS
=>10}常用Shell接口–讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選常用Shell接口–
其他常用命令HBase還提供了一些其它的Shell
API,包括general、ddl、dml、tools、replication和security六組,每組又包括多個(gè)Shell命令。每組命令和每個(gè)命令的用法均可以通過help查詢其用法COMMAND
GROUPS:Group
name:generalCommands:
status,
version,
whoamiGroup
name:
ddlCommands:
alter,
alter_async,
alter_status,create,
describe,
disable,
disable_all,
drop,drop_all,
enable,
enable_all,
exists,
is_disabled,
is_enabled,
list,show_filtersGroup
name:dmlCommands:
count,
delete,
deleteall,
get,
get_counter,
incr,put,scan,
truncateGroup
name:toolsCommands:
assign,
balance_switch,
balancer,
close_region,
compact,
flush,
hlog_roll,major_compact,
move,split,
unassign,
zk_dumpGroup
name:replicationCommands:
add_peer,
disable_peer,
enable_peer,
list_peers,
remove_peer,
start_replication,stop_replicationGroup
name:securityCommands:
grant,
revoke,
user_permission版權(quán)所有?
2015
華為技術(shù)有限公司第10頁常用Shell接口–其他常用命令HBase還提供了一些其它目錄版權(quán)所有?
2015
華為技術(shù)有限公司第11頁1. HBase常用接口介紹常用Shell接口常用Java接口目錄版權(quán)所有?2015華為技術(shù)有限公司第11頁1. HB在開始使用HBase
Java
API之前,需要做幾項(xiàng)準(zhǔn)備工作:
要求JDK版本1.7及以上版本。HBase開發(fā)相關(guān)的jar包(包括ZooKeeper、HDFS、MapReduce等)需要和HBase集群節(jié)點(diǎn)上的版本保持一致。在hosts文件中添加HBase服務(wù)器節(jié)點(diǎn)的IP和HostName的映射關(guān)系。HBase采用的接口與Apache
HBase保持一致,請參見:/apidocs/index.html版權(quán)所有?
2015
華為技術(shù)有限公司第12頁工程搭建
–
準(zhǔn)備工作在開始使用HBaseJavaAPI之前,需要做幾項(xiàng)準(zhǔn)備工1.
獲取客戶端安裝包中的配置文件core-site.xml、hbase-site.xml、hdfs-site.xml并放置在到Java工程中的conf目錄下。并將conf目錄添加到classpath下。2.
獲取客戶端安裝包中的HBase開發(fā)依賴的jar文件,并添加到工程的clas
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/Z 41305.6-2026環(huán)境條件電子設(shè)備振動(dòng)和沖擊第6部分:利用螺旋槳式飛機(jī)運(yùn)輸
- 流程工業(yè)智能制造技術(shù)理論及應(yīng)用 課件 第六章-流程工業(yè)數(shù)字孿生
- 內(nèi)務(wù)培訓(xùn)課件
- 濰坊沙龍-活動(dòng)策劃方案(3篇)
- 社會(huì)體育指導(dǎo)中心管理制度(3篇)
- 管理制度格式及范文圖片(3篇)
- 車間安全風(fēng)險(xiǎn)防范管理制度(3篇)
- 長治燒烤活動(dòng)策劃方案(3篇)
- 2026年及未來5年市場數(shù)據(jù)中國倉儲(chǔ)式超市行業(yè)發(fā)展運(yùn)行現(xiàn)狀及發(fā)展趨勢預(yù)測報(bào)告
- 紗線培訓(xùn)教學(xué)課件
- GB/T 4436-2012鋁及鋁合金管材外形尺寸及允許偏差
- GB/T 4389-2013雙頭呆扳手、雙頭梅花扳手、兩用扳手頭部外形的最大尺寸
- ESC心臟瓣膜病指南解讀-課件
- 急性左心衰的搶救配合及護(hù)理課件
- 綠色化學(xué)原理課件
- 《出塞》優(yōu)秀課件
- 二年級下冊課文快樂讀書吧-神筆馬良
- 公司收貨確認(rèn)函
- 火燒車的現(xiàn)場查勘及相關(guān)知識(shí)(64頁)PPT.
- YY∕T 0636.3-2021 醫(yī)用吸引設(shè)備 第3部分:以真空或正壓源為動(dòng)力的吸引設(shè)備(高清正版)
- 病理生理凝血與抗凝血
評論
0/150
提交評論