Advertisement

Hive中的mapjoin函数用于在多个分区或桶中执行 joins操作

阅读量:

今日对Hive中的mapjoin与bucket mapjoin进行了实验,具体情况如下:

首先建立数据表并生成测试数据,表名为test1,仅包含一个字段id(int类型):

  1. 创建表,并将id字段设置为桶划分依据,桶的数量设定为20个。这意味着在插入数据时,系统将生成20个文件以对应这20个桶。

create table test_mapjoin(id int) clustered by (id) into 20 buckets;

  1. 在导入数据前,设置参数hive.enforce.bucketing为true,确保Hive在插入数据时按照桶划分方式处理。接下来将插入300万条记录:

set hive.enforce.bucketing=true

insert overwrite table test_mapjoin select * from ids limit 3000000;

桶划分是基于id字段进行哈希计算的,相同哈希值的数据会被分配至同一桶中。当使用bucket进行mapjoin操作时,其执行效率较高且内存占用较小。

从日志中可以看到,在该阶段有20个reduce任务参与了生成对应的桶文件:"Hadoop job information for Stage-2: number of mappers: 1; number of reducers: 20

全部评论 (0)

还没有任何评论哟~