apache-spark - 有什么建议可以解决火花流每 10 秒的处理时间峰值吗?
问题描述
我使用火花流运行一个程序来消耗 kafka 数据来进行实时统计。当numPartitions
函数中的参数reduceByKeyAndWindow
没有设置时,处理时间很奇怪。每 10 秒达到峰值。
处理时间图片链接
所有代码如下。虽然当numPartitions
设置为 1 时这种情况可以解决,但也有numPartitions
需要更大的 1 来处理数据的情况。
conf = SparkConf()
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
conf.set('spark.driver.extraJavaOptions', "-Xss30M")
ctx = SparkContext(appName="PythonStreamingIDCount", conf=conf)
ctx.setLogLevel('FATAL')
ctx.setCheckpointDir('./checkpoint')
streaming_ctx = StreamingContext(ctx, 1) # s
broker, topic = "127.0.0.1:9092", ["spark"]
kvs = KafkaUtils.createDirectStream(streaming_ctx, topic, {"metadata.broker.list": broker})
lines = kvs.map(lambda items: items[1])
counts = lines. \
map(lambda ip: (ip, 1)). \
reduceByKeyAndWindow(lambda a, b: a + b, lambda a, b: a - b, 60, 1)
我不知道发生了什么。有谁能够帮我?
解决方案
推荐阅读
- javascript - 即使使用 .on,Ajax 调用也只能工作一次
- rust - 在 Hangman 项目中将字符串与 char 进行比较时出现编译错误
- c++ - c++ 错误检查 fstream open() 命令和一般 stringstream 错误处理
- javascript - python selenium爬取无法定位元素错误
- php - whereNotBetween 给我错误
- android - 如何知道我是否经过特定的纬度和经度
- html - 来自数据库 thymeleaf 的填充表
- c++ - 使用QStringList进行split(" ")时,如何识别最后一个QString?
- javascript - 用户键入后立即发布到服务器
- intellij-idea - 无法在 Intellij 中启动 VisualVM 启动器插件