【问题标题】:AWS SNS SDK not work on spark streamingAWS SNS SDK 不适用于火花流
【发布时间】:2016-04-07 20:52:06
【问题描述】:

我通过火花流应用实时异常检测系统。 在每个流式传输间隔中,如果数据点异常,AWS SNS 会向订阅账户发送电子邮件。 但是 AWS SNS java sdk 不喜欢在火花流中工作。以下是错误信息


ERROR StreamingContext:启动上下文时出错,将其标记为已停止 java.io.NotSerializableException:已启用 DStream 检查点,但具有其功能的 DStream 不可序列化 com.amazonaws.services.sns.AmazonSNSClient 序列化栈: - 对象不可序列化(类:com.amazonaws.services.sns.AmazonSNSClient,值:com.amazonaws.services.sns.AmazonSNSClient@a99e813) - 字段(类:wordCount$$anonfun$main$2,名称:snsClient$1,类型:com.amazonaws.services.sns.AmazonSNSClient 类) - 对象(类 wordCount$$anonfun$main$2, ) - 字段(类:org.apache.spark.streaming.dstream.DStream$$anonfun$foreachRDD$1$$anonfun$apply$mcV$sp$3,名称:cleanF$1,类型:接口scala.Function1) - 对象(类 org.apache.spark.streaming.dstream.DStream$$anonfun$foreachRDD$1$$anonfun$apply$mcV$sp$3, ) - writeObject 数据(类:org.apache.spark.streaming.dstream.DStream) - 对象(类 org.apache.spark.streaming.dstream.ForEachDStream,org.apache.spark.streaming.dstream.ForEachDStream@5b56679b) - writeObject 数据(类:org.apache.spark.streaming.dstream.DStreamCheckpointData) - 对象(类 org.apache.spark.streaming.dstream.DStreamCheckpointData,[ 0 个检查点文件


有没有人有任何想法来解决它.. 或者有其他解决方案可以在 spark 流中发送电子邮件

非常感谢

【问题讨论】:

    标签: apache-spark spark-streaming amazon-sns


    【解决方案1】:

    错误是AmazonSNSClient 实例不可序列化。这可能意味着您已经在转换之外对其进行了实例化,并在转换中使用了它。这将导致 spark 对其进行序列化。

    使用非流式 spark,您可以尝试在 RDD 上的 mapPartitions 函数内实例化您的 AmazonSNSClient,或者对 spark 流式等效。快速浏览流式文档有一个部分可能对您有用,它似乎涵盖了efficiently creating connections to databases、外部系统等类似的领域。

    重点是你需要在worker上实例化你的客户端,而不是驱动程序,然后将它发送给worker(这需要实例是可序列化的)。

    【讨论】:

    • 感谢您的帮助和参考。我的问题就像你说的那样,将 AmazonSNSClient 实例放在转换(foreachRDD)之外,并在里面发布sns。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多