Hadoop 配置单元:合并配置设置不起作用

Hadoop 配置单元:合并配置设置不起作用,hadoop,hive,hiveql,orc,hive-configuration,Hadoop,Hive,Hiveql,Orc,Hive Configuration,在Hive2.2.0上,我使用查询从另一个大小为1.34GB的源表填充orc表 INSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1) 查询将创建包含6个orc文件的TableORC表,这些文件比块大小256MB小得多 -- FolderList1 -rwxr-xr-x user1 supergroup 65.01 MB 1/1/2016, 10:14:21 AM 1 256 MB 000000_0 -rwxr-

在Hive2.2.0上,我使用查询从另一个大小为1.34GB的源表填充orc表

INSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1)
查询将创建包含6个orc文件的TableORC表,这些文件比块大小256MB小得多

-- FolderList1
-rwxr-xr-x  user1   supergroup  65.01 MB    1/1/2016, 10:14:21 AM   1   256 MB  000000_0
-rwxr-xr-x  user1   supergroup  67.48 MB    1/1/2016, 10:14:55 AM   1   256 MB  000001_0
-rwxr-xr-x  user1   supergroup  66.3 MB     1/1/2016, 10:15:18 AM   1   256 MB  000002_0
-rwxr-xr-x  user1   supergroup  63.83 MB    1/1/2016, 10:15:41 AM   1   256 MB  000003_0
-rwxr-xr-x  user1   supergroup  69.11 MB    1/1/2016, 10:15:57 AM   1   256 MB  000004_0
-rwxr-xr-x  user1   supergroup  23.83 MB    1/1/2016, 10:16:02 AM   1   256 MB  000005_0
为了潜在地消除这种情况,下面的配置将按照多个其他stackoverflow用户的建议使用,TableORC将被截断,并再次执行查询(1)

SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=128000000; -- (128MB)
SET hive.merge.smallfiles.avgsize=128000000; -- (128MB)
这一次的结果是一个TableOrc有3个ORC文件,日志显示3个额外的MR作业

-- FolderList2
 -rwxr-xr-x user1   supergroup  132.49 MB   1/1/2016, 11:47:01 PM   1   256 MB  000000_0
 -rwxr-xr-x user1   supergroup  130.12 MB   1/1/2016, 11:47:02 PM   1   256 MB  000001_0
 -rwxr-xr-x user1   supergroup  92.93 MB    1/1/2016, 11:47:03 PM   1   256 MB  000002_0
我的问题是,当配置设置设置为使用128MB()时,为什么ORC文件大小大于128MB


您的初始平均文件大小小于
hive.merge.smallfiles.avgsize
,这就是合并任务开始合并它们的原因。 前两个文件合并了65.01 MB+67.48 MB=132.49 MB这比
hive.merge.size.per.task
大,这就是合并任务将停止以将此结果文件与更多文件合并的原因。它不会被拆分为正好128M。它工作的方法很简单

hive.merge.size.per.task
Default Value: 256000000
Added In: Hive 0.4.0
Size of merged files at the end of the job.