使用HDFS中的FLUME日志数据

时间:2020-02-23 14:33:35  来源:igfitidea点击:

最终在Hadoop分布式文件系统(HDFS)中的一些数据可能会通过数据库加载操作或者其他类型的批处理过程降落,但如果要捕获在高吞吐量数据流中流动的数据,例如应用程序日志数据?
Apache Flume是现有的标准方法,可轻松,有效,安全。

Apache Flume是Apache软件基础的另一个顶级项目,是一个分布式系统,用于聚合和移动来自不同来源的大量流数据到集中式数据存储。

换句话说,Flume设计用于将数据的连续摄入到HDF中。
数据可以是任何类型的数据,但FLUME特别适合处理日志数据,例如来自Web服务器的日志数据。
水槽流程称为事件的数据单元;事件的示例是日志记录。

要了解Flux如何在Hadoop集群中运行,我们需要知道Flume作为一个或者多个代理运行,并且每个代理有三个可插拔组件:源,通道和汇:

  • 源检索数据并将其发送到通道。

  • 频道保持数据队列并用作源和下沉之间的导管,当输入流量超过输出流量时是有用的。

  • 汇来自频道的过程数据,并将其传送到目的地,例如HDFS。

代理必须至少有一个要运行的组件中的一个,并且每个代理都包含在其自己的Java虚拟机(JVM)的实例中。

通过源代到频道的事件不会从该频道中删除,直到接入器通过事务删除它。
如果发生网络故障,频道会将其事件保留排队,直到汇款将它们写入群集。
内存通道可以快速处理事件,但它是易失性的并且无法恢复,而基于文件的信道提供持久性,并且可以在发生故障时恢复。

每个代理可以具有若干源,通道和汇,虽然源可以写入许多频道,但是宿宿可以从一个通道采取数据。

代理只是运行Flume的JVM,Hadoop集群中的每个代理节点的汇聚器将数据发送到收集器节点,该收集节点将数据从许多代理汇总到HDFS之前,可以通过其他Hadoop工具分析它。

可以将代理链接在一起,使来自一个代理的水槽从另一个代理发送到源。
Avro,Apache的远程呼叫和序列化框架是用FLUME跨网络发送数据的通常方法,因为它是有效的序列化或者数据转换为紧凑的二进制格式的有用工具。

在Flume的上下文中,兼容性很重要:例如,AVRO事件需要Avro源,并且宿宿者必须提供适合目的地的事件。

是什么使得这一伟大的来源链,频道和汇在一起是Flume代理配置,它存储在一个像Java属性文件一样的本地文本文件中。
我们可以在同一文件中配置多个代理。
查看一个名为Flume-Agent.conf的示例文件 - 它设置为配置名为Shaman的代理:

# Identify the components on agent shaman:
shaman.sources = netcat_s1
shaman.sinks = hdfs_w1
shaman.channels = in-mem_c1
# Configure the source:
shaman.sources.netcat_s1.type = netcat
shaman.sources.netcat_s1.bind = localhost
shaman.sources.netcat_s1.port = 44444
# Describe the sink:
shaman.sinks.hdfs_w1.type = hdfs
shaman.sinks.hdfs_w1.hdfs.path = hdfs://<path>
shaman.sinks.hdfs_w1.hdfs.writeFormat = Text
shaman.sinks.hdfs_w1.hdfs.fileType = DataStream
# Configure a channel that buffers events in memory:
shaman.channels.in-mem_c1.type = memory
shaman.channels.in-mem_c1.capacity = 20000
shaman.channels.in-mem_c1.transactionCapacity = 100
# Bind the source and sink to the channel:
shaman.sources.netcat_s1.channels = in-mem_c1
shaman.sinks.hdfs_w1.channels = in-mem_c1

配置文件包括代理中每个源,通道和宿的属性,并指定它们的连接方式。
在该示例中,代理萨满具有呼出端口44444上的数据(消息到NetCAT)的源,该源将在存储器中缓冲事件数据的频道,以及将事件数据记录到控制台的频道。

此配置文件本可以用于定义多个代理;其中我们只配置一个以保持简单的东西。

要启动代理,请使用名为flume-ng的shell脚本,该脚本位于小管分布的Bin目录中。
从命令行中,发出代理命令,指定配置文件和代理名称的路径。

以下示例命令启动Flume代理:

flume-ng agent -f /<path to flume-agent.conf> -n shaman

Flume代理的日志应该有条目验证源,通道和宿源是否已成功启动。

为了进一步测试配置,我们可以通过进入任意文本字符串来从另一个终端转到端口44444并通过输入任意文本字符串发送Flume。
如果一切顺利,原始的Flume终端将在代理日志中查看的日志消息中输出事件。