一、hbase配置物件
hbaseconfiguration是每乙個hbase client都會使用到的物件,它代表的是hbase配置資訊
構造方法:
public hbaseconfiguration()
public hbaseconfiguration(final configuration c)
預設的構造方式會嘗試從hbase-default.xml和hbase-site.xml中讀取配置。如果classpath沒有這兩個檔案,就需要你自己設定配置。
eg.configuration hbase_config = new configuration();
hbase_config.set(「hbase.zookeeper.quorum」, 「zkserver」);
hbase_config.set(「hbase.zookeeper.property.clientport」, 「2181″);
hbaseconfiguration cfg = new hbaseconfiguration(hbase_config);
二、建立表
建立表是通過hbaseadmin物件來操作的。hbaseadmin負責表的meta資訊處理。
hbaseadmin提供了createtable這個方法:
public void createtable(htabledescriptor desc)
htabledescriptor 代表的是表的schema, 提供的方法中比較有用的有
setmaxfilesize,指定最大的region size
setmemstoreflushsize 指定memstore flush到hdfs上的檔案大小
三、增加列族
增加列家族是通過htabledescriptor物件來操作的。
public void addfamily(final hcolumndescriptor family)
hcolumndescriptor 代表的是column的schema,提供的方法比較常用的有
settimetolive:指定最大的ttl,單位是ms,過期資料會被自動刪除。
setinmemory:指定是否放在記憶體中,對小表有用,可用於提高效率。預設關閉
setbloomfilter:指定是否使用bloomfilter,可提高隨機查詢效率。預設關閉
setcompressiontype:設定資料壓縮型別。預設無壓縮。
setmaxversions:指定資料最大儲存的版本個數。預設為3。
四、刪除表
刪除表是通過hbaseadmin來操作,刪除表之前首先要disable表。這是乙個非常耗時的操作,所以不建議頻繁刪除表。
disabletable和deletetable分別用來disable和delete表。
eg.hbaseadmin hadmin = new hbaseadmin(hbaseconfig);
if (hadmin.tableexists(tablename))
五、查詢資料
查詢分為單條隨機查詢和批量查詢。
單條查詢是通過rowkey在table中查詢某一行的資料。htable提供了get方法來完成單條查詢。
批量查詢是通過制定一段rowkey的範圍來查詢。htable提供了個getscanner方法來完成批量查詢。
public result get(final get get)
public resultscanner getscanner(final scan scan)
get物件包含了乙個get查詢需要的資訊。它的構造方法有兩種:
public get(byte row)
public get(byte row, rowlock rowlock)
rowlock是為了保證讀寫的原子性,你可以傳遞乙個已經存在rowlock,否則hbase會自動生成乙個新的rowlock。
scan物件提供了預設建構函式,一般使用預設建構函式。
get/scan的常用方法有:
addfamily/addcolumn:指定需要的family或者column,如果沒有呼叫任何addfamily或者column,會返回所有的columns.
setmaxversions:指定最大的版本個數。如果不帶任何引數呼叫setmaxversions,表示取所有的版本。如果不掉用setmaxversions,只會取到最新的版本。
settimerange:指定最大的時間戳和最小的時間戳,只有在此範圍內的cell才能被獲取。
settimestamp:指定時間戳。
setfilter:指定filter來過濾掉不需要的資訊
scan特有的方法:
setstartrow:指定開始的行。如果不呼叫,則從表頭開始。
setstoprow:指定結束的行(不含此行)。
setbatch:指定最多返回的cell數目。用於防止一行中有過多的資料,導致outofmemory錯誤。
resultscanner是result的乙個容器,每次呼叫resultscanner的next方法,會返回result.
public result next() throws ioexception;
public result next(int nbrows) throws ioexception;
result代表是一行的資料。常用方法有:
getrow:返回rowkey
raw:返回所有的key value陣列。
getvalue:按照column來獲取cell的值
eg.scan s = new scan();
s.setmaxversions();
resultscanner ss = table.getscanner(s);
for(result r:ss)
}六、插入資料
htable通過put方法來插入資料。
public void put(final put put) throws ioexception
public void put(final listputs) throws ioexception
可以傳遞單個批put物件或者list put物件來分別實現單條插入和批量插入。
put提供了3種構造方式:
public put(byte row)
public put(byte row, rowlock rowlock)
public put(put puttocopy)
put常用的方法有:
add:增加乙個cell
settimestamp:指定所有cell預設的timestamp,如果乙個cell沒有指定timestamp,就會用到這個值。如果沒有呼叫,hbase會將當前時間作為未指定timestamp的cell的timestamp.
setwritetowal: wal是write ahead log的縮寫,指的是hbase在插入操作前是否寫log。預設是開啟,關掉會提高效能,但是如果系統出現故障(負責插入的region server掛掉),資料可能會丟失。
另外htable也有兩個方法也會影響插入的效能
setautoflash: autoflush指的是在每次呼叫hbase的put操作,是否提交到hbase server。預設是true,每次會提交。如果此時是單條插入,就會有更多的io,從而降低效能.
setwritebuffersize: write buffer size在autoflush為false的時候起作用,預設是2mb,也就是當插入資料超過2mb,就會自動提交到server
七、刪除資料
htable 通過delete方法來刪除資料。
public void delete(final delete delete)
delete構造方法有:
public delete(byte row)
public delete(byte row, long timestamp, rowlock rowlock)
public delete(final delete d)
delete常用方法有
deletefamily/deletecolumns:指定要刪除的family或者column的資料。如果不呼叫任何這樣的方法,將會刪除整行。
注意:如果某個cell的timestamp高於當前時間,這個cell將不會被刪除,仍然可以查出來。
eg.htable table = new htable(hbaseconfig, 「mytest」);
delete d = new delete(「row1″.getbytes());
table.delete(d)
八、切分表
hbaseadmin提供split方法來將table 進行split.
public void split(final string tablenameorregionname)
如果提供的tablename,那麼會將table所有region進行split ;如果提供的region name,那麼只會split這個region.
由於split是乙個非同步操作,我們並不能確切的控制region的個數。
eg.public void split(string tablename,int number,int timeout) throws exception
else if(system.currenttimemillis()-t>timeout)
thread.sleep(1000*10);}}
程式設計,還是程式設計
喜歡程式設計,雖然水平一般,但還是執著地學習與程式設計有關的知識。中間因為工作關係與程式設計遠離了一段時間,現在又重拾起來,細想起來還是因為喜歡吧。喜歡程式軟體的思想和原理,喜歡程式 的魅力和成就感。程式設計軟體的思想是最值得學習的,一直認為思想決定行動,思想改變世界。每種軟體的流行和受人追捧,無不...
少兒程式設計程式設計
機械人比賽,聽上去讓人有一種高大上的科技感,沒錯,在大多數人眼裡,玩機械人那是科學家做的事情,不過隨著機械人教育的普及,越來越多的孩子也能夠駕馭這高大上的機械人。格物斯坦小坦克告訴你原因,這是歸結於孩子對於程式設計課程的學習,學會對機械人進行程式設計了,自然就能玩轉機械人啦。參加機械人比賽的意義遠遠...
LINUX程式設計 socket程式設計
什麼是套接字 套接字是一種通訊過程,它使客戶 伺服器系統的開發工作既可以在本地單機上進行,也可以跨網路進行。套接字建立過程 1,建立乙個套接字,這是分配給該伺服器程序的乙個作業系統資源,套接字由伺服器通過系統呼叫socket建立出來的,所以其它程序將不能對它進行訪問。2,給套接字起個名字,用系統呼叫...