大數(shù)據(jù)培訓(xùn)Module06HBase二次開發(fā)課件_第1頁
大數(shù)據(jù)培訓(xùn)Module06HBase二次開發(fā)課件_第2頁
大數(shù)據(jù)培訓(xùn)Module06HBase二次開發(fā)課件_第3頁
大數(shù)據(jù)培訓(xùn)Module06HBase二次開發(fā)課件_第4頁
大數(shù)據(jù)培訓(xùn)Module06HBase二次開發(fā)課件_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論