2017-09-28 53 views
0

我在S3上有大量的日誌文件需要並行處理。我可能會丟棄我不需要的記錄,但除此之外,我只是將批次中的記錄插入到數據庫中。我不一定需要多個鍵/值對,所以我將單個鍵映射到所有記錄並將其傳遞給reducer。減速器只會對記錄進行批處理並進行數據庫調用。而不是在mapper中完成這一切是可行的?如果我只是需要將記錄插入到數據庫中,我需要還原器嗎?

回答

0

從你所描述的,是的,你可以在mapper中做到這一點。您可以收集一批記錄並確定何時有足夠的時間進行批量插入。方法cleanup()可用於最終批次,您可能尚未收集完整批次並需要確保插入其餘記錄。

從映射程序執行此操作的一個問題是,您對同時運行的數量的控制較少,如果輸入拆分,它將基於數字。所以你們有很多人都試圖插入到數據庫中,但這可能是一個問題。使用減速器可以更好地控制運行的數量。

你不說你正在使用什麼數據庫。過去使用reducer的一個案例是使用分佈式數據庫(在這種情況下爲Accumulo),但這可能適用於HBase和Cassandra。

Accumulo平板電腦服務器分佈在hadoop羣集周圍。因此,一張桌子將被分成多個平板電腦。使用BatchWriter,您可以從映射器或縮減器中插入表格。但是,如果從映射程序執行此操作,插入本質上會隨機在羣集中寫入,這會導致更多的網絡流量和更多的壓縮。使用reducer,您可以獲取目標表的分割點並使用它們對數據進行分區。這會導致平板電腦的所有數據都以相同的縮減器結束。當您以這種方式分組數據時,從縮減器批量寫入會導致更快的插入。

相關問題