我正在Jupiter笔记本上构建一个spark(运行在Apache spark 2.4.3版本上(会话,如下所示
spark_session = SparkSession.builder
.master("yarn-client")
.enableHiveSupport()
.getOrCreate()
spark_session.conf.set("spark.executor.memory", '8g')
spark_session.conf.set('spark.executor.cores', '3')
spark_session.conf.set('spark.cores.max', '3')
spark_session.conf.set("spark.driver.memory",'8g')
sc = spark_session.sparkContext
我可以从应用程序主机上看到,所有参数都设置正确,除了spark.driver.memory.spark.driver.memory,无论我设置什么,它都只使用1GB。
我已经检查了spark-default.conf,但没有诸如spark.driver.memory之类的参数。为了检查它是否与会话生成器/Jupiter一起使用,我从命令行使用spark-submit运行了一个应用程序,令我惊讶的是,它选择了我传递的驱动程序内存。
有人能解释一下吗?为什么它没有从jupyter 中选择spark.driver.memory
Jupyter笔记本电脑将以yarn客户端模式启动pyspark,由于JVM驱动程序已经启动,因此无法使用属性"conf"设置驱动程序内存和某些配置。必须在命令行中进行设置。
因此,对于您的问题——当您在客户端模式下运行spark时,通过"conf.set"设置属性将不起作用,因为JVM驱动程序已经使用默认配置启动了。这就是为什么当您从命令行传递属性时,它会拾取它们。
启动pyspark的一个简单方法是
pyspark --driver-memory 2g --executor-memory 2g
更新:
要使用自定义pyspark参数启动jupyter,请创建一个自定义内核,更多关于开始使用jupyter内核的信息:http://cleverowl.uk/2016/10/15/installing-jupyter-with-the-pyspark-and-r-kernels-for-spark-development/
定义"kernel.json"时,将--driver-memory 2g --executor-memory 2g
添加到PYSPARK_SUBMIT_ARGS选项中。