Spark 1.5.1 + Java 1.8如何攔截驅動程序上累加器的部分更新?
我們正在使用spark將固體記錄上傳到數據庫。
動作代碼看起來是這樣的:
rdd.foreachPartition(new VoidFunction<Iterator<T>>() {
@Override
public void call(Iterator<T> iter) {
//while there are more records perform the following every 1000 records
//int[] recoords = statement.executeBatch();
//accumulator.add(recoords.length);
}
// ...
}
在驅動器節點有一個監視累加器值的線程。但是,該值不會更新。它只會在應用程序結束時更新一次。即使累加器使用延遲值設置,它應該正確更新,因爲我正在驅動程序節點線程中定期讀取值。
我是否錯誤地使用了累加器?無論如何,我可以更持續地監控我的工人的進展情況嗎?
_「雖然累加器被稱爲共享變量,但並不真正共享。」_ - 它們在工作人員和驅動程序之間共享。 –
@JacekLaskowski我認爲這取決於你如何定義共享。恕我直言,呼籲國家不能被觀察到,並且永遠不會傳播給工人是一種虐待。順便說一句,感謝您的編輯。 – zero323