当前位置: 首页 > 知识库问答 >
问题:

为什么spark流示例中的StatefulNetworkWordCount需要HashPartioner?

濮阳靖
2023-03-14

我的问题是关于StatefulNetworkWordCount的例子:

https://github.com/apache/spark/blob/master/examples/src/main/scala/org/apache/spark/examples/streaming/StatefulNetworkWordCount.scala

Q1)stateDstream RDD由驱动程序或工作节点维护,还是每个工作节点都有自己的完整状态rdd的本地副本?

Q2)为什么我们在下面的代码中需要一个HashPartitioner:

val stateDstream=wordDstream。updateStateByKey[Int](newUpdateFunc,新HashPartitioner(ssc.sparkContext.defaultParallelism),true,initialRDD)

这里的幕后发生了什么?

共有1个答案

爱琪
2023-03-14

要回答您的两个问题:

1)由< code>DStream生产的< code>RDD被分配给工人。与非流式相似,这意味着由< code>DStream生成的每个< code>RDD的记录分布在整个集群中(这就是分区在这里很重要的原因)。

2)在这种情况下,分区很重要,因为它确定了每次RDD迭代的记录是如何拆分的。尤其是像updateStateByKey()这样的转换,您倾向于看到RDD在不同批处理间隔中的键保持不变。所以这里不用说,如果我们来自每个间隔RDD的键排列在相同的分区中,这个函数可以更有效地工作,并且可以更新分区中键的状态。

例如,让我们看一下您链接的字数统计程序。让我们考虑两个一秒间隔的RDDrdd1在t= 1和rdd2在t = 2)。假设生成的rdd1用于文本“你好世界”而生成的rdd2也看到文本“你好,我是世界”。如果不进行分区,每个RDD的记录可以发送到各个工作线程上的各种分区(t=1处的“hello”和t=2处的“hello”可以发送到不同的位置)。这意味着对计数状态的更新需要在每次迭代时重新排列记录以获取更新的计数。定义分区程序后(并记住其中一个参数所指示的!),我们将在同一分区上看到键“hello”和“world”,从而避免洗牌,并创建更有效的更新。

这里还必须注意,由于键可以更改,因此有一个参数可以切换是否记住分区程序。

 类似资料:
  • 问题内容: 试图弄清楚React的基础知识。 查看此页面上的第二个示例:https : //facebook.github.io/react/ 我看到tick()函数设置Timer类的状态,将前一个值加1。 但是,当我尝试实现自己的简单Counter类时,它失败了,并且出现控制台错误,提示 无法读取未定义的setState属性。 一些谷歌搜索显示我必须将其绑定到增量函数。但是,为什么在我看到的第一

  • null 它可能输出-21、3或其他一些值,因为累加器函数违反了关联属性。 标识要求的示例: 这本书是怎么说的:

  • 互联网是超文本标记语言(HTML)页面的集合,它们彼此链接以形成概念性信息网络。随着时间的推移,静态资源数量增加,图像等更丰富的项目开始成为Web结构的一部分。 高级服务器技术允许动态服务器页面 - 其内容基于查询生成的页面。 很快,需要拥有更多动态网页才能获得动态超文本标记语言(DHTML)。一切都归功于JavaScript。在接下来的几年中,我们看到了跨帧通信,试图避免页面重新加载,然后在帧内

  • 当前信息时代,哪里都是应用程序。这些应用程序们不仅仅是运行人们工作场所的工具 - 它们现在正在经营人们的生活。 对即时响应的需求,完美的行为和更多的功能是前所未有的。 而且,当然,人们期望应用程序在不同类型的设备上运行平稳,特别是在移动设备上。 应用程序执行的速度与它所做的一样重要。 NGINX的核心功能,例如其具有高性能HTTP和反向代理服务器的大规模可扩展事件驱动架构,访问和带宽控制以及与各种

  • 开发人员和运营工程师是两个不同的组织团队,如果发现这两个团队在错误的轨道上协作,则表明需要DevOps。以下是两个团队经常出现的一些问题: 在DevOps之前,开发和运营团队完全孤立。 测试和部署是在设计构建之后完成的独立活动。因此,他们比实际构建周期消耗更多时间。 在不使用DevOps的情况下,团队成员将大量时间花在测试,部署和设计上,而不是构建项目。 手动代码部署会导致生产中出现人为错误 编码

  • 问题内容: 我正在尝试构建一个简单的React应用程序,并且想知道为什么我需要browser.min.js文件。 我已经包含了react和react-dom.js,但是除非未包含browser.min.js,否则什么也不会显示。 问题答案: 正如您在代码段中看到的那样,script标记的类型为“ text / babel”,这是因为您正在其中使用JSX(带有XML的Javascript)进行编码。