溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hbase性能優(yōu)化的方法是什么

發(fā)布時(shí)間:2021-12-09 13:45:13 來源:億速云 閱讀:119 作者:iii 欄目:云計(jì)算

本篇內(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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI