flume与hdfs

    科技2025-01-10  8


     

     


    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

    Processed: 0.014, SQL: 8