flume和hdfs:为每个主机和应用程序创建一个文件

qni6mghb  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(139)

我有几个使用log4j的java应用程序,它们可能在同一台主机上,也可能不在同一台主机上。
我已经成功地将flume和log4j配置为每天保存一个文件,但是如何让flume根据主机名和应用程序名创建单独的目录呢?
这是我的Flumelog4j附录:

<Flume name="flumeLogger" compress="false" batchSize="1" type="persistent" dataDir="logs/flume">
    <Agent host="myhost" port="41414"/>
    <PatternLayout pattern="@@@@ %d{ISO8601} %p ${env:COMPUTERNAME} my-app %c %m @@@@"/>
</Flume>

这是我的Flume配置:

agent1.sinks.hdfs-sink1.type = hdfs
agent1.sinks.hdfs-sink1.hdfs.path = hdfs://localhost:9000/logs/%{host}
agent1.sinks.hdfs-sink1.hdfs.filePrefix = %y-%m-%d
agent1.sinks.hdfs-sink1.hdfs.round = true
agent1.sinks.hdfs-sink1.hdfs.roundValue = 1
rgent1.sinks.hdfs-sink1.hdfs.roundUnit = day
agent1.sinks.hdfs-sink1.hdfs.rollInterval = 0
agent1.sinks.hdfs-sink1.hdfs.rollFile = 0
agent1.sinks.hdfs-sink1.hdfs.rollSize = 0
agent1.sinks.hdfs-sink1.hdfs.rollCount = 0
agent1.sinks.hdfs-sink1.hdfs.writeFormat = Text
agent1.sinks.hdfs-sink1.hdfs.fileType = DataStream
agent1.sinks.hdfs-sink1.hdfs.batchSize = 1
agent1.sinks.hdfs-sink1.hdfs.useLocalTimeStamp = true

agent1.channels = ch1
agent1.sources = avro-source1
agent1.sinks = hdfs-sink1

agent1.sinks.hdfs-sink1.channel = ch1
agent1.sources.avro-source1.channels = ch1

根据文件:
%{host}:替换名为“host”的事件头的值。支持任意标头名称。
但是我所有的日志都是用 /logs 而不是 /logs/myhost 如图纸所示 hdfs.path 财产。
另外,我如何定义 arbitrary header names 在log4j appender里?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题