HBase作為MapReduce作業(yè)數(shù)據(jù)源和數(shù)據(jù)接收器

2018-04-04 11:05 更新

HBase作為MapReduce作業(yè)數(shù)據(jù)源和數(shù)據(jù)接收器

對(duì)于 MapReduce 作業(yè),HBase 可以用作數(shù)據(jù)源、TableInputFormat 和數(shù)據(jù)接收器、TableOutputFormat 或 MultiTableOutputFormat。編寫讀取或?qū)懭際Base 的 MapReduce作業(yè),建議子類化 TableMapper 或 TableReducer。

如果您運(yùn)行使用 HBase 作為源或接收器的 MapReduce 作業(yè),則需要在配置中指定源和接收器表和列名稱。

當(dāng)您從 HBase 讀取時(shí),TableInputFormat 請(qǐng)求 HBase 的區(qū)域列表并制作一張映射,可以是一個(gè) map-per-region 或 mapreduce.job.maps mapreduce.job.maps ,映射到大于區(qū)域數(shù)目的數(shù)字。如果您為每個(gè)節(jié)點(diǎn)運(yùn)行 TaskTracer/NodeManager 和 RegionServer,則映射將在相鄰的 TaskTracker/NodeManager 上運(yùn)行。在寫入 HBase 時(shí),避免使用 Reduce 步驟并從映射中寫回 HBase 是有意義的。當(dāng)您的作業(yè)不需要 MapReduce 對(duì)映射發(fā)出的數(shù)據(jù)進(jìn)行排序和排序時(shí),這種方法就可以工作。在插入時(shí),HBase 'sorts',因此除非需要,否則雙重排序(并在您的 MapReduce 集群周圍混洗數(shù)據(jù))沒有意義。如果您不需要 Reduce,則映射可能會(huì)發(fā)出在作業(yè)結(jié)束時(shí)為報(bào)告處理的記錄計(jì)數(shù),或者將 Reduces 的數(shù)量設(shè)置為零并使用 TableOutputFormat。如果運(yùn)行 Reduce 步驟在你的情況下是有意義的,則通常應(yīng)使用多個(gè)減速器,以便在 HBase 群集上傳播負(fù)載。

一個(gè)新的 HBase 分區(qū)程序 HRegionPartitioner 可以運(yùn)行與現(xiàn)有區(qū)域數(shù)量一樣多的 reducers。當(dāng)您的表格很大時(shí),HRegionPartitioner 是合適的,并且您的上傳不會(huì)在完成時(shí)大大改變現(xiàn)有區(qū)域的數(shù)量。否則使用默認(rèn)分區(qū)程序。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)