我试图根据执行程序和内核的数量来衡量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
这能改善正常吗?我期待着更重要的事情。
答案 0 :(得分:1)
火花性能取决于不同的因素,例如工作负载类型,分区方案,数据偏斜,内存消耗等。您可以查看Spark documentation了解更多信息。
第二,您不能即时更改执行程序数。在Spark documentation中表示为;
火花属性主要可以分为两种:一种是相关的 进行部署,例如“ spark.driver.memory”,“ spark.executor.instances”, 设置时,此类属性可能不会受到影响 在运行时通过SparkConf以编程方式进行操作,否则行为为 取决于您选择的集群管理器和部署模式,因此 建议通过配置文件或spark-submit进行设置 命令行选项;另一个主要与Spark运行时有关 控件,例如“ spark.task.maxFailures”,这种属性可以是 设置任何一种方式。