從HBase讀取資料提交到Solr建立索引

2021-06-19 15:11:52 字數 2181 閱讀 2118

從hbase中讀取資料既可以直接呼叫htable等api介面,也可以採用mapreduce的方式來讀。如果資料表比較大,分成多個region來儲存,後者可以顯著提高資料讀取效率。hbase提供了乙個行統計程式rowcounter(org.apache.hadoop.hbase.mapreduce包)展示了如何通過mapreduce讀取hbase示例,可作為參考。

注意在讀取時可以配置以下調優引數:

conf.setboolean("mapred.map.tasks.speculative.execution", false);

當mapreduce資料來源為hbase時,一般會設定speculative execution為false。因為hbase的本地儲存機制,當前map處理的資料一般位於本機,若另外新建乙個map,需要在網路中傳輸資料,浪費網路和i/o資源。

conf.setint("hbase.client.scanner.caching", 100);

指定一次next()操作從伺服器獲取的資料條數,預設為1。適當提高該值可以顯著提公升效能,代價是記憶體占用的增加。

scan.setcacheblocks(false);

scan出來的資料一般是一次使用的,不必放在快取中。

在利用solrj新增索引時,可以每構建乙個solrinputdocument就執行add操作,它會觸發http請求,將資料傳送到solr伺服器。為了提高效率,最好是批量add。在程式中用list快取文件物件,數量達到引數「solr.commit.size」時,就批量add。注意在cleanup()中將list中餘下的文件提交到伺服器。程式中用到的引數寫在了hbase-site.xml檔案中。

public class hbaseindexer ; // 用於計數器

private solrserver solr; // 只建立乙個solrserver例項

private int commitsize;

private final listinputdocs = new arraylist();

/** called once at the beginning of the task. */

protected void setup(context context) throws ioexception, interruptedexception

@override

public void map(immutablebyteswritable row, result values, context context)

throws ioexception

inputdocs.add(solrdoc);

if (inputdocs.size() >= commitsize) catch (final solrserverexception e)

inputdocs.clear();

}context.getcounter(counters.rows).increment(1);

}/** called once at the end of the task. */

protected void cleanup(context context) throws ioexception, interruptedexception

} catch (final solrserverexception e)

} }

public static job createsubmittablejob(configuration conf, string tablename)

throws ioexception

private static void printusage(string errormessage)

/** main entry point. */

public static void main(string args) throws exception

string tablename = args[0];

job job = createsubmittablejob(conf, tablename);

if (job == null)

job.waitforcompletion(true);

log.info("put " + counter.getvalue() + " records to solr!"); // 列印日誌

}}

MyBatis資料提交到MySQL資料亂碼問題

eclipse環境已經設定為了utf 8 tomcat的使用的8.5版本,有過濾器,未做處理 mysql的編碼如圖 查詢指令show variables like character 原路徑 jdbc mysql 新路徑 jdbc mysql useunicode true characterenc...

從mysql資料庫獲取的資料迴圈提交到介面

開發工具 idea 2017.2.5 資料庫 mysql 5.5 1.第一步從mysql裡面獲取資料。如下 public class dbdate catch sqlexception e finally catch sqlexception e return list private string...

HBASE 讀取資料 優化

1 設定scan快取 scan.setcaching 1000 定義一次互動從服務端傳輸到客戶端的行數 2 顯示的指定列 scan.addcolumn cf,column 只獲取需要的列,減少傳輸的資料量,減少io的消耗 3 使用完resultscanner後關閉,否則可能出現一段時間內服務端一致儲...