本文来自 SPARK + AI SUMMIT 2020 北美会议,分享者来自字节跳动的郭俊。Bucket 在 Hive 和 Spark SQL 中普遍使用,用于消除 Join 或者 group-by-aggregate 场景下的 Shuffle 操作。本文主要介绍字节跳动在 Bucket 方面的优化。
本文主要从以下四个方面介绍:
Spark SQL 在字节跳动的应用
什么是分桶
Spark 分桶的限制
字节跳动在分桶方面的优化
下面是 Spark SQL 在字节跳动的应用。
2016年主要是小规模的测试阶段
2017年用于处理 Ad-hoc 工作负载
2018年在生产环境下处理少量的 ETL 管道工作;
2019年在生产环境下全面部署;
2020年成为 DW 领域的主要计算引擎。
什么是分桶
上面例子展示了创建分桶表的方法。主要关键字是 clustered by (xxx) sorted by (xxx) into N buckets
如果我们往分桶表里面插入数据,可以如下使用
INSERT INTO order
SELECT order_id, user_id, product, amount
FROM order_staging
可见,这个和正常表的使用并没有什么区别。
如果我们进行一个 ShuffleHashJoin 的时候,首先需要将表的数据按照 on 的条件进行分区,然后才是进行 Join 操作。
但是如果参与 Join 的表已经实现分桶了&#x