logstash传输文本文件到HDFS

来源:互联网 发布:十一双十一淘宝 编辑:程序博客网 时间:2024/06/05 19:32

说明

1、这次主要是记录一下,前几天实现logstash传输文本信息到HDFS时,遇到的一个问题的解决办法,因为自己对logstash还不是很熟悉,所以当时折腾了很久,虽然发现解决方案很简单。
2、logstash有一个第三方插件:webhdfs

遇到的问题

logstash添加的字段与message之间的分隔符与message内部的分隔符不一致

问题描述

我的需求是,将以“,”分隔的文本文件通过logstash传输到HDFS上,然后通过hive建立外表连接,对其中的内容进行查询。
遇到的问题是,logstash将一行行的信息message传输写入hdfs文件时,会添加两个字段:timestamp和hostname,而且分隔符为空格,即:

timestamp hostname message

将message拆开后,存储到HDFS上每行的格式如下:

timestamp hostname 1,小明,1995,98

如此的格式,便无法建立hive查询表,因为整体的分隔符为空格,导致message是一个整体,而不是我们设想的以“,”为分隔符的每个字段对应hive表中的一个字段。这样不利于我们构建hive外表对它进行查询,所以想要将message的字段和添加的字段之间的分隔符保持一致。

解决方案

1、首先想要使用message_format进行解决,将timestamp hostname message之间的分隔符换成“,”,后来发现随着版本更新,webhdfs已经没有了该属性。
2、使用mutate插件的split将message分割,然后分别添加字段add_field,最后删除message,remove_field,后来发现添加没有任何效果,而删除最后得到%{message}的结果。
3、使用mutate插件的gsup解决了问题:gsub => [“message”, “,”, ” “]

原创粉丝点击