二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中

4 篇文章 0 订阅

一、目的

由于使用了新的Kafka协议,因为根据新的协议推送模拟数据到Kafka中,再Flume采集Kafka数据到HDFS中

二、技术选型

(一)Kettle工具

准备使用Kettle的JSON input控件和Kafka producer控件,但是搞了1天没搞定,博客上也找不到相关的资料,后面再研究研究

之前用kettle采集Kafka数据写入HDFS中(不建议使用这种方式采集Kafka数据到HDFS中

(二)Flume工具

三、实施步骤

(一)准备json文件

注意:Json数据用JSOB工具压缩一下,1个完整的JSON为1行

(二)创建Kafka主题

[root@hurys23 bin]# ./kafka-topics.sh  --create --bootstrap-server  192.168.0.23:9092 --topic topic_internal_data_queue  --partitions 1 --replication-factor 1

(三)创建文件目录

[root@gree128 userfriends]# cd  /opt/kb15tmp/

[root@gree128 kb15tmp]# mkdir -p  /opt/kb15tmp/checkpoint/queue

[root@gree128 kb15tmp]# mkdir -p  /opt/kb15tmp/checkpoint/data/queue

(四)配置Flume采集json任务文件

queue.sources=queueSource
queue.channels=queueChannel
queue.sinks=queueSink

queue.sources.queueSource.type=spooldir
queue.sources.queueSource.spoolDir=/opt/kb15tmp/flumelogfile/queue
queue.sources.queueSource.deserializer=LINE
queue.sources.queueSource.deserializer.maxLineLength=320000
queue.sources.queueSource.includePattern=queue_[0-9]{4}-[0-9]{2}-[0-9]{2}.json

queue.channels.queueChannel.type=file
queue.channels.queueChannel.checkpointDir=/opt/kb15tmp/checkpoint/queue
queue.channels.queueChannel.dataDirs=/opt/kb15tmp/checkpoint/data/queue

queue.sinks.queueSink.type=org.apache.flume.sink.kafka.KafkaSink
queue.sinks.queueSink.batchSize=640
queue.sinks.queueSink.brokerList=192.168.0.23:9092
queue.sinks.queueSink.topic=topic_internal_data_queue

queue.sources.queueSource.channels=queueChannel
queue.sinks.queueSink.channel=queueChannel

(五)修改Flume采集Kafka任务文件

## agent a1
a1.sources = s1
a1.channels = c1
a1.sinks = k1

## configure source s1
a1.sources.s1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.s1.kafka.bootstrap.servers = 192.168.0.23:9092
a1.sources.s1.kafka.topics = topic_internal_data_queue
a1.sources.s1.kafka.consumer.group.id = queue_group
a1.sources.s1.kafka.consumer.auto.offset.reset = latest
a1.sources.s1.batchSize = 1000

## configure channel c1
## a1.channels.c1.type = memory
## a1.channels.c1.capacity = 10000
## a1.channels.c1.transactionCapacity = 1000
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /home/data/flumeData/checkpoint/queue
a1.channels.c1.dataDirs = /home/data/flumeData/flumedata/queue

## configure sink k1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hurys23:8020/user/hive/warehouse/hurys_dc_ods.db/ods_queue/day=%Y-%m-%d/
a1.sinks.k1.hdfs.filePrefix = queue
a1.sinks.k1.hdfs.fileSuffix = .log
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = second
a1.sinks.k1.hdfs.rollSize = 1200000000
a1.sinks.k1.hdfs.rollCount = 0
a1.sinks.k1.hdfs.rollInterval = 0
a1.sinks.k1.hdfs.idleTimeout = 60
a1.sinks.k1.hdfs.minBlockReplicas = 1

a1.sinks.k1.hdfs.fileType = SequenceFile
a1.sinks.k1.hdfs.codeC = gzip

## Bind the source and sink to the channel
a1.sources.s1.channels = c1
a1.sinks.k1.channel = c1
​​​​

(六)打开监控,拷贝文件

[root@hurys23 kb15tmp]# cp queue.json /opt/kb15tmp/flumelogfile/queue/queue_2024-04-19.json

(七)执行Kafka消费窗口

[root@hurys23 bin]# ./kafka-console-consumer.sh --bootstrap-server 192.168.0.23:9092  --topic topic_internal_data_queue  --from-beginning

(八)​​​​​​​运行Flume采集Kafka到HDFS的任务​​​​​​​

[root@hurys23 flume190]# bin/flume-ng agent -n a1  -f /usr/local/hurys/dc_env/flume/flume190/conf/queue.properties

(九)​​​​​​​运行Flume采集json文件到Kafka的任务

[root@hurys23 flume190]# bin/flume-ng agent --name queue --conf ./conf/ --conf-file ./conf/KB15conf/queue.conf   -Dflume.root.logger=INFO,console

(十)查看HDFS文件

(十一)ODS层验证JSON格式是否正确,是否可以解析

--刷新表分区
msck repair table ods_queue;

里面的JSON字段都可以解析出来,搞定!

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Flume是一个分布式的、可靠的、高可用的大数据采集系统,可以采集多种数据源的数据,并将其传输到多种目的地。其Flume可以采集Kafka数据,并将其传输到HDFS。具体实现方式是通过FlumeKafka Source和HDFS Sink来实现,Kafka Source用于从Kafka读取数据HDFS Sink用于将数据写入到HDFS。通过配置Flume的配置文件,可以实现Flume采集Kafka数据HDFS的功能。 ### 回答2: Flume 是一个高可靠、分布式、可配置的数据收集、聚合和移动系统。Kafka 是一个高性能、可伸缩、分布式流处理平台,它可以收集、存储和处理海量流式数据HDFS 是一个高可靠性、高扩展性、高容错性的分布式文件系统,它是 Hadoop 的一大核心组件,用于存储海量的结构化和非结构化数据。 在实际的数据处理Flume 可以采用 Kafka Source 来采集 Kafka 数据,然后将数据写入到 HDFS Flume Kafka Source 利用 KafkaFlume 推送消息,并将消息写入到 Flume 的 Channel Flume 的 Channel 一般会采用内存或者磁盘的方式进行存储,以确保数据传输的可靠性和高效性。然后,Flume HDFS Sink 将 Channel 数据批量写入到 HDFS 。在 Flume 构建这样的数据流需要一些配置工作,具体步骤如下: 1. 在 Flume 配置一个 Kafka Source,指定 Kafka 的 IP 和端口、Topic 名称和消费者组信息。 2. 配置一个 Flume Channel,指定 Channel 存储方式和容量。 3. 在 Flume 配置一个 HDFS Sink,指定 HDFS 的路径、文件名等信息。 4. 将 Kafka Source 和 HDFS Sink 与 Channel 进行关联,形成一个数据流。 除了上述基本配置外,还需要为 Kafka Source 和 HDFS Sink 进行调优,以达到最优的性能和稳定性。 总之,利用 Flume 采集 Kafka 数据,并将数据写入到 HDFS 是一种适用于海量数据处理场景的数据流处理模式。这种模式可以提高数据的可靠性和可控性,同时也可以提高数据处理的效率和可扩展性。 ### 回答3: Flume是一种数据采集工具,可以用来采集多种数据源的数据。而Kafka是一种高吞吐量的分布式消息系统,常用于处理大数据流量。 当我们需要将Kafka数据采集HDFS时,可以利用Flume进行数据采集。具体操作步骤如下: 1. 确定HDFS的存储位置,可以新建一个目录用来存储采集数据。比如,我们在Hadoop的安装目录下创建一个名为”flume_kafka”的目录,用来存储采集数据。 2. 在Flume的配置文件,设置Kafka作为数据源,将采集到的数据存储到HDFS。例如,我们可以在配置文件设置一个”source”节点,将Kafka作为数据源进行数据采集;设置一个”sink”节点,将采集到的数据存储到HDFS。其,”sink”的类型为”hdfs”,指定了数据存储到HDFS的路径。 3. 在启动Flume之前,需要在HDFS创建目标目录。使用以下命令在HDFS创建相应目录:`hdfs dfs -mkdir /flume_kafka` 4. 启动Flume进行数据采集。使用以下命令启动Flume:`flume-ng agent -n agent -c /etc/flume-ng/conf.d -f /etc/flume-ng/conf.d/flume_kafka.conf -Dflume.root.logger=INFO,console`。 在启动完成后,可以观察到数据采集的运行状态和日志信息。当采集到的数据被成功存储在HDFS,可以使用以下命令查看文件的内容:`hdfs dfs -cat /flume_kafka/*`。 总之,通过FlumeKafka数据采集HDFS,可以为数据分析和挖掘提供更好的基础数据。而且,Flume还可以配置多种不同的数据源和目标,可以根据具体需求进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天地风雷水火山泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值