Apache spark 了解spark中的洗牌和重新划分

Apache spark 了解spark中的洗牌和重新划分,apache-spark,bigdata,Apache Spark,Bigdata,如果有人能简单地回答这几个与spark shuffle相关的问题,我将不胜感激 在spark中,加载数据集时,我们指定分区的数量,这说明输入数据(RDD)应划分为多少个块,并根据分区的数量,启动相同数量的任务(如果假设错误,请更正我)。对于工作节点中的X核心数。对应的X一次运行的任务数 按照类似的思路,这里有几个问题。 因为,所有的byKey操作以及合并、重新分区、联接和协同组都会导致数据混乱 数据洗牌是重新分区操作的另一个名称吗 重新分区发生时,初始分区(声明的分区数)会发生什么变化 有人能举

如果有人能简单地回答这几个与spark shuffle相关的问题,我将不胜感激

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

按照类似的思路,这里有几个问题。

因为,所有的byKey操作以及合并、重新分区、联接和协同组都会导致数据混乱

  • 数据洗牌是重新分区操作的另一个名称吗

  • 重新分区发生时,初始分区(声明的分区数)会发生什么变化

  • 有人能举个例子(解释)数据是如何在集群间移动的吗 显示了键的随机箭头移动(但不知道移动是如何驱动的),例如,如果我们已经有10个分区中的数据,则重新分区操作是否首先组合所有数据,然后根据哈希代码%numberofpartitions将特定键发送到特定分区


  • 首先,HDFS块被划分为若干个分区,而不是在块中。这些请求存在于记忆的工作中。这些分区驻留在工作内存中

    Q-数据洗牌是重新分区操作的另一个名称吗

    A-否。通常,重新分区意味着增加现有分区,其中数据被划分为多个分区。因此,每当我们增加分区时,我们实际上是在尝试以代码中设置的新分区数“移动”数据,而不是“洗牌”。当我们在一个分区中移动特定键的数据时,就有点乱序了

    Q-当发生重新分区时,初始分区(声明的分区数)会发生什么变化? A-上面有 另一个底层的东西是rdd。重新分区(n)不会改变rdd的分区数量,这是一种转换,当创建其他rdd时,它会起作用,如 rdd1=rdd.重新分区(n)

    Q-有人能举例说明(解释)数据在集群中的移动是如何发生的。我看到过两个例子,其中显示了键的随机箭头移动(但不知道移动是如何驱动的),例如,如果我们已经有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
    
    O/p: Boolean: true
    
    分区器

    O/p: None(partitioning scheme)
    
    O/p: HashPartitioning@
    
    但是,

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

    rdd.partitions.size

    O/p: Int: 10
    
    rdd.partitioner.isDefined

    O/p: Boolean= false
    
    O/p: Boolean: true
    
    分区器

    O/p: None(partitioning scheme)
    
    O/p: HashPartitioning@
    
    希望这会有帮助