Spark Structured Stream执行者奇怪的行为

时间:2018-04-27 14:32:49

标签: apache-spark yarn executors spark-structured-streaming

使用Spark Structured Stream,使用Cloudera解决方案 我使用了3个执行程序但是当我启动应用程序时,使用它的执行程序只有一个。 我如何使用多个执行程序?

让我给你更多的信息。 这是我的参数:

命令启动:

spark2-submit --master yarn \
--deploy-mode cluster \
--conf spark.ui.port=4042 \
--conf spark.eventLog.enabled=false \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.streaming.backpressure.enabled=true \
--conf spark.streaming.kafka.consumer.poll.ms=512 \
--num-executors 3 \
--executor-cores 3 \
--executor-memory 2g \
--jars /data/test/spark-avro_2.11-3.2.0.jar,/data/test/spark-streaming-kafka-0-10_2.11-2.1.0.cloudera1.jar,/data/test/spark-sql-kafka-0-10_2.11-2.1.0.cloudera1.jar \
--class com.test.Hello /data/test/Hello.jar

守则:

val lines = spark
      .readStream
      .format("kafka")
      .option("kafka.bootstrap.servers", <topic_list:9092>)
      .option("subscribe", <topic_name>)
      .option("group.id", <consumer_group_id>)
      .load()
      .select($"value".as[Array[Byte]], $"timestamp")
      .map((c) => { .... })

val query = lines
      .writeStream
      .format("csv")
      .option("path", <outputPath>)
      .option("checkpointLocation", <checkpointLocationPath>)
      .start()
query.awaitTermination()

SparkUI中的结果: SparkUI Image

我期望所有遗嘱执行人都在工作。

有什么建议吗?

谢谢 保罗

1 个答案:

答案 0 :(得分:0)

您的配置看起来没有任何问题,只是您使用的分区可能只是一个。您需要增加kafka生成器中的分区。通常,分区大约是执行程序数量的3-4倍。

如果您不想触及生产者代码,可以在应用map方法之前通过重新分区(3)来解决这个问题,这样每个执行程序都可以使用它自己的逻辑分区。

如果您仍然希望明确提及每个执行者获得的工作,您可以使用mapPerPartion方法。