我似乎无法为存储桶加入配置单元找到任何好的用例。
正如我所看到的,当将表A连接到表B时:
在将表B加载到分布式缓存中并且每个映射器处理相应的表B的桶时,桶连接为我们节省了将表A传递给减速器的时间,表A的桶。HIVE - 存储桶加入的用例是什么
但是,表B到分布式缓存中的加载是由单个任务完成的,因此当表变得更大时,这成为瓶颈。
所以,如果表B足够小,不会给一个任务带来负担,它实际上就像做一个常规的地图一样 - 通过一个小的优化加入。
另一方面,如果表B不适合单个映射器有一个整体,读取它到分布式缓存的过程可能需要一段时间。
最后,似乎将表B加载到分布式缓存中的时间可能是值得的,因为我们不需要将表A的桶从映射器传递到reducer,但是这个过程不应该太除非表A真的很大,因为每个映射器都会读取与单个Reducer相对应的单个桶(表由连接键分区),每个Reducer可以获取2个中间输出(每个表对应一个),减速器在与其对应的映射器相同的节点上运行)并合并它们,从这一点起,连接与映射器中的连接相同。
最后,我认为这个问题是什么花费更多:
- 装入一个中等大小的表到分布式缓存由单一任务
- 从路过很多中等(可能大)的大小水桶映射到reducer(大部分是本地)和合并2个文件 - 全部并行完成。
您怎么看?有人可以找到一个很好的用法来桶加入?
你指的是排序合并存储桶连接,因为我在谈论常规存储池连接。 Sort-merge当然有很多很好的用法。 – dimamah