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

spark流中的RDD分区

包翔
2023-03-14

因此,如何跨辅助节点对RDD进行分区,是将被分区的单个RDD还是一个完整的批处理。

我可能拿错了。请指引我

共有1个答案

仉梓
2023-03-14

一个流式批对应一个RDD。RDD将有n个分区,其中n=批处理间隔/块间隔。假设您有标准的200ms块间隔和2秒的批处理间隔,那么您将有10个分区。块由接收器创建,每个接收器在主机中分配。因此,这10个分区位于单个节点中,并被复制到第二个节点。

当RDD提交处理时,运行该任务的主机将从该主机读取数据。在同一节点上执行的任务将具有“node_local”局部性,而在其他节点上执行的任务将具有“any”局部性,并且需要更长的时间。

因此,为了改进并行处理,建议分配多个接收器并使用union创建单个DStream以进行进一步处理。这样,数据将被多个节点并行地消耗和处理。

 类似资料:
  • 在Spark流式传输中,是否可以将特定的RDD分区分配给集群中的特定节点(为了数据局部性?) 例如,我得到一个事件流[a,a,a,b,b],并有一个2节点的Spark集群。 我希望所有的a总是去节点1,所有的b总是去节点2。 谢啦!

  • 我尝试创建一个JavaRDD,其中包含另一系列RDD。 RDD机器。foreach(机器- 第一:有没有可能这样做?如果没有,我可以用什么方式尝试做一些不同的事情? 让我展示一下我尝试做的事情: 我尝试在每台机器上启动我的算法,这台机器必须从Elasticsearch中的数据中学习。 因此,我尝试在每个“机器”中获取查询的所有数据。我的问题是:Spark有可能做到这一点吗?或者以其他方式?当我点燃

  • 我从HDFS中获取数据,并将其存储在Spark RDD中。Spark根据HDFS块的数量创建分区的数量。这会导致大量的空分区,这些分区也会在管道过程中得到处理。为了消除这种开销,我想从RDD中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除。 还有别的办法吗?

  • 在 Pyspark 中,我可以从列表中创建一个 RDD 并决定有多少个分区: 我决定对RDD进行分区的分区数量如何影响性能?这如何取决于我的机器的核心数量?

  • 我有两对结构为rdd[String,Int]的RDD,称为rdd1和rdd2。 如果我加入前面的RDD,并在结果RDD(mapValues)的值上执行一个函数,那么所有的工作都将在一个worker中完成,而不是在集群的不同worker节点上分配不同的任务。我的意思是,期望的行为应该是在集群允许的这么多节点中并行执行作为参数传递给mapValues方法的函数。

  • 主要内容:1.RDD特点:,2.RDD的 5大属性,3.RDD的执行原理,4.Spark的核心组件1.RDD特点: 可变: 存储的弹性 容错的弹性 计算的弹性 分片的弹性 RDD 代码中是一个抽象类, 代表弹性的, 不可变, 可分区, 里面的元素可并行计算的集合, 为弹性分布式数据集。 RDD 不保存数据, 但是有血缘关系。 不可变的是逻辑, 如果想加入新的逻辑, 必须封装。 2.RDD的 5大属性 分区列表 分区计算函数 多个RDD有依赖关系 分区器: 一个分区的规则, 和Kafka 类似