如何使用许多工人而不是仅在本地模式下发送粗鲁的工作?

时间:2019-04-06 23:42:45

标签: python apache-spark pyspark cluster-computing slurm

我想使用命令srun和sbatch在slurm集群上使用命令spark-submit运行python脚本。当我运行当前脚本时,它将一直运行到结束,并且结束状态为COMPLETED。但是,查看一下spark的历史服务器,我可以看到所有作业ID都被命名为“ local ...”。当我检查环境变量时,“ spark.master”始终设置为local [*]。我尝试了很多事情并阅读了许多文档,但找不到如何使用多个工作程序。

这是我的配置:

#SBATCH --time=00:05:00
#SBATCH --nodes=4
#SBATCH --ntasks=4
#SBATCH --mem=4G
#SBATCH --cpus-per-task=8
#SBATCH --ntasks-per-node=1

module load spark/2.3.0
module load python/3.7

source ~/acc_env/bin/activate

export MKL_NUM_THREADS=1
export SPARK_IDENT_STRING=$SLURM_JOBID
export SPARK_WORKER_DIR=$SLURM_TMPDIR
export SLURM_SPARK_MEM=$(printf "%.0f" $((${SLURM_MEM_PER_NODE} *95/100)))

#start master
start-master.sh
sleep 20


MASTER_URL_STRING=$(grep -Po '(?=spark://).*' $SPARK_LOG_DIR/spark-${SPARK_IDENT_STRING}-org.apache.spark.deploy.master*.out)

IFS=' '
read -ra MASTER_URL <<< "$MASTER_URL_STRING"

echo "master url :" ${MASTER_URL}

NWORKERS=$((SLURM_NTASKS - 1))

这是我用来启动工作程序和脚本的命令:

SPARK_NO_DAEMONIZE=1 srun -n ${NWORKERS} -N ${NWORKERS} --label --output=$SPARK_LOG_DIR/spark-%j-workers.out start-slave.sh -m 4g -c ${SLURM_CPUS_PER_TASK} ${MASTER_URL} &
slaves_pid=$!
srun -n 1 -N 1 spark-submit main.py --master ${MASTER_URL} --executor-memory 4g

1 个答案:

答案 0 :(得分:0)

我找到了答案。如果将来有人遇到相同的问题,我会在此发布。问题是我将参数放入srun spark-submit命令的顺序。您必须将入口点程序(此处为main.py)放在选项之后,因为我不知道为什么,但似乎参数在入口点参数之后被丢弃了。