flume与hdfs


 

 


log4j.rootLogger = info,D

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /rizhi/generateLoggx.log
log4j.appender.D.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =%m%n

1、文件滚动策略
在HDFS Sink的文件滚动就是文件生成,即关闭当前文件,创建新文件。它的滚动策略由以下几个属性控制:

hdfs.rollInterval
单位:秒,基于时间间隔来进行文件滚动,默认是30,即每隔30秒滚动一个文件。0就是不使用这个策略。

hdfs.rollSize
单位:Byte,基于文件大小进行文件滚动,默认是1024,即当文件大于1024个字节时,关闭当前文件,创建新的文件。
0就是不使用这个策略。

hdfs.rollCount
基于event数量进行文件滚动。默认是10,即event个数达到10时进行文件滚动。0就是不使用这个策略。

hdfs.idleTimeout
闲置N秒后,关闭当前文件(去掉.tmp后缀)。

其次其实如果你的副本数如果不为1的话,你会发现roll的配置不生效,是因为flume检测到hdfs文件块的复制,然后强制
终结了这次的tmp临时文件,生成新的,所以就会发现,roll的参数不生效,解决方法:手动将hdfs.minBlockReplicas值设置为1,
让flume感应不到hdfs文件块的复制

create external table hdfsdata(
    riqi string,
    ip string,
    state int,
    type string,
    url string)
    partitioned by(
      dt string,
      hour string)
      ROW FORMAT DELIMITED
      FIELDS TERMINATED BY ' '
     LOCATION 'hdfs://machine01:9000/flume' ;

关联HDFS文件,hive的partitions并不会与hdfs中指定目录自动关联,需要手工操作。 通过给已经创建的表增加分区数据的方式,与HDFS上的文件相互关联起来


 

alter table hdfsdata add partition (dt=20201008 , hour=10) location '/flume/20201008/10';

select * from hdfsdata 

 查询结果:180


接着执行: 

alter table hdfsdata add partition (dt=20201008 , hour=11) location '/flume/20201008/11';

  查询结果:360


 也可以查询带上分区 

select * from hdfsdata where dt=20201008 and hour=10;

 

 

FR:徐海涛(hunk Xu)
QQ技术交流群:386476712

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值