有時候想了想Flume架構的原理,其實也是對檔案或者檔案夾進行監控,那我自己也可以寫一個腳本來簡單的實作監控我們想監控的檔案,然後對其進行上傳。
1. 引入環境變量
#!/bin/bash
#set java env
export JAVA_HOME=/home/fantj/jdk/
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#set hadoop env
export HADOOP_HOME=/home/fantj/hadoop/
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
2. 聲明路徑變量
#日志檔案存放的目錄
log_src_dir=/home/fantj/log/
#待上傳檔案存放的目錄
log_toupload_dir=/home/fantj/toupload/
#日志檔案上傳到hdfs的根路徑
hdfs_root_dir=/data/log/
3. 掃描檔案
ls $log_src_dir | while read fileName
do
if [[ "$fileName" == access.log ]]; then
date=`date +%Y_%m_%d_%H_%M_%S`
#将檔案移動到待上傳目錄并重命名
#列印資訊
echo "moving $log_src_dir$fileName to $log_toupload_dir"fantj_log_$fileName"$date"
mv $log_src_dir$fileName $log_toupload_dir"fantj_log_$fileName"$date
#将待上傳的檔案path寫入一個清單檔案willDoing
echo $log_toupload_dir"fantj_log_$fileName"$date >> $log_toupload_dir"willDoing."$date
fi
done
把已經掃描到的日志檔案重命名,然後mv到待上傳目錄,然後列印日志,并對mv成功的日志檔案加上willDoing做未完成上傳标記。
4. 開始上傳
#找到清單檔案willDoing
ls $log_toupload_dir | grep will |grep -v "_COPY_" | grep -v "_DONE_" | while read line
do
#列印資訊
echo "toupload is in file:"$line
#将待上傳檔案清單willDoing改名為willDoing_COPY_
mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
#讀清單檔案willDoing_COPY_的内容(一個一個的待上傳檔案名) ,此處的line 就是清單中的一個待上傳檔案的path
cat $log_toupload_dir$line"_COPY_" |while read line
do
#列印資訊
echo "puting...$line to hdfs path.....$hdfs_root_dir"
hadoop fs -put $line $hdfs_root_dir
done
mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done
5. 測試
我在
/home/fantj/log
目錄下放一個
access.log
檔案,然後執行腳本。
[root@s166 fantj]# ./upload2hdfs.sh
envs: hadoop_home: /home/fantj/hadoop/
log_src_dir:/home/fantj/log/
moving /home/fantj/log/access.log to /home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03
toupload is in file:willDoing.2018_07_29_12_49_03
puting.../home/fantj/toupload/fantj_log_access.log2018_07_29_12_49_03 to hdfs path...../data/log/
[root@s166 fantj]# hadoop fs -ls -R /data/
drwxr-xr-x - root supergroup 0 2018-07-29 00:49 /data/log
-rw-r--r-- 3 root supergroup 14340 2018-07-29 00:49 /data/log/fantj_log_access.log2018_07_29_12_49_03
-rw-r--r-- 3 root supergroup 14340 2018-07-28 13:53