用Shell写一个日志收集脚本
有时候想了想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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用Elasticsearch构建电商搜索平台
电商数据系统主要类型 一个中等的电商平台,每天都要产生百万条原始数据,上亿条用户行为数据。一般来说,电商数据一般有3种主要类型的数据系统: 关系型数据库 ,大多数互联网公司会选用mysql作为关数据库的主选,用于存储商品,用户信息等数据。 关系型数据库对于事务性非常高的OLTP操作(比如订单,结算等)支持良好。 hadoop生态 ,hadoop是数据仓库主要的载体,除了备份关系型数据库的所有版本,还存储用户行为,点击,曝光,互动等海量日志数据,hadoop对于数据分析,数据挖掘等OLAP支持比关系型数据库更加具有扩展性和稳定性。 搜索引擎 ,以elasticsearch和solr为代表。搜索引擎是获取信息最高效的途径,几乎成为各类网站,应用的基础标配设施(地位仅次于数据库)。 目前搜索引擎技术已经有非常成熟的开源解决方案,最出名的ElasticSearch和Solr都是基于lucence的。很多中小型互联网公司搜索引擎都是基于这两个开源系统搭建的,但是即便如此,一个搜索引擎团队想把搜索引擎质量做到商用标准,从系统熟悉,服务搭建,功能定制,通常需要花费较长时间。 通用搜索引擎应用在互联网...
- 下一篇
虚拟机中Linux(Ubuntu16.04)与本地Win7共享文件夹
虚拟机中Linux(Ubuntu16.04)与本地Win7共享文件夹 一、前面的废话 在虚拟机里装了系统之后想要在系统里安装软件真的是很头疼的事,因为在虚拟机里面下载东西比较慢,来回折腾U盘也很麻烦,尤其是如果你需要在虚拟机里的好几个系统里装相同的软件,那更是能急死人,但如果虚拟机里的系统能访问本地系统的话就太棒了,在本地系统下下载一份需要的文件,在所有虚拟机里都能用,真的省去了很多麻烦。 二、文件共享设置 1、虚拟机设置 虚拟机菜单栏 -> 虚拟机 -> 设置 -> 选项 -> 共享文件夹 -> 总是启用 -> 添加(我将添加的共享目录命名为Shared) ->确定 2、VMware Tools安装 (1)虚拟机菜单栏 -> 虚拟机 -> 安装VMware Tools (2)等一会虚拟机会自己打开VMware Tools文件夹 (3)在该目录下,右键打开命令行,将压缩文件拷贝到桌面上,再到桌面上将其解压缩 cp VMwareTools-10.1.6-5214329.tar.gz /home/hadoop/Desktop/ cd /...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库