2014-10-18 95 views
0

我有一個程序,我有一臺電腦(在Python)執行,也執行相同的火花。這個程序基本上只讀取.json文件,它從其中取出一個字段並保存。使用Spark我的程序在1個主節點和1個從節點上運行速度大約慢100倍,然後是單節點標準Python程序(當然,我正在從文件讀取並保存到文件中)。所以我想問問哪裏可能是問題?火花速度性能

我的火花程序看起來像:

sc = SparkContext(appName="Json data preprocessor") 
distData = sc.textFile(sys.argv[2]) 
json_extractor = JsonExtractor(sys.argv[1]) 
cleanedData = distData.flatMap(json_extractor.extract_json) 
cleanedData.saveAsTextFile(sys.argv[3]) 

JsonExtractor僅選擇從場由sys.argv中[1]中給出的數據。

我的數據基本上是很多小的一行文件,其中這行總是json。

我已經試過了,在所有機器上讀取和寫入從/到Amazon S3和本地光盤的數據。

我想問一下,如果有什麼我可能會丟失,或者如果Spark與本地非並行單節點程序相比應該如此緩慢。

+0

哪裏是你的星火驅動程序運行:

性能可以通過小文件合併到一個更大的或有太大改善呢?你是否試圖在你的筆記本電腦上運行'spark-submit'來對付在EC2中運行的Spark獨立主/工作器,或者所有運行在同一局域網內的Spark組件? – 2014-10-18 19:36:38

+0

我的火花正在EMR上運行。 EMR是通過https://groups.google.com/forum/#!topic/luigi-user/kO0Yr-VD1Qg提供給我的腳本設置的。我通過EMR的主節點的spark-submit來運行Spark。爲了比較,我還在EMR主節點上運行了Python腳本。 – ziky90 2014-10-18 19:50:54

回答

0

正如我在星火mailing list的建議,問題是在很多非常小的json文件。

sc = SparkContext(appName="Json data preprocessor") 
distData = sc.textFile(sys.argv[2]).coalesce(10)  #10 partition tasks 
json_extractor = JsonExtractor(sys.argv[1]) 
cleanedData = distData.flatMap(json_extractor.extract_json) 
cleanedData.saveAsTextFile(sys.argv[3])