HDFS案例——开发shell采集脚本

需求说明

点击流日志每天都10T,在业务应用服务器上,需要准实时上传至数据仓库(Hadoop HDFS)上

需求分析

一般上传文件都是在凌晨24点操作,由于很多种类的业务数据都要在晚上进行传输,为了减轻服务器的压力,避开高峰期

如果需要伪实时的上传,则采用定时上传的方式

        

技术分析

          HDFS SHELL:  hadoop fs  –put   xxxx.tar  /data    还可以使用 Java Api

                          满足上传一个文件,不能满足定时、周期性传入。

          定时调度器

                   Linux crontab

                   crontab -e

*/5 * * * * $home/bin/command.sh   //五分钟执行一次

系统会自动执行脚本,每5分钟一次,执行时判断文件是否符合上传规则,符合则上传

实现流程

-日志产生程序

日志产生程序将日志生成后,产生一个一个的文件,使用滚动模式创建文件名。

日志生成的逻辑由业务系统决定,比如在log4j配置文件中配置生成规则,如:当xxxx.log 等于10G时,滚动生成新日志

log4j.logger.msg=info,msg

log4j.appender.msg=cn.maoxiangyi.MyRollingFileAppender

log4j.appender.msg.layout=org.apache.log4j.PatternLayout

log4j.appender.msg.layout.ConversionPattern=%m%n

log4j.appender.msg.datePattern='.'yyyy-MM-dd

log4j.appender.msg.Threshold=info

log4j.appender.msg.append=true

log4j.appender.msg.encoding=UTF-8

log4j.appender.msg.MaxBackupIndex=100

log4j.appender.msg.MaxFileSize=10GB

log4j.appender.msg.File=/home/hadoop/logs/log/access.log

 

细节:

  1. 如果日志文件后缀是1\2\3等数字,该文件满足需求可以上传的话。把该文件移动到准备上传的工作区间。
  2. 工作区间有文件之后,可以使用hadoop put命令将文件上传。

阶段问题:

  1. 待上传文件的工作区间的文件,在上传完成之后,是否需要删除掉。

-伪代码

         使用ls命令读取指定路径下的所有文件信息,

         ls  | while read  line

          //判断line这个文件名称是否符合规则

if       line=access.log.* (

            将文件移动到待上传的工作区间

  )

 

//批量上传工作区间的文件

hadoop fs  –put   xxx

 

 

脚本写完之后,配置linux定时任务,每5分钟运行一次。

        

代码实现

代码第一版本,实现基本的上传功能和定时调度功能

 

代码第二版本:增强版V2(基本能用,还是不够健全)

效果展示及操作步骤

1、日志收集文件收集数据,并将数据保存起来,效果如下:

        

2、上传程序通过crontab定时调度

3、程序运行时产生的临时文件

4、Hadoo hdfs上的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值