2016-09-27 28 views
0

我想知道如何映射密鑰的值。 我知道這可以通過Get和Put操作完成。有沒有其他方法可以有效地做到這一點? 「checkAndPut」不是版本1.00有益 可以在喜歡的東西來完成:HBase聚合,Get和Put操作,批量操作

(key,value) => value+g() 

我已經讀了這本書HBase的權威指南和它看起來像地圖,減少工作解釋爲看跌/之上Get操作HBase的。這是否意味着它不是「批量操作」(因爲它是每個鍵的操作)?

Spark在這裏如何與之相關?

+2

請在HBase表格中添加更多細節以及您想要實現的功能。 – patrungel

+0

我想彙總一些密鑰的數據。 假設關鍵是一個網站的網址,我想統計有多少人進入該網站。這個數據應該每天至少更新5次,微批次,即批量操作(不是流式處理) –

回答

2
  1. HBase掃描(1)檢索多行;而MapReduce作業可以並且確實使用這個命令(2)。
  2. 對於HBase來說,'bulk'大多數是[或單獨]是'bulk load'/'bulk import',其中一個通過構建HFile並將它們「注入」HBase簇(而不是PUT-s)(3) 。
  3. 如果您使用Hive的HBase表(5),您的任務可以作爲MapReduce作業以及Spark應用程序實現(4是示例中的一個,可能不是最好的一個),或Pig腳本或Hive查詢);挑選你的毒藥。
+0

當我使用Spark/MapReduce做Put()時,我必須做的是獲取以增加1,這意味着2 IO操作讀/寫,我說得對嗎? –

+1

對,這個命令有兩個。儘管HBase有所增加。 – patrungel

0

如果您使用計數器設置表,則可以使用Increment在原子操作中向現有值添加一定量。

從MapReduce作業中,您可以以微量(無論您有增量計數的任何位置)彙總您的輸入,按鍵/值對它們進行分組,然後對它們進行分組,然後從作業中發出Put(每鍵1個Put) 。

我上面提到的不是'批量'操作,但如果您在每個批次中修改的行數相對於表中的總數或行數相對較小,那麼它可能會正常工作。

如果您希望在每批次中修改整個表格,那麼您應該看看Bulk Loads。這將要求你編寫一份工作,讀取HBase中的現有值,從增量源中獲取新值,將它們加在一起,並將它們寫回HBase(以「批量加載」方式,而不是直接)

批量加載將HFile直接寫入HDFS而不經過HBase的「寫入管道」(Memstore,次要壓縮,主要壓縮等),然後發出一個命令將現有文件與新文件進行交換。交換是快速的!請注意,您也可以在HBase羣集外部生成新的HFile(不要超載),然後複製它們併發出swap命令。

+0

我的用例不是一個計數器,那些使用增量並不真正幫助 –