Как просмотреть логический и физический план приложения Spark Streaming? - PullRequest
0 голосов
/ 30 сентября 2019

Я ищу способ напечатать план выполнения потокового приложения в Spark. Я знаю, что можно напечатать план приложения SQL Spark . Однако я хочу показать логический и физический план потокового приложения. Вот мое приложение:

package org.sense.spark.app

import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.{HashPartitioner, SparkConf}

object TestStreamCombineByKey {
  def main(args: Array[String]): Unit = {

    // Create a local StreamingContext with two working thread and batch interval of 1 second.
    // The master requires 2 cores to prevent from a starvation scenario.
    val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
    val ssc = new StreamingContext(conf, Seconds(5))

    // Create a DStream that will connect to hostname:port, like localhost:9999
    val lines = ssc.socketTextStream("localhost", 9999)

    // Split each line into words
    val words = lines.flatMap(_.split(" "))

    // Count each word in each batch
    val pairs = words.map(word => (word, 1))
    // val wordCounts = pairs.reduceByKey(_ + _)
    val wordCounts = pairs.combineByKey(
      (v) => (v, 1), //createCombiner
      (acc: (Int, Int), v) => (acc._1 + v, acc._2 + 1), //mergeValue
      (acc1: (Int, Int), acc2: (Int, Int)) => (acc1._1 + acc2._1, acc1._2 + acc2._2), // mergeCombiners
      new HashPartitioner(3)
    )

    // Print the first ten elements of each RDD generated in this DStream to the console
    wordCounts.print()

    ssc.start() // Start the computation
    ssc.awaitTermination() // Wait for the computation to terminate
  }
}

1 Ответ

1 голос
/ 30 сентября 2019

Используйте пользовательский интерфейс (с сервера истории), чтобы получить немного иную перспективу.

То, что вы запрашиваете здесь, невозможно. Почему? Вы используете dStream с "RDDs". Логические и физические планы применимы только к наборам данных и наборам данных.

Вам нужно будет использовать debugToString, использовать оболочку-искру и вставить ее в правильное место кода. Тем не менее, dStreams нуждаются в компиляции и не могут просто запускаться в оболочке spark, насколько я помню, поэтому я вставил бы соответствующий код, отличный от dStream, из этого только в оболочку spark.

Кроме того, этовсе устарело, мой совет - инвестировать в Spark Structured Streaming.

...