【问题标题】:How to configure Spark spark_worker_opts for Jupyter notebooks如何为 Jupyter 笔记本配置 Spark spark_worker_opts
【发布时间】:2021-06-26 06:45:12
【问题描述】:
我在 Linux 上以独立模式使用 Pyspark 和 Spark 2.4,使用 Jupyter 笔记本(目前用于测试)通过 Kafka 处理大量传入数据。我想将这些选项添加到此笔记本中,以防止 /tmp/ 目录在几个小时后被数十 GB 填充:
spark.worker.cleanup.enabled=true
spark.worker.cleanup.appDataTtl=120
但是这些 conf 位置不起作用:
- Juypter 笔记本似乎根本不使用 Spark 的默认配置 (spark/conf/spark-env.sh):
SPARK_WORKER_OPTS="spark.worker.cleanup.enabled=true
spark.worker.cleanup.appDataTtl=120"
- 所以,我在 ~/.local/share/jupyter/kernels/python3-spark1/kernel.json 中创建了一个单独的内核配置,我可以在 Jupyterhub 中选择它,它真正用于我可以看到的 RAM 调整htop:
“环境”:{
“PYSPARK_SUBMIT_ARGS”:“--主本地[*]
--conf spark.worker.cleanup.enabled=true --conf=spark.worker.cleanup.appDataTtl=120 driver-memory 145g --executor-memory 50g pyspark-shell"
但 /tmp 仍然充满了几十个演出。
- 我还在 jupyter 单元中尝试了“魔法”,但也没奏效。
您知道如何正确配置 Jupyter 笔记本以进行此 Spark 调整吗?
【问题讨论】:
标签:
apache-spark
pyspark
jupyter-notebook
jupyter
jupyterhub
【解决方案1】:
仅适用于 "-Dx=y" 形式的工作人员的配置属性
export SPARK_WORKER_OPTS="$SPARK_WORKER_OPTS -Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=60 -Dspark.worker.cleanup.appDataTtl=120"
如果这不起作用,您可以尝试以下任何选项。
选项 1: 更新 default.conf
在 Worker 节点的 /spark/conf/spark-defaults.conf 文件中设置以下配置选项:
-
spark.worker.cleanup.enabled:启用定期清理工作程序和应用程序目录。默认禁用。设置为 true 以启用它。 注意:这只会影响独立模式,因为 YARN 的工作方式不同。
-
spark.worker.cleanup.interval:工作人员清理旧应用程序工作目录的频率,以秒为单位。默认值为 30 分钟。
-
spark.worker.cleanup.appDataTtl: 在每个工作人员上保留应用程序工作目录的秒数。默认值为 7 天。
然后停止并启动工人。
-
sbin/stop-worker.sh - 停止执行脚本的机器上的所有工作实例。
-
sbin/start-worker.sh - 在执行脚本的机器上启动一个工作实例。
选项 2:如果您使用 docker-compose 设置 spark 集群,则在 Docker compose 文件中设置环境
spark-worker-x:
image: spark-worker
container_name: spark-worker-x
environment:
- SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.interval=60 -Dspark.worker.cleanup.appDataTtl=120"