Shell脚本定时采集日志数据到HDFS
2017-02-25 21:33
531 查看
在一些web站点上,会在页面上用js来监听一些用户操作事件,然后用ajax请求web服务器上的action来记录用户的行为。Web服务器上会有很多日志文件描述了用户的行为。其他的Web服务器也是分别记录自己的日志文件到磁盘。
此时我们需要把这些日志文件汇聚起来,用HDFS进行分析。比如每小时收集一次。
一个解决方案是自己写一个后台程序,然后过滤出合法的日志文件(已经滚动完毕的日志文件),然后用HDFS的Java API上传到HDFS即可。
然后定时执行后台程序即可。
但是Java开发起来比较繁琐。可以使用Shell脚本进行上传。
脚本代码如下:
此时我们需要把这些日志文件汇聚起来,用HDFS进行分析。比如每小时收集一次。
一个解决方案是自己写一个后台程序,然后过滤出合法的日志文件(已经滚动完毕的日志文件),然后用HDFS的Java API上传到HDFS即可。
然后定时执行后台程序即可。
但是Java开发起来比较繁琐。可以使用Shell脚本进行上传。
脚本代码如下:
#!/bin/bash #set java env export JAVA_HOME=/root/apps/jdk1.8.0_111 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=/root/apps/hadoop-2.7.3 export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH # 1、先将需要上传的文件移动到待上传目录 # 2、在讲文件移动到待上传目录时,将文件按照一定的格式重名名 # /export/software/hadoop.log1 /export/data/click_log/xxxxx_click_log_{date} #日志文件存放的目录 log_src_dir=/root/logs/log/ #待上传文件存放的目录 log_toupload_dir=/root/logs/toupload/ #如果文件夹不存在,创建文件夹 if [ ! -d "$log_toupload_dir" ]; then mkdir $log_toupload_dir fi #日志文件上传到hdfs的根路径 hour=`date +%Y_%m_%d_%H` hdfs_root_dir=/data/clickLog/$hour/ echo $hdfs_root_dir #创建HDFS上不存在的目录 create_hdfs_not_exist_directory() { hadoop fs -test -e $hdfs_root_dir if [ $? -eq 0 ] ;then echo 'Directory exist' else hadoop fs -mkdir -p $hdfs_root_dir echo 'Directory '$hdfs_root_dir' created' fi } create_hdfs_not_exist_directory #打印环境变量信息 echo "envs: hadoop_home: $HADOOP_HOME" #读取日志文件的目录,判断是否有需要上传的文件 echo "log_src_dir:"$log_src_dir ls $log_src_dir | while read fileName do if [[ "$fileName" == access.log.* ]]; then # if [ "access.log" = "$fileName" ];then date=`date +%Y_%m_%d_%H_%M_%S` #将文件移动到待上传目录并重命名 #打印信息 echo "moving $log_src_dir$fileName to $log_toupload_dir"xxxxx_click_log_$fileName"$date" mv $log_src_dir$fileName $log_toupload_dir"xxxxx_click_log_$fileName"$date #将待上传的文件path写入一个列表文件willDoing echo $log_toupload_dir"xxxxx_click_log_$fileName"$date >> $log_toupload_dir"willDoing."$date fi done #找到列表文件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
相关文章推荐
- hadoop学习之HDFS(2.7):实例:开发shell脚本定时采集日志数据到hdfs
- shell 定时采集至数据至 HDFS
- shell 定时获取5分钟内的日志数据-------通用脚本(框架)
- 服务自动拉起,定时日志清理,数据统计的shell脚本
- 清理oracle10g日志----shell脚本定时任务执行rman
- 使用shell脚本分析网站日志统计PV、404、500等数据
- 自定义shell脚本采集日志信息
- 使用shell脚本自动检查hdfs集群各数据节点的磁盘空间使用率[附代码]
- 日志定时压缩清理shell脚本(日志文件后缀格式如xxxxx.log.2017-07-10)
- 服务器数据备份(shell 定时脚本备份mysql)
- Linux下添加shell脚本使得nginx日志每天定时切割压缩 推荐
- HDFS定时上传日志的Shell案列
- 使用shell脚本对日志文件进行定时压缩
- 服务器数据备份(shell 定时脚本备份mysql)
- 数据采集之Web端导入日志文件到Hadoop HDFS
- shell脚本定时将批量日志导入到infobright的方法
- shell脚本采用crontab定时备份数据库日志
- 使用Shell编写定时向指定API获取数据的脚本
- Linux下添加shell脚本使得nginx日志每天定时切割压缩