【場景】:
需要定期運行Hadoop的MapReduce
【解決辦法】:
編寫一個運行MapReduce的Shell腳本。然后使用crontab配置定時任務。
【Shell腳本】
#!/usr/bin/env bash
source /etc/profile
echo "TimeLimitDrawn Start"
hadoop jar $HADOOP_HOME/package/mr_post-1.0-SNAPSHOT-jar-with-dependencies.jar com.hdyh.mapreduce.TimeLimitDrawn >> /home/hadmin/hadoop/shell/mr.log
echo "TimeLimitDrawn End"
【定時任務】
* * */1 * * sh /home/hadmin/hadoop/package/TimeLimitDraw.sh
【crontab使用說明】
crontab –u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab –l //列出某個用戶cron服務的詳細內容
crontab –r //刪除某個用戶的cron服務
crontab –e //編輯某個用戶的cron服務
crontab 文件中的行由6個字段組成,不同字段間用空格或tab鍵分隔。前5個字段指定命令要運行的時間
①分鍾(0-59)
②小時(0-23)
③日期(1-31)
④月份(1-12)
⑤星期幾(0-6,其中0代表星期日,好像7也代表星期日)
⑥一個要在適當時間執行的字符串。
例子:
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND
#每天早上6點10分
10 6 * * * date
#每兩個小時
0 */2 * * * date
#晚上11點到早上8點之間每兩個小時,早上8點
0 23-7/2,8 * * * date
#每個月的4號和每個禮拜一到禮拜三的早上11點
0 11 4 * 1-3 date
#1月1日早上4點
0 4 1 1 * date
讓配置文件生效:如果讓配置文件生效,還得重新啟動cron,切記,既然每個用戶下的cron配置文件修改后,也要重新啟動cron服務器。
注意:如果要定期執行某個Shell命令的時候,一定要注意以下兩點:
①、shell腳本要有-x(可執行)的權限
②、shell腳本可以被正確執行,但是hadoop命令無法運行時,多數情況都是因為環境變量的原因,可以在Shell腳本中使用source /etc/profile來使環境變量生效。
③、如果設置的是整點運行,按照下面錯誤的寫法,會在7點開始執行很多次命令。
錯誤的寫法:* 7 * * * sh /home/hadmin/hadoop/package/TimeLimitDraw.sh
正確的寫法:0 7 * * * sh /home/hadmin/hadoop/package/TimeLimitDraw.sh
④、有時因為找不到文件或者權限問題無法正確執行時,系統會生成一個文件【/var/spool/mail/[用戶名]】、 如:/var/spool/mail/root
在這個文件中有時可以找到一些有用的線索。
--end--
