接收大文件流_大数据学习笔记7——hadoop生态圈之flume组件Sources

本文详细介绍了Apache Flume中的几种常用Source组件,包括AvroSource、ThriftSource、ExecSource、JMSSource、SpoolingDirectorySource、TaildirSource和KafkaSource。每个组件的工作原理、配置示例以及适用场景都有所阐述,帮助读者理解如何在大数据环境中使用Flume收集数据。

前期回顾:

大数据学习笔记1——hdfs架构原理

大数据学习笔记2——hdfs安装及相关配置文件的设置

大数据学习笔记3——hdfs 文件系统shell命令(1)

大数据学习笔记4——hdfs 文件系统shell命令(2)

大数据学习笔记5——hdfs 文件系统shell命令(3)

大数据学习笔记6——hadoop生态圈之初识flume

上篇讲述了flume概念、特点及核心Agent。Agent主要包括Source、channel、Sink3个组件。

本篇介绍几个常用的Source组件。

Avro Source

监听Avro端口并从外部Avro客户端流接收事件。

1e15bba56a8c81ce4b3ed11a440cfef6.png

Thrift Source

监听thrift端口并从外部thrift客户端流接收事件。

730db34c9a2c73f1dcc3bbbacd3349e5.png

Exec Source

Exec source监听某个指定的unix命令并接收输出流。比如:可以持续监听cat或tail - f[文件]这样的配置输出的事件流。

853a7a99052c465551f3757f157faae5.png

JMS Source

JMS源从JMS目的地(如队列或主题)读取消息。作为一个JMS应用程序,它应该可以与任何JMS提供者一起工作,但是目前官方只在ActiveMQ中测试过。JMS源提供可配置的批大小、消息选择器、用户/传递和消息到flume事件转换器。注意,供应商提供的JMS jar应该使用插件包括在Flume类路径中。d目录(首选),命令行上的类路径,或通过flume-env.sh中的FLUME_CLASSPATH变量。

41d2b8320cb5d79f53e42a28df8d08cd.png

例:

a1.sources = r1a1.channels = c1a1.sources.r1.type = jmsa1.sources.r1.channels = c1a1.sources.r1.initialContextFactory = org.apache.activemq.jndi.ActiveMQInitialContextFactorya1.sources.r1.connectionFactory = GenericConnectionFactorya1.sources.r1.providerURL = tcp://mqserver:61616a1.sources.r1.destinationName = BUSINESS_DATAa1.sources.r1.destinationType = QUEUE

Spooling Directory Source

通过将要摄取的文件放置到磁盘上的一个Spooling目录中,该源允许您摄取数据。它将监视新文件的指定目录,并在新文件出现时解析它们。事件解析逻辑是可插拔的。将给定的文件完全读入通道后,默认情况下通过重命名该文件来表示完成,或者可以删除该文件,或者使用trackerDir跟踪已处理的文件。与Exec源不同,这个源是可靠的,不会丢失数据,即使重新启动或关闭Flume。为了获得这种可靠性,只能将不可变的、命名独特的文件放入Spooling目录。Flume试图检测这些问题条件,如果违反这些条件,将会失败:

如果文件被放入目录后被写入,Flume将向其日志文件打印错误并停止处理。

如果以后重用了文件名,Flume将向其日志文件打印错误并停止处理。

为了避免上述问题,可以在将文件名移动到目录时,添加唯一标识符(例如时间戳)来记录文件名。尽管这个源的可靠性得到了保证,但在某些情况下,如果发生某些下游故障,事件可能会重复。

ae5e9df79aeacfe7bb8ebd5b50bc8366.png

Taildir Source

观察指定的文件,一旦检测到添加到每个文件中的新行,就几乎实时地跟踪它们。如果正在写入新行,则此源将在写入完成之前重试读取它们。这个源是可靠的,不会丢失数据。它定期将每个文件的最后读取位置以JSON格式写入给定位置文件。如果flume由于某种原因停止或关闭,它可以从写在现有位置文件上的位置重新启动tail。在其他用例中,此源还可以使用给定的位置文件从每个文件的任意位置开始跟踪。当指定的路径上没有位置文件时,它将默认从每个文件的第一行开始跟踪。文件将按其修改时间顺序使用。具有最早修改时间的文件将首先被使用。此源不会重命名、删除或对跟踪的文件进行任何修改。目前,这个源代码不支持跟踪二进制文件。它逐行读取文本文件。

e7e6a9727a52fc2ebd1c5185a2df434b.png
a1.sources = r1a1.channels = c1a1.sources.r1.type = TAILDIRa1.sources.r1.channels = c1a1.sources.r1.positionFile = /var/log/flume/taildir_position.jsona1.sources.r1.filegroups = f1 f2a1.sources.r1.filegroups.f1 = /var/log/test1/example.loga1.sources.r1.headers.f1.headerKey1 = value1a1.sources.r1.filegroups.f2 = /var/log/test2/.*log.*a1.sources.r1.headers.f2.headerKey1 = value2a1.sources.r1.headers.f2.headerKey2 = value2-2a1.sources.r1.fileHeader = truea1.sources.ri.maxBatchCount = 1000

Kafka Source

Kafka Source是一个Apache Kafka消费者,它从Kafka主题中读取消息。如果您有多个运行的Kafka源,您可以将它们配置为相同的用户组,这样每个用户组将为主题读取一组唯一的分区。目前官方支持的最高版本是KAFKA2.0.1。

ac898ddc6bea95a8ecd1924fd89451e9.png

Kafka Source覆盖了两个Kafka消费者参数:auto.commit.enable被源设置为false,每批提交一次。KafkaSource保证至少一次消息检索策略。Source启动时可以出现重复项。KafkaSource还为key.deserializer(org.apache. Kafka .common. serialize . stringserializer)和value.deserializer(org.apache. Kafka .common. serialize . bytearrayserializer)提供了默认值。不建议修改这些参数。

tier1.sources.source1.type = org.apache.flume.source.kafka.KafkaSourcetier1.sources.source1.channels = channel1tier1.sources.source1.batchSize = 5000tier1.sources.source1.batchDurationMillis = 2000tier1.sources.source1.kafka.bootstrap.servers = localhost:9092tier1.sources.source1.kafka.topics = test1, test2tier1.sources.source1.kafka.consumer.group.id = custom.g.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值