【发布时间】:2019-01-06 18:11:51
【问题描述】:
在 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 会话的目的是稍后从 DataBase 创建一个 DataFrame。
但是,我找不到将所有这些步骤组合成一种智能且有效的方式的方法。有人建议SparkSession,有人建议在SparkConf 中传递conf,有人建议在shell 命令中传递。
这是我目前尝试过的:
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 notebook 实例化 spark。
我的问题是,如何更改spark-defaults.conf.template 文件以从刚才提到的用于 spark 会话的虚拟计算机中挤出所有汁液,然后在 jupyter notebook 中正确实例化 spark 会话并检查属性是否已通过在笔记本里?
spark-defaults 文件位于。
/opt/apache-spark/spark-2.3.1-bin-hadoop2.7/conf/spark-defaults.conf.template
*高度自以为是的观点。
【问题讨论】:
标签: apache-spark pyspark jupyter-notebook