Fluentd 写日志到 HDFS

当前已经实现LogServer收集日志信息并调用Fluentd写入HDFS
由于使用Presto对HDFS中的数据进行分析, 因此使用Hive创建元数据库对HDFS中的数据进行管理
因此写入的数据要符合Hive创建的表结构
LogServer收集的日志信息为:

{
  "user":"tom",
  "event":"open.app"
}

对数据进行处理后:

// line
tom^Aopen.app^A

写入HDFS可以使用Presto查询到数据.

当前Fluentd配置:

<source>
  @type forward
  port 24224
  format hash
</source>

<match log.user>
  @type file
  format hash
  path /var/log/user.log
</match>

写入到文件中的日志是正确的, 符合tom^Aopen.app^A的格式

重新配置match:

<match log.user>
  @type webhdfs
  host master
  port 50070
  username root
  path "/user/hive/warehouse/data_user/user.%Y%m%d_%H%M.log"
  flush_interval 5s
  time_slice_format '%Y%m%d_%H%M%S'
  output_include_time false
  output_include_tag  false
</match>

此时写入到HDFS中的数据格式发生了变化:

"tom\u000open.app"

内容两边还包含了双引号


试过如下方法:

  1. 使用filter对数据进行过滤,转成hash,无效

  2. wedhdfs中配置format hash,无效

在此提问,望知道配置的人解答~

阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进