2017-08-04 222 views
1

我正在学习使用“学习火花流媒体”一书的火花流媒体。在本书中,我在关于Dstream,RDD,块/分区的部分中找到以下内容。学习火花流媒体

最后,在此架构掩盖了一个重要的一点是,接收器接口也具有连接到递送的数据段的集合(认为阵列)数据源的选项。例如,这在一些反序列化应用中特别重要。在这种情况下,Receiver不会经历块间隔等待处理将数据分割成分区,而是认为整个集合反映了将数据分割成块,并为集合的每个元素创建一个块。该操作对数据生产者部分要求很高,因为它要求以块间隔与批间隔的比例生产块以可靠地运行(在每批中提供正确数量的块)。但有些人已经发现它可以提供卓越的性能,提供了一个能够快速生成许多可用于序列化的块的实现。

我一直在打我的头,不能简单地理解作者在说什么,虽然我觉得我应该理解它。有人能给我一些指示吗?

回答

1

披露:我是该书的合着者。

我们想要表达的是,自定义接收器API有两种工作模式:一种是生产端一次发送一个消息,另一种是接收器可以一次发送多个消息(批量)。

  • 在one-message-at-time模式下,Spark负责缓冲并将数据收集到块中以供进一步处理。
  • 在批量模式下,缓冲和分组的负担在生产方面,但在某些情况下它可能更有效。

这反映在API中:

def store(dataBuffer: ArrayBuffer[T]): Unit 
    Store an ArrayBuffer of received data as a data block into Spark's memory. 

def store(dataItem: T): Unit 
    Store a single item of received data to Spark's memory. 

我同意你的看法,该段是费解,可能无法传达,因为我们想为明确的消息。我会照顾好它。

感谢您的反馈!

+0

谢谢你,我明白了。但是可以澄清:“这在某些反序列化用途中特别重要”,可以给出例如 – MaatDeamon