SparkSession 应用程序源代码配置属性未覆盖 AWS EMR 默认值上的 JupyterHub 和 Zeppelin

Posted

技术标签:

【中文标题】SparkSession 应用程序源代码配置属性未覆盖 AWS EMR 默认值上的 JupyterHub 和 Zeppelin【英文标题】:SparkSession Application Source Code Config Properties not Overriding JupyterHub & Zeppelin on AWS EMR defaults 【发布时间】:2019-12-21 14:03:26 【问题描述】:

我已将 Spark 驱动程序设置为使用 Zeppelin 和或 JupyterHub 作为客户端在 AWS EMR 上进行交互式 Spark 编程。但是,当我使用自定义配置属性创建SparkSession(应用程序名称、核心数、执行程序内存、执行程序数、序列化程序等)它不会覆盖这些配置的默认值(在Spark UIspark.conf.get(...) 的环境选项卡下确认)。

像任何 Spark 应用程序一样,EMR 上的这些客户端应该使用我的自定义配置属性,因为 SparkSession 代码是 spark-submit、spark 配置文件和 spark-defaults 之前的第一个最高覆盖。 JupyterHub 也会立即启动一个 Spark 应用程序,无需编码或仅在运行一个空单元格时。

是否有特定于 ZeppelinJupyterHub 的设置或需要调整以使自定义配置识别和工作的单独 xml 配置?非常感谢任何帮助。

创建一个基本应用程序的示例,其中应实施这些集群资源配置,而不是标准默认配置,这与 Zeppelin/JupyterHub 上的 EMR 发生的情况相同。


# via zep or jup [configs NOT being recognized]
from pyspark.sql import SparkSession

spark = SparkSession\
.builder\
.appName("app_name")\
.master("yarn")\
.config("spark.submit.deployMode","client")\
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")\
.config("spark.executor.instances", 11)\
.config("spark.executor.cores", 5)\
.config("spark.executor.memory", "19g")\
.getOrCreate()

# via ssh terminal [configs ARE recognized at run-time]
pyspark \
--name "app_name" \
--master yarn \
--deploy-mode client \
--num-executors 11 \
--executor-cores 5 \
--executor-memory 19 \
--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer"

【问题讨论】:

是忽略所有设置配置还是仅忽略其中一部分?调用“spark-submit”命令时必须设置一些属性,一旦资源分配,YARN 将忽略它们。 他们都被忽略了......从来没有通过他们的笔记本客户端在 cloudera 或 databricks 上经历过这种奇怪的行为 【参考方案1】:

找到了解决办法。 /etc/jupyter/conf 下的 config.json 文件有一些默认的 spark 配置值,因此我删除了它们以显示一个空的 json 键/值,例如 => _configs":。通过JupyterHub 创建自定义SparkSession 现在可以理解指定的集群配置。

这些神奇的命令总是有效%%configure

https://github.com/jupyter-incubator/sparkmagic

【讨论】:

以上是关于SparkSession 应用程序源代码配置属性未覆盖 AWS EMR 默认值上的 JupyterHub 和 Zeppelin的主要内容,如果未能解决你的问题,请参考以下文章

SparkContextSparkConf和SparkSession的初始化

SparkContextSparkConf以及进化版的SparkSession

数据源:未指定“url”属性,无法配置嵌入式数据源

为 Spring Boot 应用程序使用多个数据源配置时,未从属性转换器内的属性获取值

Spring Boot 配置属性的未解决占位符验证

Spring Cloud 配置服务器未加载属性文件