大数据篇:flume+kafka+spark stream+hbase做日志收集

本文介绍了使用flume、kafka、spark stream和hbase构建的大数据日志收集系统。flume作为数据收集工具,支持多种数据源,通过kafka进行消息传递,spark stream作为消费者处理数据,最终将数据存储到hbase。配置过程中涉及flume的source、channel和sink,kafka的配置,以及spark stream读取kafka并写入hbase的步骤。此外,文章还讨论了为何选择这套组合以及hbase在存储方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

flume+kafka+spark stream 是目前比较常用的一套大数据消息日志收集管理框架,至于最后是入到Hive或者者Hbase需看不同业务场景,下面以HBase为场景简述下整个配置与搭建流程以及这些框架如此搭配的优点。

1. flume 配置

1.1 flume 简介

从官网文档 https://flume.apache.org 可以知道Flume的定位是很清晰的,它提供了一个分布式的,高可用的桥梁链接,可以收集、聚合和移动大量的日志数据,从许多不同的数据源到集中式数据存储,大概的结构如下图,流程大致为 从源端(source)接收数据,经过管道(channel)的缓存等等,发送到目标(sink)端。:

其中source的定义flume提供了很多方式,常用的有以下几种:

  • Http source ,这种方式可以通过监听接口方式来收集log;
  • Exec source ,这种方式可以通过执行一些shell命令来收集log,例如通过 tail -f 文件 来监听文件追加的日志;
  • Spooling source,这种方式可以监听某个目录的log,当有新的log产生时即会被发送出去;
  • 还有很多其他的方式,例如可以以kafka作为source,这样flume就充当了kafka的消费者,当然还有很多如 Avro sourceThrift sourceTCP类的等等,具体参考官网文档更加相应场景配置即可。

channel同样flume提供了很多方式,memory channel这种方式已经不太建议了,原因也很明显,不够安全,当出现任何机器问题时数据就会丢失,file channelkafka channel是比较推荐的做法,特别是当需要比较高的并发时,kafka channel是一个不错的选择。

sink同样flume提供了很多方式,常用的有以下几种:

  • HDFS/Hive/Hbase/ElasticSearch sink,直接写入hdfs/Hive/Hbase/ElasticSearch,这种方式适合那些比较无需做ETL的场景。
  • kafka sink,直接充当kafka的生产者,可以看到kafka可以在整个flume生命周期里可以自由穿插。
  • Http sink,直接通过post方法将数据发送到目标api。
  • 其他的一些详细见官网文档即可。

1.2 flume 配置

下面以Spooling Directory Source -> file channel -> kafka sink为例:

一份样例配置参数:

# Name the components on this agent
agent.sources = dir-src
agent.sinks = kafka-sink
agent.channels = file-channel

# Describe/configure the source
agent.sources.dir-src.type = spooldir
agent.sources.dir-src.spoolDir = #监听目录
agent.sources.dir-src.fileHeader = true
agent.sources.dir-src.deserializer.maxLineLength=1000000

# Describe the sink
agent.sinks.kafka-sink.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.kafka-sink.kafka.topic = test
agent.sinks.kafka-sink.kafka.bootstrap.servers = #kafka boostrapServer

# Use a channel which buffers events in file
agent.channels.file-channel.type = file
agent.channels.file-channel.checkpointDir = # checkpoint目录
agent.channels.file-channel.dataDirs = # 缓存的数据目录

# Bind the source and sink to the channel
agent.sources.dir-src.channels = file-channel
agent.sinks.kafka-sink.channel = file-channel

配置详解:

  • 首先每个flume配置表可以存在多个agent,多个source,多个channel,多个sink,所以可以根据相应业务场景进行组合。
  • 对于每个agent,必须配置相应的source/channel/sink,通过agent.source = ???,agent.channel = ???,agent.sink = ???来指定。
  • 对于具体的source/channel/sink,通过 agent.{source/channel/sink}.???.属性 = ... 来具体配置 source/channel/sink 的属性。
  • 配置完source/channel/sink相应的属性后,需把相应的组件串联一起,如: agent.sources.dir-src.channels = file-channel其中dir-src这个source指定了其channel为我们定义好的file-channel.

一些Tips:

  • flume在收集log的时候经常会出现Line length exceeds max (2048), truncating line!,这个一般情况对于一些log的存储没影响,但是遇到需要解析log的情况就有问题了,有时一个json或者其他格式的log被截断了,解析也会出问题,所以在source的属性配置里可以通过参数deserializer.maxLineLength调高默认的2048。
  • flume在监听相应的目录时,如果有重名的文件,或者直接在监听目录下修改相应正在读取的文件时,都会报错,而且flume-ng目前没有这种容错机制,报错只能重启了,还有一个比较大的问题,flume-ng没有提供相应的kill脚本,只能通过shell直接ps -aux | grep flume找到相应的PID,然后手动kill。
  • flume在监听相应目录时,如果目录下的文件是通过HTTP或者scp传输过来的,小文件的话没问题,但是当文件大小超过网络传输速率,就会造成flume读取文件时报错直接显示文件大小正在变化,这点也是比较麻烦的,所以建议是现有个临时目录先存放文件,等文件传输完成后再通过shell的mv命令直接发送到监听目录。
  • 有时候我们的log文件是以压缩的方式传输过来,但是如果我们想解析后才发送出去的话,可以将当前的Spooling Directory Source的改为Exec Source,可以指定改source的command参数里写shell解析命令。

flume的启动:

flume-ng agnet --conf "配置文件文件目录" --conf-file 
### 回答1: flume是一个数据采集工具,可以将数据从不同的数据源采集到kafka中。kafka是一个分布式消息队列,可以将数据进行缓存和分发。sparkstream是一个流处理框架,可以对实时数据进行处理和分析。hbase是一个分布式的NoSQL数据库,可以存储海量的结构化数据。mysql是一个关系型数据库,可以存储结构化数据。hive是一个数据仓库工具,可以将结构化数据进行查询和分析。 在这个架构中,flume将数据采集到kafka中,sparkstreamkafka中读数据进行实时处理和分析,处理后的数据可以存储hbase中。同时,mysql可以作为一个数据源,将数据导入到hive中进行分析。hbase和hive之间可以通过HBaseStorageHandler实现映射,将hbase中的数据映射到hive中进行查询和分析。 ### 回答2: FlumeKafkaSpark Streaming、HBase、MySQL和Hive都是大数据处理和分析中常见的工具和技术。这些工具和技术可以协同工作以实现更高效、更精确的数据分析和处理。下面将从多角度分析这些工具之间的映射关系。 1. 数据采集和传输 FlumeKafka是主要的数据采集和传输工具。Flume通常用于将数据从不同来源采集到HDFS或HBase等目标位置。Kafka则更适用于构建大规模的分布式消息流平台。Kafka可以接收来自多个来源的数据,然后在进行处理之前将其传输到队列中。这些工具都可以与HBase和MySQL等数据存储系统合作使用。 2. 实时数据处理 Spark Streaming则是实时数据处理和分析的主要技术。Spark Streaming可以将KafkaFlume和其他来源的数据进行实时处理和分析,可以将结果直接存储HBase或MySQL中。 3. 数据存储 MySQL和Hive是两个不同的SQL引擎。MySQL可以作为一种关系型数据库管理系统(RDBMS),可以在大多数情况下有效地存储结构化数据。Hive则可以将数据存储在Hadoop集群的HDFS中,并生成一个结构化查询语言(SQL)接口,允许开发人员和数据科学家方便地访问Hadoop中的数据。因此,Hive更适合非结构化或半结构化数据存储HBase则可以作为一个高性能、分布式的NoSQL数据库,专门用于在Hadoop集群上存储大数据和实时数据。因此,HBase比MySQL更适合存储半结构化和非结构化数据。 4. 数据映射 Hadoop和Hive之间的映射是首选的方式之一。Hive提供了一个SQL界面,允许数据科学家和开发人员访问和处理存储在Hadoop集群上的数据。因此,在Hive中创建的表会自动映射到Hadoop集群上的HDFS文件中。 HBase则局限于存储半结构化和非结构化数据,可以使用Hive和Apache Phoenix来更方便地访问和操作HBase数据。Apache Phoenix提供了一个SQL界面,允许开发人员和数据科学家使用标准SQL来访问和操作HBase数据。 因此,FlumeKafkaSpark Streaming、HBase、MySQL和Hive之间的映射关系可以根据实际需求进行不同的组合。例如,FlumeKafka可以协同工作,将数据传输到Hadoop集群上的HDFS或HBase中进行存储Spark Streaming可以实时处理来自Hadoop集群上的HDFS、HBaseKafka的数据。MySQL和Hive可以作为SQL引擎,提供方便的接口用于访问Hadoop集群的数据。HBase作为一个高性能、分布式的NoSQL数据库,可以在Hadoop集群上有效地处理半结构化和非结构化数据。 ### 回答3: flumekafkasparkstreamhbase、mysql和hive是在大数据生态系统中非常重要和流行的一些工具和技术。它们都具有独特的功能和用途,并广泛用于大规模数据处理和分析。 在这些工具和技术之间建立映射是非常重要的,因为它们可以协同工作并发挥其最大潜力。尤其是在大规模数据处理和分析方面,正确的工具和技术映射可以帮助我们更好地管理和处理海量数据。 flume是一个日志采集和处理系统,可以从数据源收集数据并将其传输到目标位置,如hbase、hive或Kafkaflumekafka之间的映射通常用于处理数据流,其中flume作为生产者将日志数据发送到kafka,然后消费者可以使用sparkstream或其他工具将这些数据进行处理和分析。 kafka是一个分布式流处理平台,它可以处理大量数据流并实现实时数据处理。kafkahbase之间的映射通常是将kafka作为数据来源,然后将数据写入hbase进行存储和管理。此外,可以使用hive或其他工具对hbase存储的数据进行查询和分析。 sparkstream是一个实时流处理引擎,它可以处理来自kafkaflume等数据源的实时数据流。与hbase和mysql之间的映射通常是,sparkstream可以从这些存储系统中读数据并对其进行处理和分析,并将结果存储回这些存储系统中。 hbase是一个分布式NoSQL数据库,它可以存储大量非结构化和半结构化数据。与hive之间的映射通常是,hive可以使用hbase表中存储的数据进行查询和分析,而hbase则提供了一个高可靠性的数据存储和管理系统。 mysql是一个关系型数据库管理系统,常用于较小的数据集合。(In 300 words) 总之,这些工具和技术都是互相关联的,在大数据生态系统中扮演着重要角色。正确的映射可以使它们协同工作,并处理大规模数据集的难题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值