Fluentd:用Hadoop收集数据(HDFS)

用Hadoop收集数据(HDFS)

本文解释了如何使用Fluentd的WebHDFS输出插件将半结构化日志聚合到Hadoop HDFS中。

背景

Fluent是一个高级的开源日志收集器,最初是由Treasure Data公司开发的。Fluent是专门为解决大数据日志收集问题而设计的。许多用户正在使用Fluentd和MongoDB,并发现它目前无法很好地扩展。 HDFS (Hadoop)是存储和处理大量数据的自然选择。除了Java库之外,它还支持一个名为WebHDFS的HTTP接口。 本文将向您展示如何使用Fluentd从HTTP接收数据并将其流式传输到HDFS。

架构

下图展示了高层架构:

安装

为简单起见,本文将描述如何设置单节点配置。请在同一节点上安装以下软件:

  • Fluentd

  • webhdfs输出插件 (out_webhdfs)

  • Apache HDFS

WebHDFS 插件包含在Fluentd的deb/rpm包的最新版本(1.1.10或更高版本)中。如果你想用RubyGems安装插件,请用

gem install fluent-plugin-webhdfs

Fluentd配置

让我们开始配置Fluentd。如果您使用deb/rpm包,Fluentd的配置文件位于

/etc/td-agent/td-agent.conf

否则,配置文件位于:

/etc/fluentd/fluentd.conf

HTTP输入

对于输入源,我们将设置Fluentd接受来自HTTP的记录。Fluentd配置文件应该如下所示:

<source>
  @type http
  port 8888
</source>

WebHDFS输出

输出目的地将是WebHDFS。输出配置应该如下所示:

<match hdfs.*.*>
  @type webhdfs
  host namenode.your.cluster.local
  port 50070
  path "/log/%Y%m%d_%H/access.log.#{Socket.gethostname}"
  <buffer>
    flush_interval 10s
  </buffer>
</match>

<match>部分指定了用于查找匹配标签的正则表达式。如果日志中的标签匹配,则使用相应的匹配配置(即相应地路由日志)。

flush_interval参数指定数据写入HDFS的频率。追加操作用于将传入数据追加到path参数指定的文件中。 时间和主机名的占位符可以与path参数一起使用。这可以防止多个Fluentd实例将数据追加到同一个文件中,而追加操作必须避免这种情况。

其他选项指定HDFS的NameNode 的主机和端口。

HDFS配置

默认情况下不启用追加操作。请将这些配置放入您的hdfs-site.xml文件,然后重新启动整个群集:

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>
​
<property>
  <name>dfs.support.append</name>
  <value>true</value>
</property>
​
<property>
  <name>dfs.support.broken.append</name>
  <value>true</value>
</property>

请确认HDFS用户对指定为网络文件系统输出的路径具有写权限。

测试

为了测试配置,只需将JSON发布到Fluentd(我们在这个例子中使用了curl命令)。发送USR1信号会将Fluentd的缓冲区刷新到WebHDFS中

$ curl -X POST -d 'json={"action":"login","user":2}' \
  http://localhost:8888/hdfs.access.test
$ kill -USR1 `cat /var/run/td-agent/td-agent.pid`

然后我们可以访问HDFS查看存储的数据:

$ sudo -u hdfs hadoop fs -lsr /log/
drwxr-xr-x   - 1 supergroup          0 2012-10-22 09:40 /log/20121022_14/access.log.dev

总结

与WebHDFS的融合使实时日志收集简单、健壮且可扩展!@tagomoris已经使用这个插件收集了20,000 msgs/sec,1.5 TB/天,几个月来没有出现任何大问题。

扩展学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值