在Web和SO上实例化pyspark几乎没有不同的答案。但是,有些过时了,有些没有涵盖启动火花的所有“理想和最佳” *特征。这就压缩了Spark会话所需的RAM和CPU的每一位。因此,我正在尝试找出一种方法来进行以下操作。
1)利用最大内核数
2)利用最大的驱动程序内存
3)利用执行程序内存的最大数量
4)利用最大堆栈大小和堆大小。
5)将最大大小传递给spark.driver.extraJavaOptions和spark.executor.extraJavaOption
6)使用2017-2018年关于Spark的备受好评的书籍中推荐的Kryo.serializer。
以及其他合适的属性。
通用方法将实例化spark会话。此Spark会话的目的是稍后从数据库中创建一个DataFrame。
但是,我找不到一种将所有这些步骤组合成一种智能且可行的方式的方法。有人建议使用SparkSession
,有人建议在SparkConf
中传递conf,有人建议在shell命令中传递conf。
这是我到目前为止尝试过的:
spark = SparkSession.builder.appName('ose')\
.master('local[*]')\
.config('spark.driver.memory', '32g')\
.config('spark.executor.memory', '32g')\
.config('spark.serializer', 'org.apache.spark.serializer.KryoSerializer')\
.getOrCreate()
df = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("uri",
"mongodb://localhost/demo.demo_lab").load()
虚拟系统属性是
Spark Version: '2.3.1'
Scala Version: version 2.11.8
Python Version: 3.6.6 | Anaconda custom (64-bit)
Java Version: 1.8.0_181 (Oracle Corporation)
Linux: Ubuntu 16.04.5 LTS
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 1
NUMA node(s): 1
Model name: Intel(R) Core(TM) i5-6700 CPU @ 2.00GHz
此外,我正在本地计算机上使用Jupyter笔记本工作。 documentation提到了
的某些属性注意:在客户端模式下,不得通过 SparkConf直接在您的应用程序中,因为驱动程序JVM具有 在这一点上已经开始。相反,请通过 --driver-memory命令行选项或默认属性文件中。
由于我要通过笔记本提交作业,因此无法使用命令行。因此,我将坚持为所有属性配置默认属性文件,只是为了创建一个入口点以最大化Spark的属性。然后从Jupiter笔记本实例化火花。
我的问题是,如何更改spark-defaults.conf.template
文件以将所有汁从上述刚才提到的虚拟计算机中挤出来进行spark会话,然后在jupyter笔记本中正确实例化spark会话并检查属性是否具有已通过笔记本?
spark-defaults文件位于其中。
/opt/apache-spark/spark-2.3.1-bin-hadoop2.7/conf/spark-defaults.conf.template
*非常有见地的观点。
答案 0 :(得分:2)
这里有很多误解,大多数与这个简单的事实有关:
此外,我正在本地计算机上使用Jupyter笔记本工作。
local
模式是一种开发和测试工具-并非针对性能进行设计或优化。spark.exectuor
属性在local
模式下没有意义,因为只有一个JVM在运行-Spark驱动程序,并且仅使用其配置。另外:
PYSPARK_SUBMIT_ARGS
。最后,没有适合所有情况的最佳配置。例如,如果您使用任何Python代码“最大化JVM内存分配”,将使Python代码没有所需的资源。同时,“核心”和内存只是您必须调整的资源的子集-对于许多作业,更重要的是IO(本地磁盘IO,存储IO)。