從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後關閉,否則可能出現一段時間內服務端一致儲...