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