增加Spark执行者几乎无法提高绩效

时间:2019-02-07 09:30:11

标签: apache-spark pyspark

我试图根据执行程序和内核的数量来衡量Spark的性能。 这个想法是玩:

   spark.conf.set("spark.executor.instances", "x")
   spark.conf.set('spark.cores.max', 'x')

在更改执行程序和内核的数量时测试Spark性能的提升。 数据为1.66GB Twitter文件.json 我正在使用计算机hp:

Prozessor:Intel(R)Core(TM)i7-8650U CPU @ 1.90Ghz 2.11GHz              // 16 GB RAM

 import time
 st = time.time()
 print("start time: ", st)

 #### Code  ####

elapsed_time = time.time() - st
print("...Elapsed time SPARK: %.2fs" % elapsed_time)

我发现,如果在执行程序1,3,5中使用,性能几乎不会改变

例如

   import time
   st = time.time()
   print("start time: ", st)
   spark = SparkSession.builder.appName('Basics').getOrCreate()
   spark.conf.set("spark.executor.instances", "1")
   spark.conf.set('spark.cores.max', '1')
   df = spark.read.json(mount + '/*/*.json.bz2' )
   elapsed_time = time.time() - st
   print("...Elapsed time SPARK: %.2fs" % elapsed_time)

1:1个执行程序,1个核心启动时间:1549530285.584573 ...经过的时间:SPARK:315.52秒

2:3个执行程序,3个核心启动时间:1549528358.4399529 ...耗时SPARK:308.30s

3:5个执行程序,5个核心启动时间:1549528690.1516254 ...耗时SPARK:289.28s

这能改善正常吗?我期待着更重要的事情。

1 个答案:

答案 0 :(得分:1)

火花性能取决于不同的因素,例如工作负载类型,分区方案,数据偏斜,内存消耗等。您可以查看Spark documentation了解更多信息。

第二,您不能即时更改执行程序数。在Spark documentation中表示为;

  

火花属性主要可以分为两种:一种是相关的   进行部署,例如“ spark.driver.memory”,“ spark.executor.instances”,   设置时,此类属性可能不会受到影响   在运行时通过SparkConf以编程方式进行操作,否则行为为   取决于您选择的集群管理器和部署模式,因此   建议通过配置文件或spark-submit进行设置   命令行选项;另一个主要与Spark运行时有关   控件,例如“ spark.task.maxFailures”,这种属性可以是   设置任何一种方式。