我正在計算在Spark上完成特定作業需要多長時間,在這種情況下,需要多長時間來保存輸出RDD。 RDD的保存包括壓縮它。基準測試中令人感興趣的性能變化Spark代碼
奇怪的是,與第二次執行完全相同的代碼相比,代碼的第一次執行總是比較慢。怎麼會這樣?
的Spark程序如下所示:
JavaPairRDD<String, String> semisorted = wordsAndChar.sortByKey();
//First run
long startTime1 = System.currentTimeMillis();
semisorted.saveAsTextFile("testData.txt" + "_output1", org.apache.hadoop.io.compress.DefaultCodec.class);
long runTime1 = System.currentTimeMillis() - startTime1;
//Second run
long startTime2 = System.currentTimeMillis();
semisorted.saveAsTextFile("testData.txt" + "_output2", org.apache.hadoop.io.compress.DefaultCodec.class);
long runTime2 = System.currentTimeMillis() - startTime2;
sc.stop();
火花提交--master本地[1] --class com.john.Test my.jar /用戶/約翰/ TESTDATA。 TXT /用戶/約翰/ testData_output
的輸出是:
runTime1 = 126秒
runTime2 = 82秒
如此大的變化怎麼能有兩個(完全相同)的工作?
RDDs是懶惰的。第一次運行可能被緩存在內存中用於第二次和隨後的運行 –
另外,在單臺機器上運行的兩次運行沒有太多基準 –
@ cricket_007,「兩次運行」,因爲第一次運行時間過長。我甚至有3次以上的跑步。在每種情況下,首次運行速度最慢。這只是「測試」 - 在與某人的機器進行比較之前,需要從一臺機器獲得一個可靠的數字。 – nikk