Module 09 Flume架构原理
- 格式:pdf
- 大小:606.32 KB
- 文档页数:27


简述flume的概念Flume是一个分布式的、可靠的、高可用性的大数据采集系统。
它可以将不同来源的数据收集到Hadoop或其他存储系统中,以便进行后续处理和分析。
Flume是Apache旗下的一个开源项目,其设计目标是为了解决大规模数据采集和传输问题。
一、Flume的背景1. 大数据时代背景随着互联网技术的发展,网络上产生了海量数据。
这些数据包括用户行为日志、服务器日志、社交网络信息等等,都对企业和机构进行决策和分析提供了极大的帮助。
但是,这些数据往往来自于不同来源,格式也千差万别,如何对这些数据进行有效地采集和传输就成为了一个非常重要的问题。
2. Flume诞生背景Flume最初由Cloudera公司开发,其目标是为Hadoop提供一种快速而简单地收集、聚合和移动大量日志文件(尤其是Web服务器日志)到HDFS(Hadoop Distributed File System)中的方法。
二、Flume的架构1. Flume组件Flume主要由三个组件组成:Source(源)、Channel(通道)和Sink(汇)。
Source从外部系统获取数据,并将其传递给通道;Channel负责存储数据;Sink从通道中获取数据,并将其传递给目标存储系统。
2. Flume的工作流程Flume的工作流程可以概括为以下几个步骤:(1)Source从外部系统获取数据;(2)Source将数据传递给Channel;(3)Channel存储数据;(4)Sink从Channel中获取数据,并将其传递给目标存储系统。
三、Flume的特点1. 可扩展性Flume支持可插拔的组件,可以根据需要进行扩展和定制。
同时,它也支持水平扩展,可以在多台机器上运行。
2. 可靠性Flume具有高可靠性和容错能力。
当某个组件出现故障时,其他组件可以自动接管其工作,保证整个系统的正常运行。
3. 灵活性Flume支持多种不同类型的数据源和目标存储系统,并且可以根据需要进行配置和调整。
flume的数据传输模型Flume是一个开源的分布式、可靠、高可用的大数据传输工具。
它的数据传输模型可以帮助用户将海量数据从一个系统传输到另一个系统,同时保证数据的可靠性和高效性。
Flume的数据传输模型是基于事件驱动的。
它使用了一种称为Agent的中间件,负责接收、传输和存储数据。
Agent可以根据用户的需求,从不同的数据源中获取数据,并将其传输到指定的目的地。
这种事件驱动的模型使得用户可以按照自己的需求定制数据传输的规则和策略。
Flume的数据传输模型是可靠的。
在数据传输过程中,Flume使用了一种称为“事务”的机制来保证数据的可靠性。
简单来说,事务就是将一系列的操作当作一个整体来执行,要么全部成功,要么全部失败。
Flume的事务机制可以确保在数据传输过程中,即使出现了错误或中断,也能够将数据完整地传输到目的地。
Flume的数据传输模型还具备高可用性。
Flume使用了一种称为“多Agent”的架构来实现高可用性。
多Agent架构中,多个Agent可以同时运行,互相之间可以进行数据传输的协作。
当其中一个Agent 出现故障或不可用时,其他Agent可以接替其工作,保证数据传输的连续性和稳定性。
Flume的数据传输模型具有良好的扩展性。
它可以适应不同规模和复杂度的数据传输需求。
无论是小规模的数据传输任务,还是大规模的数据流水线,Flume都能够提供灵活和高效的解决方案。
同时,Flume还支持插件机制,用户可以根据自己的需求自定义各种插件,以满足不同的数据处理需求。
总的来说,Flume的数据传输模型是一个功能强大、灵活可靠的工具。
它可以帮助用户快速、高效地实现数据传输任务,同时保证数据的可靠性和高可用性。
无论是大规模的数据处理还是实时的数据传输,Flume都能够提供满足用户需求的解决方案。
大数据技术之标题1) Flume 提供一个分布式的,可靠的,对大数据量的日志进行高效采集、会萃、挪移的服务,Flume 只能在Unix 环境下运行。
2) Flume 基于流式架构,容错性强,也很灵便简单。
3) Flume、Kafka 用来实时进行数据采集,Spark、Storm 用来实时处理数据,impala 用来实时查询。
用于采集数据,Source 是产生数据流的地方,同时Source 会将产生的数据流传输到Channel,这个有点类似于Java IO 部份的Channel。
用于桥接Sources 和Sinks,类似于一个队列。
从Channel 采集数据,将数据写到目标源(可以是下一个Source,也可以是HDFS 或者HBase)。
传输单元,Flume 数据传输的基本单元,以事件的形式将数据从源头送至目的地。
source 监控某个文件或者数据流,数据源产生新的数据,拿到该数据后,将数据封装在一个Event 中,并put 到channel 后commit 提交,channel 队列先进先出,sink 去channel 队列中拉取数据,然后写入到hdfs 或者HBase 中。
目标:Flume 监控一端Console,另一端Console 发送消息,使被监控端实时显示。
分步实现:# Name the components on this agenta1.sources = r1a1.sinks = k1a1.channels = c1# Describe/configure the sourcea1.sources.r1.type = netcata1.sources.r1.bind = localhosta1.sources.r1.port = 44444# Describe the sinka1.sinks.k1.type = logger# Use a channel which buffers events ina1.channels.c1.type = memorya1.channels.c1.capacity = 1000memorya1.channels.c1.transactionCapacity = 100# Bind the source and sink to the channela1.sources.r1.channels = c1a1.sinks.k1.channel = c1目标:实时监控hive 日志,并上传到HDFS 中分步实现:尖叫提示:标红的jar 为1.99 版本flume 必须引用的jara2.sources = r2a2.sinks = k2a2.channels = c2# Describe/configure the sourcea2.sources.r2.type = execmand = tail -F/home/admin/modules/apache-flume- 1.7.0-bin/my_custom_logs.txt a2.sources.r2.shell = /bin/bash -c# Describe the sinka2.sinks.k2.type = hdfsa2.sinks.k2.hdfs.path = hdfs://linux01:8020/flume/%Y%m%d/%H #上传文件的前缀a2.sinks.k2.hdfs.filePrefix = logs-#是否按照时间滚动文件夹a2.sinks.k2.hdfs.round = true#多少时间单位创建一个新的文件夹a2.sinks.k2.hdfs.roundValue = 1#重新定义时间单位a2.sinks.k2.hdfs.roundUnit = hour#是否使用本地时间戳eLocalTimeStamp = true#积攒多少个Event 才flush 到HDFS 一次a2.sinks.k2.hdfs.batchSize = 1000#设置文件类型,可支持压缩a2.sinks.k2.hdfs.fileType = DataStream#多久生成一个新的文件a2.sinks.k2.hdfs.rollInterval = 600#设置每一个文件的滚动大小a2.sinks.k2.hdfs.rollSize = 134217700#文件的滚动与Event 数量无关a2.sinks.k2.hdfs.rollCount = 0#最小冗余数a2.sinks.k2.hdfs.minBlockReplicas = 1# Use a channel which buffers events in memorya2.channels.c2.type = memorya2.channels.c2.capacity = 1000a2.channels.c2.transactionCapacity = 100# Bind the source and sink to the channela2.sources.r2.channels = c2a2.sinks.k2.channel = c2$ bin/flume-ng agent --conf conf/ --name a2 --conf-file conf/flume-hdfs.conf目标:使用flume 监听整个目录的文件分步实现:1) 创建配置文件flume-dir.confa3.sources = r3a3.sinks = k3a3.channels = c3# Describe/configure the sourcea3.sources.r3.type = spooldira3.sources.r3.spoolDir = /home/admin/modules/apache-flume- 1.7.0-bin/upload a3.sources.r3.fileHeader = true#忽略所有以.tmp 结尾的文件,不上传a3.sources.r3.ignorePattern = ([^ ]*\.tmp)# Describe the sinka3.sinks.k3.type = hdfsa3.sinks.k3.hdfs.path = hdfs://linux01:8020/flume/upload/%Y%m%d/%H#上传文件的前缀a3.sinks.k3.hdfs.filePrefix = upload-#是否按照时间滚动文件夹a3.sinks.k3.hdfs.round = true#多少时间单位创建一个新的文件夹a3.sinks.k3.hdfs.roundValue = 1#重新定义时间单位a3.sinks.k3.hdfs.roundUnit = hour#是否使用本地时间戳eLocalTimeStamp = true#积攒多少个Event 才flush 到HDFS 一次a3.sinks.k3.hdfs.batchSize = 1000#设置文件类型,可支持压缩a3.sinks.k3.hdfs.fileType = DataStream#多久生成一个新的文件a3.sinks.k3.hdfs.rollInterval = 600#设置每一个文件的滚动大小a3.sinks.k3.hdfs.rollSize = 134217700#文件的滚动与Event 数量无关a3.sinks.k3.hdfs.rollCount = 0#最小冗余数a3.sinks.k3.hdfs.minBlockReplicas = 1# Use a channel which buffers events in memorya3.channels.c3.type = memorya3.channels.c3.capacity = 1000a3.channels.c3.transactionCapacity = 100# Bind the source and sink to the channela3.sources.r3.channels = c3a3.sinks.k3.channel = c32) 执行测试$ bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-dir.conf & 尖叫提示:在使用Spooling Directory Source 时1) 不要在监控目录中创建并持续修改文件2) 上传完成的文件会以.COMPLETED 结尾3) 被监控文件夹每600 毫秒扫描一次文件变动目标:使用Java API 实现Flume 开辟。
flume知识点Flume知识点一、概述Flume是一个可靠、可扩展且可管理的分布式日志收集系统,用于将日志数据从多个源头(如Web服务器、数据库、应用程序等)收集到中央存储(如Hadoop、HBase、Kafka等)中。
它是Apache软件基金会的开源项目,广泛应用于大数据领域。
二、架构Flume的架构由三个主要组件组成:Source、Channel和Sink。
1. Source:负责收集数据并将其传递给Channel。
Flume提供了多种类型的Source,如Avro Source、Spooling Directory Source 等,可以根据不同的需求选择合适的Source。
2. Channel:用于存储从Source接收到的事件。
Flume提供了多种类型的Channel,如Memory Channel、File Channel等,可以根据数据量和性能需求选择合适的Channel。
3. Sink:负责将从Channel中获取的事件传递给目标存储。
Flume 提供了多种类型的Sink,如HDFS Sink、HBase Sink等,可以根据数据存储的类型选择合适的Sink。
三、工作流程Flume的工作流程可以分为三个阶段:数据采集、数据传输和数据存储。
1. 数据采集:在数据采集阶段,Flume通过Source组件从不同的数据源中收集数据。
Source可以按照配置文件中的规则来监控数据源,并将收集到的数据传递给Channel。
2. 数据传输:在数据传输阶段,Flume将从Source收集到的数据传输到Channel。
Channel可以存储一定量的数据,以便在高负载情况下进行缓冲。
3. 数据存储:在数据存储阶段,Flume通过Sink组件将数据从Channel传输到目标存储。
Sink可以根据配置文件中的规则将数据存储到不同的存储系统中。
四、高可靠性Flume具有高可靠性的特点,可以确保数据的安全传输和存储。