Spark Streaming 的玫瑰与刺

  • 时间:
  • 浏览:0

玫瑰之代码复用

在Spark Streaming中,你也会遇到在Spark中常见的大问题,典型如Executor Lost 相关的大问题(shuffle fetch 失败,Task失败重试等)。这随后原因分析分析发生了内存发生问题不可能 数据倾斜的大问题。这类目前你需要考虑如下几只点以期获得处里方案:

Shuffle 之刺

处里土办法 自然是把 fetch.message.max.bytes 设置大些。

这里好歹做了个EOFException。然而,不可能 是兩个多 压缩文件,解压的事先就直接产生错误了,一般而言是 IOException,而完整版都会EOFException了,这这类先也就歇菜了。

通过reader 获取下一条记录的事先,譬如是兩个多 损坏的gzip文件,不可能 就会抛出异常,而这类异常是用户catch不到的,直接让Spark Streaming程序运行挂掉了。

Kafka 之刺

Spark Streaming 能不到很好的控制实时的程度(小时,分钟,秒)。极端情況能不到设置到毫秒。

而在 HadoopRDD类中,对应的实现如下:

亲们目前是重写了相关的代码,每次记录偏移量,不过不到在升级的事先才会读取所许多人记录的偏移量,其他情況完整版都会依然采用checkpoint机制。

不可能 你使用Spark MLlib 做模型训练。恭喜你,首先是其他算法不可能 支持Spark Streaming,譬如k-means 就支持流式数据更新模型。 其次,你不能不到在Spark Streaming中直接将离线计算好的模型load进来,随后对新进来的数据做实时的Predict操作。

觉得其他我消费的完成后 实际的消费数据量和预先估计的量不一致。

Spark Streaming 的UI 上的Executors Tab缺少兩个多 最大的监控,其他我Worker内存GC详情。觉得亲们能不到将哪些信息导入到 第三方监控中,然而终究是不如在 Spark UI上展现更加方便。 为此亲们也将该功能列入研发计划。

不可能 现阶段亲们并没法维护兩个多 Spark的私有版本,其他是通过重写FileInputDStream,NewHadoopRDD 等相关类来修正该大问题。

textFileStream

不可能 你使用Spark Streaming去追数据,从头刚始于消费kafka,而Kafka不可能 三种原因分析分析,老数据快速的被清理掉,也会引发OffsetOutOfRangeException错误。随后使得Spark Streaming程序运行异常的终止。

玫瑰之吞吐和实时的有效控制

玫瑰篇主其他我说Spark Streaming的优势点。

你在日志中都看的信息觉得是这类代码答应出来的:

这主要得益于Spark的设计,以及平台的全面性。你写的流处里的代码能不到很方便的适用于Spark平台上的批处里,交互式处里。不可能 亲们三种完整版都会基于RDD模型的,随后Spark Streaming的设计者也做了比较好的封装和兼容。其他是我不好RDD是个很强大的框,能把各种场景都给框住,这其他我深度抽象和思考后的结果。

处里土办法 是事先记录kafka偏移量和时间的关系(能不到隔几秒记录一次),随后根据时间找到兩个多 较大的偏移量刚始于消费。不可能 你根据目前Kafka新增数据的消费传输传输速率,给smallest获取到的偏移量加在兩个多 较大的值,处里老出Spark Streaming 在fetch的事先数据不发生的情況。

Shuffle (尤其是每个周期数据量很大的情況)是Spark Streaming 不可处里的疼痛,尤其是数据量极大的情況,不可能 Spark Streaming对处里的时间是有限制的。亲们有兩个多 场景,是五分钟兩个多 周期,亲们仅仅是做了兩个多 repartion,耗时就达到2.1分钟(包括到Kafka取数据)。现阶段Spark 的Shuffle实现都需要落磁盘,随后Shuffle Write 和 Shuffle Read 阶段是完整版分开,后者需要等到前者都完成不能刚始于工作。我认为Spark Streaming有必要单独开发兩个多 更慢速,完整版基于内存的Shuffle方案。

Kafka partition 映射 RDD partition 之刺

所许多人认为应该加在其他配置,允许用户能不到选则如保对待这类有损坏不可能 无法解压的文件。

checkpoint 之刺

不可能 消息体太满了,超过 fetch.message.max.bytes=1m,没法Spark Streaming会直接抛出OffsetOutOfRangeException异常,随后停止服务。

觉得使用textFileStream 的人应该其他我少。不可能 能不到很方便的监控HDFS上某个文件夹下的文件,随后进行计算。这里亲们遇到的兩个多 大问题是,不可能 底层比如是压缩文件,遇到有顺坏的文件,你是跳不过去的,直接会让Spark Streaming 异常退出。 官方并没法提供大约的土办法 你都还里能 跳过损坏的文件。以NewHadoopRDD为例,上端有没法几行代码,获取一条新的数据:

玫瑰之概述

内存之刺

对应的错误会从这行代码抛出:

Spark Streaming 能不到很好的和Spark其他组件进行交互,获取其支持。一起去Spark 生态圈的快速发展,亦能从中受益。

checkpoint 是个很好的恢复机制。随后方案比较粗暴,直接通过序列化的机制写入到文件系统,原因分析分析代码变更和配置变更无法生效。实际场景是升级往往比系统崩溃的频率高太满。随后升级需要不能无缝的衔接上一次的偏移量。其他spark streaming在无法容忍数据有丢失的情況下,你需要所许多人记录偏移量,随后从上一次进行恢复。

Kafka的分区数决定了你的并行度(亲们假设你使用Direct Approach的模式集成)。为了获得更大的并行度,则需要进行一次repartition,而repartition 随后原因分析分析需要发生Shuffle,在流式计算里,不可能 会消耗掉亲们宝贵的时间。 为了不能处里Shuffle,随后提高Spark Streaming处里的并行度,亲们重写了 DirectKafkaInputDStream,KafkaRDD,KafkaUtils等类,实现了兩个多 Kafka partition 能不到映射为多个RDD partition的功能。譬如你有M个Kafka partitions,则可映射成  M*N个 RDD partitions。 其中N 为>1 的正整数。

监控之刺

玫瑰之机器学习

亲们期望官方不能实现将兩个多 Kafka的partitions 映射为多个Spark 的partitions,处里发生Shuffle随后原因分析分析多次的数据移动。

说人话:觉得其他我讲Spark Streaming 的好处与坑。好处主要从其他大的方面讲,坑则是从实际场景中遇到的其他小细节描述。

玫瑰之SQL支持

这类和Spark Streaming相关,其他我太相关。说相关是不可能 Spark 对其他异常处里比较简单。其他是和Kafka配置相关的。我举个例子:

刺篇其他我描述Spark Streaming 的其他大问题,做选型前关注哪些大问题能不到有效的降低使用风险。

目前Spark Streaming 能不到应对的场景不少,随后在其他场景上,还是有事先那样的大问题。建议调研后都进一步做测试再做出是是不是迁移到该平台的决定。

Spark Streaming 里碳酸岩就能不到使用 sql/dataframe/datasets 等。随后时间窗口的使用能不到极大扩展这类使用场景,譬如各种系统预警等。这类Storm则需要额外的开发与支持。