
與 MapReduce 整合
|
317
在相同類別中的
map()
會執行實際的工作。就像所說的一樣,它會在讀取輸入文字檔的
每一列資料時被呼叫,而每列包含了一個 JSON 記錄。程式會對列的資料內容利用 MD5
雜湊建立一個 HBase 的 rowkey,然後將資料儲存到名稱為
data:json
的欄位中。
在範例中,由
TableOutputFormat
類別做設定,使用一個明確的寫入緩衝區(write
buffer)。呼叫
context.write()
,由指定的
Put
實例物件,發送一個內部的
table.put()
命令。當作業完成時,
TableOutputFormat
會小心的呼叫
flushCommits()
-將保留在寫入
緩衝區的資料進行儲存。
map()
方法利用
Put
實例物件來儲存輸入資料,你也可以利用
Delete
實例
物件來從目標資料表中刪除資料。這也許是為什麼作業中的輸出 key 格式
會設定成
Writable
型別,取代明確的
Put
類別。
TableOutputFormat
可以(目前)只處理
Put
和
Delete
實例物件。忽略任
何的訊息或者丟出一個
IOException
,在訊息中設定
Pass
、一個
Delete
或
Put
。
最後,要注意作業只有使用 map 階段,而且並不需要 reduce。這是結合 HBase 相當典
型的 MapReduce 作業:因為資料已經被儲存在排序資料表,或者原始資料已經有了唯
一的鍵值,你可以避免那些需要額外成本的
排序
、
洗牌
和處理程序中的
reduce
階段。
資料來源
在原始資料匯入到資料表後 ...