Spark 提交任务的方式可以通过 Python 代码提交,也可以通过 shell 脚本提交,通过 Python 提交的方式在前面也已经使用过,这些就单独讲一下 shell 提交的方式
zip dependency.zip -r src/
if [[ $@ == *'yarn'* ]]
then
mode=yarn
else
mode=local
fi
echo $mode
if [[ $mode == 'yarn' ]]
then
spark-submit \
--name hive_field_check@huzhuo \
--master yarn \
--py-files dependency.zip \
--queue aisearchOffline \
--executor-cores 4 \
--num-executors 100 \
--executor-memory 4G \
--conf spark.default.parallelism=1200 \
--conf spark.storage.memoryFraction=0.6 \
--conf spark.sql.shuffle.partitions=400 \
--conf spark.shuffle.memoryFraction=0.3 \
--conf spark.network.timeout=800 \
--conf spark.yarn.executor.memoryOverhead=2048 \
--conf spark.storage.blockManagerTimeoutIntervalMs=100000 \
--conf spark.speculation=true \
--conf spark.driver.maxResultSize=0 \
--conf spark.yarn.dist.archives=hdfs目录/python.zip#python \
--conf spark.executorEnv.PYSPARK_DRIVER_PYTHON=python/bin/python2.7 \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=python/bin/python2.7 \
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=python/bin/python2.7 \
src/empty_field_stat.py $@
elif [[ $mode == 'local' ]]
then
spark-submit \
--master local[8] \
--py-files dependency.zip \
--conf spark.pyspark.python=/home/work/software/python \
src/empty_field_stat.py
fi
这里注意的几个点:需要将程序中所有依赖的自定义 Python 文件一同打包上传到 HDFS 上,否则运行的时候回提示缺少依赖
本地化和集群运行最好都指定 Python 的解释器目录,以免运行的时候出现依赖问题