为什么RandomForestClassificationModel广播为火花流中的每个迷你批次执行

时间:2018-04-19 16:15:38

标签: spark-streaming apache-spark-mllib random-forest

设定:

  1. 离线训练随机森林模型并存储在文件系统中。

  2. 使用Pipeline.load在Spark-streaming应用程序启动时加载一次此模型。

  3. 为每个批次调用预测函数(model.transform(input_data_frame))

  4. 观察:从Spark-UI我们可以看到,这个阶段的每个任务都花费大部分时间(超过95%)进行任务反序列化。我们的假设是每个任务都是对最初加载的模型进行反序列化,因此我们尝试广播模型(广播变量在以反序列化形式缓存数据时非常有用,但仍显示高任务反序列化时间。

    Spark独立集群详细信息:spark版本:2.2.1 Executor core = 4 Executor Memory = 4 GB Total Executors = 24 #

    型号尺寸45MB

    spark kafka流媒体作业jar大小8 MB

    1)为什么这两个步骤之间存在延迟?这些步骤之间发生了什么?

    附件是spark kafka流日志

    18/04/15 03:21:23 INFO KafkaSource:GetBatch生成偏移范围的RDD:KafkaSourceRDDOffsetRange(Kafka_input_topic-0,242,242,Some(executor_xx.xxx.xx.110_2)),KafkaSourceRDDOffsetRange(Kafka_input_topic-1,239,239,Some(executor_xx) .xxx.xx.107_0)),KafkaSourceRDDOffsetRange(Kafka_input_topic-2241241,一些(executor_xx.xxx.xx.102_3)),KafkaSourceRDDOffsetRange(Kafka_input_topic-3238239,一些(executor_xx.xxx.xx.138_4)),KafkaSourceRDDOffsetRange(Kafka_input_topic-4240240 ,Some(executor_xx.xxx.xx.137_1)),KafkaSourceRDDOffsetRange(Kafka_input_topic-5,242,242,Some(executor_xx.xxx.xx.111_5))18/04/15 03:21:24 INFO SparkContext:开始工作:从App开始。的java:106

    2)为什么要为每个小批量的执行者激发广泛的铸造模型?

    18/04/15 03:21:31 INFO BlockManagerInfo:在xx.xxx.xx.137的内存中添加了broadcast_92_piece0:44682(大小:62.6 MB,免费:1942.0 MB)##

0 个答案:

没有答案