【问题标题】: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。