运行 PySpark 使用 Cronjob (crontab)
Running PySpark using Cronjob (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
提前致谢!
您可以做的是,在主位置的 .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
首先,我假设我们已经设置了 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
提前致谢!
您可以做的是,在主位置的 .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