2014-10-18 89 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])