您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“hbase性能優(yōu)化的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“hbase性能優(yōu)化的方法是什么”吧!
1)配置
當(dāng)你調(diào)用create方法時(shí)將會(huì)加載兩個(gè)配置文件:hbase-default.xml and hbase-site.xml,利用的是當(dāng)前的java類路徑, 代碼中configuration設(shè)置的這些配置將會(huì)覆蓋hbase-default.xml和hbase-site.xml中相同的配置,如果兩個(gè)配置文件都存在并且都設(shè)置好了相應(yīng)參上面的屬性下面的屬性即可
2)關(guān)于建表
public void createTable(HTableDescriptor desc)
HTableDescriptor 代表的是表的schema, 提供的方法中比較有用的有
setMaxFileSize,指定最大的regionsize
setMemStoreFlushSize 指定memstoreflush到HDFS上的文件大小
增加family通過 addFamily方法
public void addFamily(final HColumnDescriptor family)
HColumnDescriptor 代表的是column的schema,提供的方法比較常用的有
setTimeToLive:指定最大的TTL,單位是ms,過期數(shù)據(jù)會(huì)被自動(dòng)刪除。
setInMemory:指定是否放在內(nèi)存中,對(duì)小表有用,可用于提高效率。默認(rèn)關(guān)閉
setBloomFilter:指定是否使用BloomFilter,可提高隨機(jī)查詢效率。默認(rèn)關(guān)閉
setCompressionType:設(shè)定數(shù)據(jù)壓縮類型。默認(rèn)無壓縮。
setMaxVersions:指定數(shù)據(jù)最大保存的版本個(gè)數(shù)。默認(rèn)為3。
注意的是,一般我們不去setInMemory為true,默認(rèn)是關(guān)閉的
3)關(guān)于入庫
官方建議
table.setAutoFlush(false);//數(shù)據(jù)入庫之前先設(shè)置此項(xiàng)為false
table.setflushCommits();//入庫完成后,手動(dòng)刷入數(shù)據(jù)
注意:
在入庫過程中,put.setWriteToWAL(true/flase);
關(guān)于這一項(xiàng)如果不希望大量數(shù)據(jù)在存儲(chǔ)過程中丟失,建議設(shè)置為true,如果僅是在測(cè)試演練階段,為了節(jié)省入庫時(shí)間建議設(shè)置為false
4)關(guān)于獲取表實(shí)例
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = (HTable) pool.getTable(tableName);
建議用表連接池的方式獲取表,具體池有什么作用,我想用過數(shù)據(jù)庫連接池的同學(xué)都知道,我就不再重復(fù)
不建議使用new HTable(configuration,tableName);的方式獲取表
5)關(guān)于查詢
建議每個(gè)查詢語句都放入try catch語句塊,并且finally中要進(jìn)行關(guān)閉ResultScanner實(shí)例以及將不使用的表重新放入到HTablePool中的操作,具體做法如下
Java代碼
public static void QueryAll(String tableName) {
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = null;
ResultScanner rs = null;
try {
Scan scan = new Scan();
table = (HTable) pool.getTable(tableName);
rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("獲得到rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + new String(keyValue.getFamily())
+ "====值:" + new String(keyValue.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
rs.close();// 最后還得關(guān)閉
pool.putTable(table); //實(shí)際應(yīng)用過程中,pool獲取實(shí)例的方式應(yīng)該抽取為單例模式的,不應(yīng)在每個(gè)方法都重新獲取一次(單例明白?就是抽取到專門獲取pool的邏輯類中,具體邏輯為如果pool存在著直接使用,如果不存在則new)
}
}
public static voidQueryAll(String tableName) {
HTablePool pool = new HTablePool(configuration,Integer.MAX_VALUE);
HTable table = null;
ResultScanner rs = null;
try {
Scan scan = new Scan();
table = (HTable) pool.getTable(tableName);
rs = table.getScanner(scan);
for (Result r : rs) {
System.out.println("獲得到rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + newString(keyValue.getFamily())
+ "====值:" + new String(keyValue.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
rs.close();// 最后還得關(guān)閉
pool.putTable(table); //實(shí)際應(yīng)用過程中,pool獲取實(shí)例的方式應(yīng)該抽取為單例模式的,不應(yīng)在每個(gè)方法都重新獲取一次(單例明白?就是抽取到專門獲取pool的邏輯類中,具體邏輯為如果pool存在著直接使用,如果不存在則new)
}
}
到此,相信大家對(duì)“hbase性能優(yōu)化的方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。