Zookeeper、Kafka相关习题答案
第1关:第一题
任务描述
本关任务:根据编程要求,完成任务。
编程要求
打开右侧命令行窗口,启动 Zookeeper、Kafka 服务,在 Kafka 中创建一个名称为 test
的主题,分区数和备份数都设置为 1
。
在 test
主题中,创建生产者来发送任意数据进行测试,如下:
Hello World
在 test
主题中,创建消费者获取生成者发送的数据,如下所示:
Zookeeper 安装目录:
/opt/zookeeper
Kafka 安装目录:/opt/kafka
测试说明
本关卡不进行测评,仅供练习使用。
答案:
步骤 1: 启动 Zookeeper 服务
在命令行窗口中执行以下命令:
cd /opt/zookeeper
./bin/zkServer.sh start
步骤 2: 启动 Kafka 服务
在命令行窗口中执行以下命令:
cd /opt/kafka
./bin/kafka-server-start.sh config/server.properties
步骤 3: 创建 Kafka 主题
在命令行窗口中执行以下命令,创建一个名为 “test” 的主题,设置分区数和备份数为 1
kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test --partitions 1 --replication-factor 1
步骤 4: 创建 Kafka 生产者发送数据
在命令行窗口中执行以下命令,创建一个生产者发送 “Hello World” 到 “test” 主题:
kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
在生产者窗口中输入 “Hello World” 并按 Enter。
步骤 5: 创建 Kafka 消费者获取数据
在 新的命令行窗口 中执行以下命令,创建一个消费者从 “test” 主题中获取数据:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
第2关:第二题
任务描述
本关任务:根据编程要求,完成任务。
编程要求
打开右侧命令行窗口,启动 Zookeeper、Kafka 服务,在 Kafka 中创建一个名称为 wordsendertest
的主题,分区数和备份数都设置为 1
。
开始任务前,请先运行环脚本文件,初始化环境:
bash /data/workspace/myshixun/step1/env.sh
在 wordsendertest
主题中,创建生产者来发送数据,发送内容如下:
hello hadoophello spark
Zookeeper 安装目录:
/opt/zookeeper
Kafka 安装目录:/opt/kafka
打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,获取 Kafka 生产者发送过来的数据,进行词频统计(单词间隔符为:一个空格符),输出统计结果,设置每 5
秒获取一次数据,最长等待时间设置为 60
秒。
输出示例如下所示:
+------+-----+| word|count|+------+-----+| hello| 2|| spark| 1||hadoop| 1|+------+-----+
使用 spark-submit
命令对编写好的程序进行提交(程序运行完成后再进行评测),将输出日志保存到 /root/result.txt
文件中。
代码文件路径:
/data/workspace/myshixun/step1/question.py
测试说明
平台将对你的操作结果进行评测,如果与预期结果一致,则通关,否则测试失败。
代码文件
# -*- coding: utf-8 -*-
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, split
################ Begin ################
# 创建 SparkSession
spark = SparkSession.builder \
.appName("WordCount") \
.getOrCreate()
# 读取 Kafka 数据流
lines =spark\
.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers", "localhost:9092") \
.option("subscribe", "wordsendertest") \
.load()
# 将数据流中的 value 字段转换为字符串,并给转换后的 DataFrame 取别名为 "lines"
lines = lines.selectExpr("CAST(value AS STRING) as lines")
# 拆分每行中的单词,并将其扩展为单独的行,别名为 "word"
words = lines.select(
explode(split(lines["lines"], " ")).alias("word")
)
# 按单词进行分组并计数
wordCounts = words.groupBy("word").count()
# 将结果写入控制台
query = wordCounts \
.writeStream \
.outputMode("complete") \
.format("console") \
.start()
# 设置最长等待时间
query.awaitTermination(60)
################ End ################
需三个命令行窗口
命令行窗口1:
初始化环境:
bash /data/workspace/myshixun/step1/env.sh
启动 Zookeeper:
zkServer.sh start
启动 Kafka:
cd /opt/kafka
kafka-server-start.sh config/server.properties
命令行窗口2
创建主题:
kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic wordsendertest
创建生产者:
kafka-console-producer.sh --broker-list localhost:9092 --topic wordsendertest
注:建议完成第三个窗口的命令后再回来发送以下内容,每行一个回车
hello hadoop
hello spark
命令行窗口3
spark-submit /data/workspace/myshixun/step1/question.py > /root/result.txt
如果我的回答帮到了你,可以留下个赞吗谢谢咯!🌟