大数据职业技能大赛样题(数据采集:Flume多路复用存入Kafka+HDFS)

本文详细介绍了如何配置ApacheFlume以从netcat源接收数据,通过Kafka发送至主题order,以及将数据备份到HDFS。同时,涉及了Kafka和Zookeeper的配置,包括创建主题、启动Flume监听、消费者消费和实时数据生成。
摘要由CSDN通过智能技术生成

1. 配置Flume

cd $FLUME_HOME/conf
vim flume-kafka-conf.properties


# 分别给agent中组件定义别名
# a1为当前组件的名字
# 表示agent中的source组件
a1.sources = r1
# 表示的是下沉组件sink
a1.sinks = k1 k2
# agent内部的数据传输通道channel,用于从source将数据传递到sink
a1.channels = c1 c2
 
# 配置接收方法、地址和端口号
# 描述和配置source组件:r1

# netcat用于监听一个端口的
a1.sources.r1.type = netcat
#配置的绑定地址
a1.sources.r1.bind = 127.0.0.1
#配置的绑定端口
a1.sources.r1.port = 10050

# 定义sink
#描述和配置sink k1组件
#type必须设置为org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#kafka中将发布消息的主题。如果配置了此参数,则消息将发布到该主题
a1.sinks.k1.kafka.topic = order

#a1.sinks.k1.kafka.bootstrap.servers=kafka集群地址
a1.sinks.k1.kafka.bootstrap.servers = bigdata1:9092,bigdata2:9092,bigdata3:9092
#一次性处理多少条数据,较大的批次可提高吞吐量,同时增加延迟
a1.sinks.k1.kafka.flumeBatchSize = 20
#在成功考虑一条消息之前,有多少个副本必须确认一条消息。值为1(仅等待领导者),以避免在某些领导者失败的情况下丢失数据
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
a1.sinks.k1.kafka.producer.compression.type = snappy

#描述和配置sink k2组件
a1.sinks.k2.type = hdfs
#HDFS路径,端口号是主节点中$HADOOP_HOME/etc/hadoop/core-site.xml文件中的hdfs端口号一样
a1.sinks.k2.hdfs.path = hdfs://bigdata1:9000/user/test/flumebackup/
#配置文件类型,默认是sequence
a1.sinks.k2.hdfs.fileType = DataStream
#保存数据文件的前缀名
a1.sinks.k2.hdfs.filePrefix = events-
#保存数据文件的后缀名
a1.sinks.k2.hdfs.fileSuffix = .log
#hdfs sink间隔多长将临时文件滚动成最终目标文件,设置成0,则表示不根据时间来滚动文件
a1.sinks.k2.hdfs.rollInterval = 0
a1.sinks.k2.hdfs.useLocalTimeStamp=true

# 定义channel类型
#描述和配置channel组件,此处使用时内存缓存的方式
#下面表示的是缓存到内存中,如果是文件,可以使用file的那种类型
a1.channels.c1.type = memory
#表示用多大的空间
a1.channels.c1.capacity = 1000
#下面表示用事务的空间是多大,事务容量要小于总容量
a1.channels.c1.transactionCapacity = 100


#下面表示的是缓存到内存中,如果是文件,可以使用file的那种类型
a1.channels.c2.type = memory
#表示用多大的空间
a1.channels.c2.capacity = 1000
#下面表示用事务的空间是多大,事务容量要小于总容量
a1.channels.c2.transactionCapacity = 100
 
# 把source和sink用channel连接
# 描述和配置source channel sink之间的连接关系,因为source和sink依赖channel来传递数据,所以要分别指定用的是哪个channel。
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2

2. 配置Kafka

三台服务器都配置,其中broker.id、advertised.listeners参数不一样,其它配置都一样

vim server.properties


############################# Server Basics #############################
#修改broker.id,   kafka集群中的每个节点上都要唯一,bigdata1上为broker.id=0
broker.id=0
############################# Socket Sercd $KAFKA_HOME/configer Settings #############################
listeners=PLANTEXT://0.0.0.0:9092
# 配置监听,修改为本机ip或主机名
advertised.listeners=PLAINTEXT://bigdata1:9092

############################# Log Basics #############################
# kafka 运行日志和数据的存放路径
log.dirs=/opt/module/kafka-2.4.1/logs 

# topic 在当前broker上的分片个数,与broker保持一致
num.partitions=3
#zookeeper.connection.timeout.ms=60000
############################# Zookeeper #############################
# 配置三台服务zookeeper连接地址
zookeeper.connect=bigdata1:2181,bigdata2:2181,bigdata3:2181/kafka 

3. 配置Zookeeper

cd $ZOOKEEPER_HOME
#创建zookeeper数据目录
mkdir zkdata 
#创建zookeeper日志目录
mkdir zklog  

$ZOOKEEPER/conf目录下,三台服务器的zoo.cfg配置文件都一样

cd $ZOOKEEPER_HOME/conf
vim zoo.cfg


#修改zookeeper的数据目录路径
dataDir=/opt/module/zookeeper-3.5.7/zkdata

#注释掉 maxClientCnxns=0
#maxClientCnxns=0

#修改zookeeper日志目录
dataLogDir=/opt/module/zookeeper-3.5.7/zklog

#设置连接参数,添加如下配置
#zk的基本时间单元,毫秒
tickTime=200
#Leader-Follower初始通信时限tickTime*10
initLimit=10
#Leader-Follower初始通信时限tickTime*5
syncLimit=5
#客户端连接server的端口,对外服务端口
clientPort=2181

#设置broker Id的服务地址
server.1=bigdata1:2888:3888
server.2=bigdata2:2888:3888
server.3=bigdata3:2888:3888

4. 创建Topic(bigdata1)

cd $KAFKA_HOME
#--topic主题名
#--partitions分区个数
#--replication-factor副本个数
#分区个数大于或等于副本个数,不然会报错
bin/kafka-topics.sh --create --topic order --zookeeper bigdata1:2181,bigdata2:2181,bigdata3:2181/kafka --replication-factor 3 --partitions 4  

5. 启动Flume监听(bigdata1)

首先确保Kafka和Zookeeper正在运行,且Flume配置正确,不然会报错

cd $FLUME_HOME
#conf/flume-kafka-conf.properties为Flume配置文件
bin/flume-ng agent -n a1 -c conf/ -f conf/flume-kafka-conf.properties -Dflume.root.logger=INFO,console

6. 开启消费者(bigdata3)

#在$KAFKA_HOME下运行
bin/kafka-console-consumer.sh --bootstrap-server bigdata1:9092,bigdata2:9092,bigdata3:9092 --topic order --from-beginning

7. 开启socket脚本生成实时数据(bigdata1)

假设实时数据生成器脚本为主节点/data_log目录下的gen_ds_data_to_socket脚本

cd /data_log
sudo chmod 777 gen_ds_data_to_socket
./gen_ds_data_to_socket

8. 查看消费者消费order的前两条数据

#查看前两条消息
#--from-beginning表示从头开始
#--max-messages 2表示限制两条消息
bin/kafka-console-consumer.sh --bootstrap-server bigdata1:9092,bigdata2:9092,bigdata3:9092 --topic order  --from-beginning --max-messages 2

9. 查看备份目录下的第一个文件的前2条数据

cd $HADOOP_HOME
bin/hadoop fs -ls /user/test/flumebackup/
#<filename>为上条命令查看的第一个文件的文件名
bin/hadoop fs -cat /user/test/flumebackup/<filename> | head -n 2

第一条命令将列出备份目录中的所有文件,第二条命令将输出第一个文件的前两条数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值