作者:繁华落尽的星空 | 来源:互联网 | 2023-08-07 01:57
问题:
如题:分布式数据库如何实现 Join?
回答:
纯文字解读下Hive通过Mapreduce在HDFS上做reduce端连接的原理吧!
假设有两个hive数据表,hdfs目录里就显示了两个文件,实际上两张数据表的数据量都很大,远远超过了128m,因此数据表被分成了多个hdfs块,分布在Hadoop集群的不同节点。
这时候,我们要对两张数据表做一个join查询,join字段就是mapreduce过程中的排序主键了。
首先,map会先对所属datanode中两个表所在的数据块进行读取,并按照join键进行排序,并为排序好的记录打上标记(同表同标记)。
其次,map任务开始混洗shuffle,reduce可以是一个,也可以是多个,这就形成了不同map中具有相同join主键值的记录汇聚到一个reduce上。
最后,reduce端先根据join主键排序,然后将不同标记但相同join主键的两组记录集合进行笛卡尔积相连,形成join后的新记录。
因此分布式数据库的join过程一定要注意相同join字段的集合到底大不大,集合越大,join耗时越长,就是因为最后这个笛卡尔积的合并操作太过刚烈。