修改 spark-default.conf 指定在 cluster 模式下使用的 python
spark.yarn.appMasterEnv.PYSPARK_PYTHON=py/anaconda3/bin/python3
spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=py/anaconda3/bin/python3
然后在提交任务的时候,指定压缩环境. --archives "hdfs://HACluster/env/anaconda3.tar.gz#py"
如果是提交到yarn 环境的,仍需手动添加参数 --conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=py/py3/bin/python3
添加环境变量 PYSPARK_DRIVER_PYTHON=/opt/anaconda3/bin/ipython
可以在本地pyspark 使用 ipython 环境
添加环境变量 PYSPARK_PYTHON
可以指定本地使用的 python 环境
docker pull mesosphere/spark
docker run -it --name spark -p 4040:4040 mesosphere/spark /bin/bash
通过修改 $SPARK_HOME/conf/log4j.properties
中添加如下内容, 打开 native load 的日志
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG
spark 在本地启动的时候会默认加载所有的环境变量 (包括 spark-env.sh
)
但是在通过程序提交任务(例如yarn)的时候, spark 加载的是 spark-default.conf
. 此时 ApplicationMaster 不会加载 spark-env.sh
. 只有 executor 在创建的时候才去各节点加载 spark-env.sh
spark 使用 LD_LIBRARY_PATH
加载 hadoop-native 库, 而非 java.library.path
.这是因为一旦启用了后者就不会再去 LD_LIBRARY_PATH
中找了.
让 AM 正确加载 native, 需要在 spark-default.conf
中指定如下内容
spark.yarn.appMasterEnv.LD_LIBRARY_PATH=/opt/hadoop/lib/native
# spark.executorEnv.LD_LIBRARY_PATH=xxx