日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase性能优化2

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase性能优化2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

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)

? ? }

??}

更多精彩內容請關注:http://bbs.superwu.cn

關注超人學院微信二維碼:

轉載于:https://my.oschina.net/crxy/blog/419672

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的hbase性能优化2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。