使用flume将csv文件写到kafka的主题中

现在有一个项目数据文件:event_attendees.csv、events.csv、test.csv、train.csv、user_friends.csv、users.csv

需求:需要将这些文件通过flume传到kafka中。

首先,你的虚拟机需要具备jdk、flume、kafka、zookeeper。

本人上述软件版本为:jdk-8u111-linux-x64.tar.gz、flume-ng-1.6.0-cdh5.14.2.tar.gz、kafka_2.11-2.0.0.tgz、zookeeper-3.4.5-cdh5.14.2.tar.gz

1.在/opt路径下,创建6个文件夹,分别存放上述的6个文件。

在/opt路径下,创建flumechk文件夹,用来临时存放数据的地址以及检查点。

在/opt路径下,创建flumecfg文件夹,用来存放6个flume的conf文件。

此步骤省略。

2.编辑conf文件。

①flume_event_attendees_kafka.conf

#定义source,channel和sink的名字
a2.channels=c2
a2.sources=s2
a2.sinks=k2

#设置source为Spooling Directory Source(专门对文件提取的一种source)
a2.sources.s2.type=spooldir
a2.sources.s2.channels=c2
#设置提取文件目录位置
a2.sources.s2.spoolDir=/opt/events
#按行解析最大长度字符.这个需要根据对应的文件一行有多少字符,来设定
#使用wc -L event_attendees.csv即可查看
a2.sources.s2.deserializer.maxLineLength=120000

#拦截器:将表的表头过滤掉
a2.sources.s2.interceptors=i2
a2.sources.s2.interceptors.i2.type=regex_filter
#正则匹配,将行开头为event的一行数据过滤掉
a2.sources.s2.interceptors.i2.regex=\s*event.*
a2.sources.s2.interceptors.i2.excludeEvents=true

#设置临时存放数据的地址以及检查点
a2.channels.c2.type=file
#将存储检查点文件的目录
a2.channels.c2.checkpointDir=/opt/flumechk/checkpoint
a2.channels.c2.dataDirs=/opt/flumechk/data

#设置sink端
a2.sinks.k2.type=org.apache.flume.sink.kafka.KafkaSink
a2.sinks.k2.kafka.topic=event_attendees_raw
a2.sinks.k2.kafka.bootstrap.servers=192.168.21.130:9092
#一批中要处理多少条消息
a2.sinks.k2.kafka.flumeBatchSize=20
#设置通道
a2.sinks.k2.channel=c2
#设置应答机制
a2.sinks.k2.kafka.producer.acks=1
#保留缓存时间,单位为ms
a2.sinks.k2.kafka.producer.linger.ms=10
#一批的记录大小,单位为B
a2.sinks.k2.kafka.producer.batch.size=524288

开启两个服务:

zkServer.sh start

 kafka-server-start.sh /opt/software/kafka211/config/server.properties 

创建主题:

kafka-topics.sh --create --topic event_attendees_raw --zookeeper 192.168.21.130:2181 --replication-factor 1 --partitions 1

开启consumer消费从头开始:

kafka-console-consumer.sh --bootstrap-server 192.168.21.130:9092 --topic event_attendees_raw --from-beginning

先更改一下/opt/software/flume160/bin下面的flume-ng文件。避免内存溢出。

JAVA_OPTS="-Xmx2048m"

开启flume服务:

flume-ng agent -n a2 -c /opt/software/flume160/conf/ -f /opt/flumecfg/flume_kafka.conf -Dflume.root.logger=DEBUG,console

可以通过一下命令查看上述主题的偏移量是否已写完:

kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 192.168.21.130:9092 --topic event_attendees_raw --time -1

说明,event_attendees.csv文件已经写到event_attendees_raw主题中了。over!

Flume 是一个分布式、可靠和高可用的海量日志采集、聚合和传输系统。它可以将来自多个数据源的数据采集到 Hadoop 生态系统,其包括 HDFS、HBase、Kafka 等。 下面是一个将本地数据 CSV 文件上传至 MySQL 的 employee 表的 Flume 配置示例: 1. 首先,创建一个名为 `csv_to_mysql.conf` 的 Flume 配置文件,内容如下: ```properties # 定义 Flume agent 名称和组件 csv_to_mysql.sources = csv_source csv_to_mysql.sinks = mysql_sink csv_to_mysql.channels = memory_channel # 配置数据源 csv_to_mysql.sources.csv_source.type = spooldir csv_to_mysql.sources.csv_source.spoolDir = /path/to/csv/files csv_to_mysql.sources.csv_source.fileHeader = true csv_to_mysql.sources.csv_source.fileSuffix = .csv csv_to_mysql.sources.csv_source.batchSize = 100 # 配置数据传输管道 csv_to_mysql.channels.memory_channel.type = memory csv_to_mysql.channels.memory_channel.capacity = 1000 csv_to_mysql.channels.memory_channel.transactionCapacity = 100 # 配置数据传输目的地 csv_to_mysql.sinks.mysql_sink.type = org.apache.flume.sink.jdbc.JDBCSink csv_to_mysql.sinks.mysql_sink.jdbc.url = jdbc:mysql://localhost:3306/your_database csv_to_mysql.sinks.mysql_sink.jdbc.user = your_username csv_to_mysql.sinks.mysql_sink.jdbc.password = your_password csv_to_mysql.sinks.mysql_sink.jdbc.driver.class = com.mysql.jdbc.Driver csv_to_mysql.sinks.mysql_sink.batchSize = 100 csv_to_mysql.sinks.mysql_sink.channel = memory_channel csv_to_mysql.sinks.mysql_sink.sql = insert into employee (id, name, age, gender) values (?, ?, ?, ?) csv_to_mysql.sinks.mysql_sink.channel = memory_channel ``` 2. 接下来,使用以下命令启动 Flume: ```bash $ bin/flume-ng agent --conf conf --conf-file csv_to_mysql.conf --name csv_to_mysql -Dflume.root.logger=INFO,console ``` 3. 最后,将 CSV 文件复制到 `/path/to/csv/files` 目录Flume 将自动将其上传到 MySQL 的 employee 表。 在上传过程Flume 将会读取 CSV 文件的数据,将其转换为插入语句,然后将其批量提交到 MySQL 数据库。 注意:在执行此操作之前,请确保已经创建了名为 employee 的表,并正确配置了 MySQL 数据库连接信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值