【发布时间】:2017-11-13 19:56:55
【问题描述】:
当我执行以下查询时,虽然我有 8 个映射器和 0 个减速器,但我只得到一个文件作为输出。
create table table_2 as select * from table_1.
调用了 8 个映射器,并且没有 reducer 阶段。 table_2的位置只有一个文件,不应该有8个文件,因为我们有8个mapper和0个reducer。
【问题讨论】:
当我执行以下查询时,虽然我有 8 个映射器和 0 个减速器,但我只得到一个文件作为输出。
create table table_2 as select * from table_1.
调用了 8 个映射器,并且没有 reducer 阶段。 table_2的位置只有一个文件,不应该有8个文件,因为我们有8个mapper和0个reducer。
【问题讨论】:
来自 Hive 文档,Configuration Properties...
hive.merge.mapfiles
默认值:true
在仅地图作业结束时合并小文件。
hive.merge.tezfiles
默认值:false
在 Tez DAG 末尾合并小文件
hive.merge.smallfiles.avgsize
默认值:16000000
当一个作业的平均输出文件大小 小于此数字,
Hive 将启动额外的 map-reduce 作业 将输出文件合并成更大的文件...
所以,如果 (a) 您的测试数据集非常小并且 (b) 您不使用 TEZ 而是使用普通的旧 MapReduce,那么 Hive 将运行一个帖子-Map 步骤只是为了合并(中间)结果,默认情况下。
而在 Reduce 步骤之后不会发生这种情况,除非您将 hive.merge.mapredfiles 强制为 true。
【讨论】: