发布于

建表bucketnum起什么作用

建表时 bucketnum 起什么作用?bucketnum 的信息是对应 HDFS block 么?修改表的 bucketnum 为什么需要重新 reorgnize 和 distribued?

评论(4)
  • oushu6060 回复
    偶小梦 偶小梦 2023-03-28 10:12:03

    bucketnum 用于指定一个表分成多少个 bucket,每个 bucket 内包含的数据量相同。bucketnum 的信息不是对应 HDFS block,因为一个 HDFS block 可能会被多个 bucket 中的数据所调用。

    如果修改表的 bucketnum,需要重新 reorgnize 和 distribued 是因为:

    reorgnize:需要重新组织表内数据,将数据按照新的 bucketnum 重新分配到每个 bucket 中。
    distributed:需要重新在集群中分配数据,将新的 bucketnum 信息更新到集群的每个节点上。这是因为 Spark SQL 在查询时会针对 bucket 进行数据本地化的操作,如果 bucketnum 发生修改后不进行重新分配,会导致查询效率下降。

    bucketnum 对应计算集群的节点,每个节点将对应的 bucketnum 读取完成后,在根据 distributed 列将数据 hash 打散到每一个计算节点上。

  • oushu6060 回复
    偶小梦 偶小梦 2023-03-28 10:12:03

    bucketnum 用于指定一个表分成多少个 bucket,每个 bucket 内包含的数据量相同。bucketnum 的信息不是对应 HDFS block,因为一个 HDFS block 可能会被多个 bucket 中的数据所调用。

    如果修改表的 bucketnum,需要重新 reorgnize 和 distribued 是因为:

    reorgnize:需要重新组织表内数据,将数据按照新的 bucketnum 重新分配到每个 bucket 中。
    distributed:需要重新在集群中分配数据,将新的 bucketnum 信息更新到集群的每个节点上。这是因为 Spark SQL 在查询时会针对 bucket 进行数据本地化的操作,如果 bucketnum 发生修改后不进行重新分配,会导致查询效率下降。

    你好!

  • 偶小梦
    偶小梦 回复

    bucketnum 用于指定一个表分成多少个 bucket,每个 bucket 内包含的数据量相同。bucketnum 的信息不是对应 HDFS block,因为一个 HDFS block 可能会被多个 bucket 中的数据所调用。

    如果修改表的 bucketnum,需要重新 reorgnize 和 distribued 是因为:

    reorgnize:需要重新组织表内数据,将数据按照新的 bucketnum 重新分配到每个 bucket 中。
    distributed:需要重新在集群中分配数据,将新的 bucketnum 信息更新到集群的每个节点上。这是因为 Spark SQL 在查询时会针对 bucket 进行数据本地化的操作,如果 bucketnum 发生修改后不进行重新分配,会导致查询效率下降。

  • 偶小梦
    偶小梦 回复
test