使用Cronjob运行PySpark(crontab)

时间:2016-09-20 22:29:31

标签: python cron pyspark crontab

首先,我假设我们设置了SPARK_HOME,就我而言,它位于~/Desktop/spark-2.0.0。基本上,我想使用Cronjob运行我的PySpark脚本(例如crontab -e)。我的问题是如何添加环境路径以使Spark脚本与Cronjob一起使用。这是我的示例脚本example.py

import os
from pyspark import SparkConf, SparkContext

# Configure the environment
if 'SPARK_HOME' not in os.environ:
    os.environ['SPARK_HOME'] = '~/Desktop/spark-2.0.0'

conf = SparkConf().setAppName('example').setMaster('local[8]')
sc = SparkContext(conf=conf)

if __name__ == '__main__':
    ls = range(100)
    ls_rdd = sc.parallelize(ls, numSlices=10)
    ls_out = ls_rdd.map(lambda x: x+1).collect()

    f = open('test.txt', 'w')
    for item in ls_out:
        f.write("%s\n" % item) # save list to test.txt

run_example.sh中的我的bash脚本如下

rm test.txt

~/Desktop/spark-2.0.0/bin/spark-submit \
  --master local[8] \
  --driver-memory 4g \
  --executor-memory 4g \
  example.py

在这里,我希望每分钟使用run_example.sh运行crontab。但是,当我运行crontab -e时,我不知道如何自定义路径。到目前为止,我只看到这个Gitbook link。我在Cronjob编辑器中有类似的东西,但是还没有运行我的代码。

#!/bin/bash

# add path to cron (this line is the one I don't know)
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/anaconda/bin

# run script every minutes
* * * * * source run_example.sh

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以做的是,在家庭位置的.bashrc文件中添加以下行。

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/anaconda/bin

然后你可以在crontab中输入以下内容

* * * * * source ~/.bashrc;sh run_example.sh

此行将首先执行.bashrc文件,它将设置PATH值,然后执行run_example.sh

或者,您可以仅在run_example.sh中设置PATH,

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/anaconda/bin
rm test.txt

~/Desktop/spark-2.0.0/bin/spark-submit \
  --master local[8] \
  --driver-memory 4g \
  --executor-memory 4g \
  example.py