版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
版權(quán)所有?
2015
華為技術(shù)有限公司HBase二次開發(fā)版權(quán)所有?2015華為技術(shù)有第1頁前言版權(quán)所有?
2015
華為技術(shù)有限公司第1頁
HBase是一個高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設(shè)計目標(biāo)是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時的局限性。
本章主要介紹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
是一個基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實現(xiàn),它可以生成包括C++,
Java,
Python,
Ruby,
PHP
等主流語言的代碼,這些代碼實現(xiàn)了
RPC
的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務(wù)的調(diào)用和實現(xiàn)。Avro接口Avro是一個數(shù)據(jù)序列化系統(tǒng),設(shè)計用于支持大批量數(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ù),但表名和列族名是必須的參數(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ù),但表常用Shell接口–
插入一行數(shù)據(jù)PutPut數(shù)據(jù)時,必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時間戳用法:hbase>put
't1',
'r1','c1',
'value',
ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計算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//指定時間戳為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ù)時,必選參常用Shell接口–
讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時,必選參數(shù)是表名和RowKey,可選參數(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ù)時,必選常用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六組,每組又包括多個Shell命令。每組命令和每個命令的用法均可以通過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之前,需要做幾項準(zhǔn)備工作:
要求JDK版本1.7及以上版本。HBase開發(fā)相關(guān)的jar包(包括ZooKeeper、HDFS、MapReduce等)需要和HBase集群節(jié)點上的版本保持一致。在hosts文件中添加HBase服務(wù)器節(jié)點的IP和HostName的映射關(guān)系。HBase采用的接口與Apache
HBase保持一致,請參見:/apidocs/index.html版權(quán)所有?
2015
華為技術(shù)有限公司第12頁工程搭建
–
準(zhǔn)備工作在開始使用HBaseJavaAPI之前,需要做幾項準(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()方法來實例化。否則,將無法正確加載HBase中的相關(guān)配置項常用Java接口
–
創(chuàng)建安全版本的Configuration實例//安全版本版權(quán)所有?2015華為技術(shù)有限公司第14頁通過HBaseAdmin的createTable方法來創(chuàng)建一張表,指定表名、列族名稱。創(chuàng)建表分為快速建表和預(yù)分Region建表,前者表示創(chuàng)建表后整張表只有一個Region,隨著數(shù)據(jù)量的增加會自動分裂成多個Region;后者表示,創(chuàng)建表時預(yù)先分配多個Region,此種方法建表可以提高寫入大量數(shù)據(jù)初期的數(shù)據(jù)寫入速度示例://
表名和列族名稱StringtableName="myTable";String[]families={"f1"};//
通過已有的Configuration對象實例化一個HBaseAdmin對象HBaseAdminadmin=newHBaseAdmin(config);//
表的描述信息,指定表名、列族名稱HTableDescriptortableDesc=newHTableDescriptor(tableName);tableDesc.addFamily(newHColumnDescriptor(families[i]));//
不預(yù)分Region建表admin.createTable(tableDesc);//
預(yù)分Region建表的兩種方式://
①指定起止RowKey和Region個數(shù);此時的起始RowKey為第一個Region的endKey,結(jié)束key為最后一個Region的startKey。admin.createTable(tableDesc,
Bytes.toBytes(10),Bytes.toBytes(800000),30);//
②指定RowKey數(shù)組,不包括第一個Region的startKey和最后一個Region的endKey,因此Region個數(shù)等于數(shù)組長度+1//
例如以下語句創(chuàng)建的表包括4個Region,各Region的起止key分別為[,a),
[a,k),[k,z),[z,),可以看成左閉右開區(qū)間,a屬于[a,k)這個Region,k屬于[k,z)這個Region,z屬于[z,)這個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ù)存儲的冗余數(shù)據(jù),HBase中有兩類壓縮機(jī)制,
HFile文件級別的壓縮Compress和DataBlockEncode前綴壓縮。HBase中數(shù)據(jù)存儲格式是HFile,文件級別的壓縮既是針對
HFile的壓縮,前綴壓縮式針對HFile中數(shù)據(jù)主要部分DataBlock進(jìn)行壓縮。使用HBase壓縮功能的方法是在創(chuàng)建表時,針對列族在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ù)存儲的冗余數(shù)據(jù),HBHBase是一個面向列的數(shù)據(jù)庫,一行數(shù)據(jù),可能對應(yīng)多個列族,而一個列族又可以對應(yīng)多個列。通常,寫入數(shù)據(jù)的時候,我們需要
指定要寫入的列(含列族名稱和列名稱)。如果要往HBase表中寫入一行數(shù)據(jù),需要首先構(gòu)建一個Put實例。Put中包含了數(shù)據(jù)的
RowKey值和指定列(含列族名稱和列名稱)的Value值,一個RowKey的Value值可以有多個(即包含多個列)示例://
表的名稱為personprivatestaticfinalbyte[]TABLENAME=Bytes.toBytes("person");//
列族名稱的名稱為privateInfoprivatestaticfinalbyte[]FAMILIES=Bytes.toBytes("privateInfo");版權(quán)所有?
2015
華為技術(shù)有限公司第17頁//
列族privateInfo中有兩個列name和addressprivatestaticfinalbyte[][]qualifiers={Bytes.toBytes("name"),Bytes.toBytes("addres")};//
實例化一個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));//
多個put存放到一個List中puts.add(put);//
提交一次put數(shù)據(jù)請求hTable.put(puts);常用Java接口
–
插入數(shù)據(jù)PutHBase是一個面向列的數(shù)據(jù)庫,一行數(shù)據(jù),可能對應(yīng)多個列族從表中讀取一條數(shù)據(jù),首先需要實例化該表對應(yīng)的HTable對象,然后創(chuàng)建一個Get對象。也可以為get對象設(shè)定參數(shù)值,如列族的名稱和列的名稱。查詢結(jié)果的該行數(shù)據(jù)存儲Result對象中,Result中存儲了多個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ù),首先需要實例化該表對應(yīng)的HTable對要從表中讀取數(shù)據(jù),首先需要實例化該表對應(yīng)的HTable對象,然后創(chuàng)建一個Scan對象,并針對查詢條件設(shè)置scan的參數(shù)值,為了提高查詢效率,最好指定StartKey和EndKey。查詢結(jié)果的多行數(shù)據(jù)保存在ResultScanner對象,每行數(shù)據(jù)以Result對象形式存儲,Result中存儲了多個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ù),首先需要實例化該表對應(yīng)的HTable對象
HBase
Filter主要通過設(shè)置一些過濾條件,在查詢(Scan)過程中進(jìn)行Row級別的數(shù)據(jù)過濾??梢栽O(shè)置RowKey過濾條件,也可以設(shè)置列名或者列值的過濾條件。
HBase中提供了多種過濾器,這些過濾器都在
org.apache.hadoop.hbase.filter包中。單個過濾器的使用,首先需要創(chuàng)建一個Scan對象,然后設(shè)置該對象的Filter參數(shù)為過濾器對象。也可以多個過濾器條件配合使用,采用FilterList。具體
HBase中提供了哪些filter,可以查詢API示例:Scans=
new
Scan();//
前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new
PrefixFilter(Bytes.toBytes("132")));//
查找符合條件的6行數(shù)據(jù)s.setFilter(newPageFilter(6));//
多個過濾器結(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)建一個二級索引對象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里面,實現(xiàn)創(chuàng)建表的同時創(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接口來實現(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)建了,需要刪除已有索引,則需要采用IndexAdmin的dropIndex接口來實現(xiàn)刪除索引只需要指定需要刪除的索引名和索引所在的表。示例:版權(quán)所有?2015華為技術(shù)有限公司第23頁//表思考題版權(quán)所有?
2015
華為技術(shù)有限公司第24頁1. 讀取數(shù)據(jù)時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是一個高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設(shè)計目標(biāo)是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時的局限性。
本章主要介紹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
是一個基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實現(xiàn),它可以生成包括C++,
Java,
Python,
Ruby,
PHP
等主流語言的代碼,這些代碼實現(xiàn)了
RPC
的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務(wù)的調(diào)用和實現(xiàn)。Avro接口Avro是一個數(shù)據(jù)序列化系統(tǒng),設(shè)計用于支持大批量數(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ù),但表名和列族名是必須的參數(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ù),但表常用Shell接口–
插入一行數(shù)據(jù)PutPut數(shù)據(jù)時,必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時間戳用法:hbase>put
't1',
'r1','c1',
'value',
ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計算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//指定時間戳為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ù)時,必選參常用Shell接口–
讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時,必選參數(shù)是表名和RowKey,可選參數(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ù)時,必選常用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六組,每組又包括多個Shell命令。每組命令和每個命令的用法均可以通過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之前,需要做幾項準(zhǔn)備工作:
要求JDK版本1.7及以上版本。HBase開發(fā)相關(guān)的jar包(包括ZooKeeper、HDFS、MapReduce等)需要和HBase集群節(jié)點上的版本保持一致。在hosts文件中添加HBase服務(wù)器節(jié)點的IP和HostName的映射關(guān)系。HBase采用的接口與Apache
HBase保持一致,請參見:/apidocs/index.html版權(quán)所有?
2015
華為技術(shù)有限公司第12頁工程搭建
–
準(zhǔn)備工作在開始使用HBaseJavaAPI之前,需要做幾項準(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沖壓安全管理制度規(guī)定
- 2024年福建客運(yùn)資格證模擬考試題庫下載電子版
- 2024年陜西旅客運(yùn)輸從業(yè)資格證考試題庫
- 吉首大學(xué)《化工環(huán)境保護(hù)概論》2021-2022學(xué)年第一學(xué)期期末試卷
- 《機(jī)床夾具設(shè)計》試卷1
- 吉林藝術(shù)學(xué)院《流行音樂演唱錄音實踐Ⅲ》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年供應(yīng)協(xié)議書模板合同模板下載
- 吉林師范大學(xué)《篆書理論與技法I》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年大學(xué)助研聘用合同范本
- 2024年大水面出租轉(zhuǎn)讓合同范本
- 29、顧客意見簿(表029)
- 石油和天然氣儲存行業(yè)物聯(lián)網(wǎng)與智能化技術(shù)
- 《跟上兔子》繪本四年級第1季Home-Is-Best課件
- 全頻段無線通信技術(shù)
- HSS評分(膝關(guān)節(jié)評分)
- 海南省義務(wù)教育學(xué)校辦學(xué)基本標(biāo)準(zhǔn)(試行)
- 公園廣場保潔管理服務(wù)投標(biāo)方案
- 過程流程圖專業(yè)知識講座
- 民航M9英語詞匯練習(xí)
- 發(fā)電機(jī)系統(tǒng)培訓(xùn)
- 湖北省三校高三聯(lián)考語文試題(Word版含答案)
評論
0/150
提交評論