2016-09-20 86 views
0

首先,我假設我們已經設置了SPARK_HOME,在我的情況下它是~/Desktop/spark-2.0.0。基本上,我想使用Cronjob運行我的PySpark腳本(例如crontab -e)。我的問題是如何添加環境路徑使Spark腳本與Cronjob一起工作。這裏是我的示例腳本,example.py使用Cronjob運行PySpark(crontab)

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 

在這裏,我想用crontab運行run_example.sh每分鐘。但是,當我運行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 

在此先感謝!

回答

2

你可以做的是在home位置的.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 
+0

非常感謝@Sarwesh!基本上,'source〜/ .bashrc'就是我正在尋找的東西。我之前並不知道我們可以在一行中運行多個bash shell! – titipata