【问题标题】:Learning Spark Streaming学习 Spark Streaming
【发布时间】:2017-08-04 04:24:49
【问题描述】:

我正在使用“学习火花流”一书来学习火花流。在这本书中,我在讨论 Dstream、RDD、块/分区的部分中找到了以下内容。

最后,在此架构中忽略的一个重要点是 Receiver 接口还可以选择连接到提供数据片段集合(想想数组)的数据源。例如,这在某些反序列化用途中尤为重要。在这种情况下,Receiver 不会通过块间隔等待来处理将数据分割成分区,而是认为整个集合反映了数据分割成块,并为集合的每个元素创建一个块。此操作对数据生产者的部分要求很高,因为它要求它以块间隔与批次间隔的比率生产块以可靠地运行(在每个批次上交付正确数量的块)。但有些人发现它可以提供卓越的性能,提供一种能够快速使许多块可用于序列化的实现。

我一直在摸索,不能简单地理解作者在说什么,尽管我觉得我应该理解它。有人可以给我一些指示吗?

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    披露:我是这本书的合著者。

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

    • 在一次一条消息模式下,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.
    

    我同意您的观点,该段落令人费解,可能无法像我们希望的那样清楚地传达信息。我会注意改进它。

    感谢您的反馈!

    【讨论】:

    • 谢谢你,我现在明白了。但是可以澄清什么是:“这在某些反序列化用途中特别相关”你能给出一个例如
    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 2018-01-05
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2017-12-30
    相关资源
    最近更新 更多