Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Kafka-Spark流媒体集成:数据流和任务重用_Apache Spark_Apache Kafka_Spark Streaming_Spark Streaming Kafka_Dstream - Fatal编程技术网

Apache spark Kafka-Spark流媒体集成:数据流和任务重用

Apache spark Kafka-Spark流媒体集成:数据流和任务重用,apache-spark,apache-kafka,spark-streaming,spark-streaming-kafka,dstream,Apache Spark,Apache Kafka,Spark Streaming,Spark Streaming Kafka,Dstream,我试图理解Spark流(非结构化流)的内部结构,特别是任务看到数据流的方式。我正在复习scala中Spark的源代码。我了解调用堆栈: ExecutorCoarseGrainedBackend (main) -> Executor (launchtask) -> TaskRunner (Runnable).run() -> task.run(...) 我知道DStream实际上是rdd的hashmap,但我试图理解任务看到DStream的方式。我知道卡夫卡星火融合基本上有两

我试图理解Spark流(非结构化流)的内部结构,特别是任务看到数据流的方式。我正在复习scala中Spark的源代码。我了解调用堆栈:

ExecutorCoarseGrainedBackend (main) -> Executor (launchtask) -> TaskRunner (Runnable).run() -> task.run(...) 
我知道DStream实际上是rdd的hashmap,但我试图理解任务看到DStream的方式。我知道卡夫卡星火融合基本上有两种方法:

  • 基于接收器,使用高级卡夫卡消费API

    在这里,接收方任务以每一个批间隔(比如5秒)创建一个新的(微)批,其中包含5个分区(=>1秒的块间隔),并将其交给下游的常规任务

    问题:考虑我们的例子,每个微博客每5秒创建一次;有5个分区,所有微批次的所有这些分区都应该以完全相同的方式向下游DAG,相同的常规任务是否作为长时间运行的任务重复使用每个微批次(RDD)的相同分区id?e、 g

    如果T0时分区(P1、P2、P3、P4、P5)的ubatch1分配给任务ID(T1、T2、T3、T4、T5),那么T5时分区(P1',P2',P3',P4',P5')的ubatch2是否也分配给同一组任务(T1、T2、T3、T4、T5),或者是否为ubatch2创建新任务(T6、T7、T8、T9、T10)

    如果是后一种情况,那么当您已经知道有任务在做完全相同的事情并且可以作为长时间运行的任务重复使用时,每5秒通过网络向执行者发送一次新任务不是性能密集型任务吗

  • 直接使用低级卡夫卡消费API

    这里,Kafka分区映射到Spark分区,因此是一个任务。同样,考虑主题t的5个Kafka分区,我们得到5个Spark分区及其相应的任务

    问题:比如说,T0处的ubatch1具有分配给任务(T1、T2、T3、T4、T5)的分区(P1、P2、P3、P4、P5)。在时间T5,分区(P1',P2',P3',P4',P5')的ubatch2是否也分配给同一组任务(T1,T2,T3,T4,T5),或者是否为ubatch2创建新任务(T6,T7,T8,T9,T10)


在浏览了Apache Spark的源代码之后,以下是明确的答案:

这是一个非常直观的方法

  • 我们使用SparkContext中的SparkStreamingContext(ssc)以数据流DAG的形式在流上创建和保存转换序列,该数据流以ForEachDStream数据流结尾,其中每个数据流都是RDD的容器,即Hashmap
  • 前驱数据流与ssc的数据流图一起登记
  • 在ssc.start(-ing)执行时,JobScheduler将保存的计划放在事件循环上,该循环执行每个ubatch间隔秒,为每个数据流和当时的每个数据流创建/提取RDD,并将其保存在corr.DStream的HashMap中,保留一段时间(例如,用于窗口化)
  • 在这个过程中,创建RDD DAG,以ForEachDStream中指定的操作结束,然后将新作业提交给DAG调度程序
    此循环每间隔秒重复一次。

    在浏览Apache Spark的源代码之后,下面是最终答案:

    这是一个非常直观的方法

  • 我们使用SparkContext中的SparkStreamingContext(ssc)以数据流DAG的形式在流上创建和保存转换序列,该数据流以ForEachDStream数据流结尾,其中每个数据流都是RDD的容器,即Hashmap
  • 前驱数据流与ssc的数据流图一起登记
  • 在ssc.start(-ing)执行时,JobScheduler将保存的计划放在事件循环上,该循环执行每个ubatch间隔秒,为每个数据流和当时的每个数据流创建/提取RDD,并将其保存在corr.DStream的HashMap中,保留一段时间(例如,用于窗口化)
  • 在这个过程中,创建RDD DAG,以ForEachDStream中指定的操作结束,然后将新作业提交给DAG调度程序
    这个循环每隔一秒重复一次。

    我同意这一点。我试图深入了解这一点,以便能够自下而上地理解整个画面。我想自己写一本。。过于简单的一个。。它将帮助我理解很多方面,非常高贵,有点像我自己,但也有结构化的流媒体,它并没有完全让生活变得容易。一天只有这么多小时!有人能帮我理解吗?在这方面,从接收端转向基于直接的方法,甚至转向结构化流媒体都没有问题。我只是想了解每一种方法的内在细节,以便更好地理解进化的时间线、存在的问题和采取的方法。我同意这一点。我试图深入了解这一点,以便能够自下而上地理解整个画面。我想自己写一本。。过于简单的一个。。它将帮助我理解很多方面,非常高贵,有点像我自己,但也有结构化的流媒体,它并没有完全让生活变得容易。一天只有这么多小时!有人能帮我理解吗?在这方面,从接收端转向基于直接的方法,甚至转向结构化流媒体都没有问题。我只是想了解每一个的内部细节,以便更好地理解进化的时间线、存在的问题和采取的方法。