理解随机播放和重新分配火花

时间:2017-01-11 17:36:38

标签: apache-spark bigdata

如果有人能用简化的术语回答这几个与火星洗牌相关的问题,我将不胜感激。

在spark中,当加载数据集时,我们指定指定的分区数,它告诉输入数据(RDD)应分成多少个块,并根据分区数量,相同的任务数量启动(正确,如果假设错误)。对于 X 工作节点中的核心数量。对应 X 一次运行的任务数。

类似地,这里有几个问题。

因为,所有byKey操作以及coalesce,repartition,join和cogroup都会导致数据混乱。

  1. 数据是否会为重新分区操作改变其他名称?

  2. 重新分区发生时,初始分区(声明的分区数)会发生什么。

  3. 有人可以举例说明(解释)整个群集中的数据移动是如何发生的。我已经看到了几个例子 显示了键的随机箭头移动(但不知道如何驱动移动),例如,如果我们已经有10个分区中的数据,则重新分区操作是否首先组合所有数据,然后将特定键发送到特定的基于哈希码%numberofpartitions的分区。

1 个答案:

答案 0 :(得分:0)

首先,HDFS块被分成不在块中的分区数。这些请愿书都存在于记忆中。这些分区驻留在工作程序内存中。

问:数据是否为重新分区操作改变了另一个名称?

A-否。通常,重新分区意味着增加数据分成的现有分区。因此,每当我们增加分区时,我们实际上都试图在代码中设置的新分区数“移动”数据而不是“随机播放”。当我们在一个分区中移动特定键的数据时,稍微改组。

问:重新分区发生时,初始分区(声明的分区数)会发生什么? A-涵盖在上面 还有一个潜在的事情是rdd.repartition(n)不会改变no。在rdd的分区中,它是一个转换,当其他一些rdd被创建时会起作用     rdd1 = rdd.repartition(n)

    Now it will create new rdd1 that have n number of partition.To do this, we can call coalesce function like rdd.coalesce(n) Being an action function, this will change the partitions of rdd itself.
问:有人可以举例说明(解释)整个集群中的数据移动是如何发生的。我已经看到了几个示例,其中显示了键的随机箭头移动(但不知道如何驱动移动),例如,我们已经有10个分区中的数据,重新分区操作是否首先组合所有数据,然后根据哈希码%numberofpartitions将特定密钥发送到特定分区。

Ans-以两种不同的概念进行分区和分区,因此分区是将数据均匀划分为用户设置的分区数,但在分区中,数据根据用户设置的算法在这些分区之间进行混洗HashPartitioning& RangePartitioning。

像rdd = sc.textFile(“../ path”,5)rdd.partitions.size / length

O/p: Int: 5(No.of partitions)

rdd.partitioner.isDefined

O/p: Boolean= false

rdd.partitioner

O/p: None(partitioning scheme)

但是,

rdd = sc.textFile(“../ path”,5).partitionBy(new org.apache.spark.HashPartition(10).cache()

rdd.partitions.size

O/p: Int: 10

rdd.partitioner.isDefined

O/p: Boolean: true

rdd.partitioner

O/p: HashPartitioning@

希望这会有所帮助!!!