hadoop自动提交脚本
自動提交到hadoop系統,然后調用wordcount的任務,并下載輸出的文件。
#!/bin/sh #從給定的路徑獲取文件列表,提交到hadoop系統,使用wordcount的功能統計單詞數量 #echo "$#" if [ $# -ne 1 ]; thenecho "請輸入文件的路徑"exit 1 fi #echo "$1" filecount=$(ls $1|wc -w) #echo $filecount #if [ $filecount -lt 1 ]; then #fi submitcount=0 wordsubmitlog=wordsubmitlog.log hadoopdellog=hadoopdellog.log for f in $1 ; doif [ -f $wordsubmitlog ]; thenechoelse#不存在文件的時候創建touch $wordsubmitlogfiexistsubmit=$(cat $wordsubmitlog|grep $f|wc -l)if [ $existsubmit -lt 1 ]; thenecho "$f"|cat>>$wordsubmitloghadoop fs -put $f /wz/wordcount/input/#rm -f $flet submitcount=submitcount+1fi done #有提交文件才執行 if [ $submitcount -ge 1 ]; then hadoop jar /usr/hadoop/hadoop-examples-1.2.1.jar wordcount /wz/wordcount/input /wz/wordcount/output rm -f part-r-* hadoop fs -get /wz/wordcount/output/part-r-* . #下載到當前目錄#重命名下載下來的文件,并移動到其他的文件夾
? pcount=0
? newfilename=$(date +'%Y%m%d%H%M%S')
? #echo $newfilename
? for p in part-r-*;
? do
? if [ -f $p ]; then
? let pcount=pcount+1
?#newfilename=$(date +'%Y%m%d%H%M%S')
?newfilename=$(echo part-r-"$newfilename"_"$pcount".dat)
?echo $newfilename
?mv $p $newfilename
?mv $newfilename part/
? ? fi
? done
echo "`date +'%Y-%m-%d %H:%M:%S'`"|cat>>$hadoopdellog
hadoop fs -rmr /wz/wordcount/input/*|cat>>$hadoopdellog
hadoop fs -rmr /wz/wordcount/output|cat>>$hadoopdellog echo "執行完成" else echo "沒有提交的文件"fi -- 插入 -- 30,4-18 95%
?如果用crontab設置自動運行的話,需要將上面的所有路徑設置為絕對路徑,包括hadoop
例如 hadoop的命令需要寫成 /usr/hadoop/bin/hadoop jar ......
文件日志也要寫錯絕對路徑
使用crontab添加任務是也要設置絕對路徑
例如設置每隔5分鐘執行一次:
*/5 * * * * /usr/hadoop/xxx.sh &> /dev/null //表示不用發送郵件告知,否則會收到很多郵件通知
另外,hadoop運行時如果日志不想顯示出來,可以先重定向到0 然后再從2輸出
例如 hadoop jar ......>0 2>>xxx.log
0表示 stderr 1表示stdin 2表示stdout
?
轉載于:https://www.cnblogs.com/ringwang/p/3634269.html
總結
以上是生活随笔為你收集整理的hadoop自动提交脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]Oracle Client 11g
- 下一篇: HTML 5核心内容