您好,登錄后才能下訂單哦!
本篇內容主要講解“hbase性能優化的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“hbase性能優化的方法是什么”吧!
1)配置
當你調用create方法時將會加載兩個配置文件:hbase-default.xml and hbase-site.xml,利用的是當前的java類路徑, 代碼中configuration設置的這些配置將會覆蓋hbase-default.xml和hbase-site.xml中相同的配置,如果兩個配置文件都存在并且都設置好了相應參上面的屬性下面的屬性即可
2)關于建表
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,過期數據會被自動刪除。
setInMemory:指定是否放在內存中,對小表有用,可用于提高效率。默認關閉
setBloomFilter:指定是否使用BloomFilter,可提高隨機查詢效率。默認關閉
setCompressionType:設定數據壓縮類型。默認無壓縮。
setMaxVersions:指定數據最大保存的版本個數。默認為3。
注意的是,一般我們不去setInMemory為true,默認是關閉的
3)關于入庫
官方建議
table.setAutoFlush(false);//數據入庫之前先設置此項為false
table.setflushCommits();//入庫完成后,手動刷入數據
注意:
在入庫過程中,put.setWriteToWAL(true/flase);
關于這一項如果不希望大量數據在存儲過程中丟失,建議設置為true,如果僅是在測試演練階段,為了節省入庫時間建議設置為false
4)關于獲取表實例
HTablePool pool = new HTablePool(configuration, Integer.MAX_VALUE);
HTable table = (HTable) pool.getTable(tableName);
建議用表連接池的方式獲取表,具體池有什么作用,我想用過數據庫連接池的同學都知道,我就不再重復
不建議使用new HTable(configuration,tableName);的方式獲取表
5)關于查詢
建議每個查詢語句都放入try catch語句塊,并且finally中要進行關閉ResultScanner實例以及將不使用的表重新放入到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();// 最后還得關閉
pool.putTable(table); //實際應用過程中,pool獲取實例的方式應該抽取為單例模式的,不應在每個方法都重新獲取一次(單例明白?就是抽取到專門獲取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();// 最后還得關閉
pool.putTable(table); //實際應用過程中,pool獲取實例的方式應該抽取為單例模式的,不應在每個方法都重新獲取一次(單例明白?就是抽取到專門獲取pool的邏輯類中,具體邏輯為如果pool存在著直接使用,如果不存在則new)
}
}
到此,相信大家對“hbase性能優化的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。