没有HDFS的生产中的Spark / Spark Streaming

时间:2015-06-10 18:09:45

标签: scala apache-spark hdfs spark-streaming

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

1 个答案:

答案 0 :(得分:1)

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

自从火花1.3以来,他们已经实施了直接的方法,并带来了很多好处。

  

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

     

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

     

恰好一次语义:第一种方法使用Kafka的高级API   在Zookeeper中存储消耗的偏移量。这是传统的方式   使用Kafka的数据。虽然这种方法(与...结合)   写入日志)可以确保零数据丢失(即至少一次   语义),一些记录可能被消耗的可能性很小   一些失败后两次。这是因为不一致而发生的   在Spark Streaming可靠接收的数据和跟踪的偏移之间   由Zookeeper。因此,在第二种方法中,我们使用简单的Kafka API   不使用Zookeeper和仅由Spark跟踪的偏移量   在其检查点内流式传输。这消除了不一致性   在Spark Streaming和Zookeeper / Kafka之间,所以每个记录都是   尽管失败,Spark Streaming有效地接收了一次。

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

方法2。