Hive中的mapjoin函数用于在多个分区或桶中执行 joins操作
发布时间
阅读量:
阅读量
今日对Hive中的mapjoin与bucket mapjoin进行了实验,具体情况如下:
首先建立数据表并生成测试数据,表名为test1,仅包含一个字段id(int类型):
- 创建表,并将id字段设置为桶划分依据,桶的数量设定为20个。这意味着在插入数据时,系统将生成20个文件以对应这20个桶。
create table test_mapjoin(id int) clustered by (id) into 20 buckets;
- 在导入数据前,设置参数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)
还没有任何评论哟~
