Kafka和Spark Streaming性能问题

时间:2016-02-12 10:11:06

标签: apache-spark apache-kafka pyspark yarn ambari

我的目标是运行Spark Streaming实例集群,使用一些简单的算法处理数据。例如,首先是

def updateFunction(newValues, runningCount):
    if runningCount is None:
        runningCount = 0
    return sum(newValues, runningCount)

# Produces two tuples from each one, and sums its values. Then orders the result.
digest = ks.flatMap(producePerAorB)\
           .updateStateByKey(updateFunction)\
           .transform(lambda rdd: rdd.sortBy(lambda x: x[1], ascending=False))

将Kafka插入Spark群集时,我遇到了很多性能问题。

我的设置说明:

  • 我正在使用6个强大的AWS m4.xlarge集群,所以硬件应该不是问题
  • Kafka话题中的24个分区。尝试1,6,12和48,似乎是最好的。只需将文件传递给console-producer即可生成数据。
  • YARN作为主人。调整到每个可能的设置:更大和更少的容器,更小和更多。
  • Pyspark。 Spark 1.5.2。一切都与Ambari建立。
  • 我尝试使用Direct Streaming和Receiver。第一个应该更容易调整,但事实证明它完全忽略了并行性,与文档所说的相反。现在采用接收器方法似乎表现更好。但是,几分钟后,我开始获得大量的 YarnHistoryService:丢弃事件消息,这可能意味着我正在丢失数据。在互联网上没有太多关于它的信息,我已经转向Spark的代码试图破译它。显然是YARN的监控服务,但它看起来不正确,它们开始堆积,数据不能很好地刷新,所以它可能是错误的。
  • 我正在使用Spark / Kafka的这些设置: --conf spark.streaming.backpressure.enabled = true \ --conf spark.streaming.kafka.maxRate = 5000 \ 他们似乎什么也没做。
  • 我尝试了各种代码和最简单的操作,但仍然会遇到相同的错误。

观察性能,特别是那些错误,我想我做的事情非常糟糕。在推测出错误的情节后,我有点想法了。我希望Spark和Kafka更容易设置!

任何指针都将不胜感激 谢谢

0 个答案:

没有答案