【问题标题】:Spark/Spark Streaming in production without HDFS没有 HDFS 的生产环境中的 Spark/Spark Streaming
【发布时间】:2015-08-26 03:54:52
【问题描述】:

我一直在使用 Spark/Spark-Streaming 开发应用程序,但到目前为止一直使用 HDFS 进行文件存储。但是,我已经到了一个阶段,我正在探索是否可以在没有 HDFS 的情况下完成(在生产中,24/7 运行)。我尝试过筛选 Spark 用户组,但到目前为止还没有找到任何具体的答案。请注意,我确实使用 updateStateByKey 使用检查点和有状态流处理。

【问题讨论】:

    标签: scala apache-spark hdfs spark-streaming


    【解决方案1】:

    根据流媒体(我一直在使用 Kafka),您不需要使用检查点等。

    自 spark 1.3 以来,他们实施了一种具有很多好处的直接方法。

    简化并行:无需创建多个输入 Kafka 流 并联合他们。使用 directStream,Spark Streaming 将创建为 许多 RDD 分区,因为有 Kafka 分区要消耗,这 将全部从 Kafka 并行读取数据。所以有一对一 Kafka和RDD分区之间的映射,更容易实现 理解和调整。

    效率:在第一种方法中实现零数据丢失 要存储在预写日志中的数据,该日志进一步复制 数据。这实际上是低效的,因为数据有效地得到 复制了两次——一次由 Kafka,第二次由 Write Ahead 日志。第二种方法消除了这个问题,因为没有 接收器,因此不需要预写日志。

    Exactly-once 语义:第一种方法使用 Kafka 的高级 API 在 Zookeeper 中存储消耗的偏移量。这是传统的方式 消费来自 Kafka 的数据。虽然这种方法(结合 预写日志)可以确保零数据丢失(即至少一次 语义),一些记录可能被消耗掉的可能性很小 在一些失败的情况下两次。出现这种情况是因为不一致 在 Spark Streaming 可靠接收的数据和跟踪的偏移之间 由动物园管理员。因此,在第二种方法中,我们使用简单的 Kafka API 不使用 Zookeeper 和仅由 Spark 跟踪的偏移量 在其检查点内流式传输。这消除了不一致 在 Spark Streaming 和 Zookeeper/Kafka 之间,所以每条记录都是 尽管失败,但 Spark Streaming 仅有效接收一次。

    如果您使用的是 Kafka,可以在此处了解更多信息: https://spark.apache.org/docs/1.3.0/streaming-kafka-integration.html

    方法 2。

    【讨论】:

      猜你喜欢
      • 2015-12-18
      • 1970-01-01
      • 2018-11-15
      • 2018-01-21
      • 2018-12-18
      • 2014-06-05
      • 1970-01-01
      • 2020-03-19
      • 2023-04-09
      相关资源
      最近更新 更多