Hive:合并配置设置不起作用
Hive: Merging Configuration Settings not working
在 Hive 2.2.0 上,我使用查询
从另一个来源 table 填充大小为 1.34 GB 的兽人 table
INSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1)
查询使用 6 个 orc 文件创建 TableORC table,这些文件比块大小 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
为了可能删除它,按照多个其他 Whosebug 用户的建议使用以下配置,截断 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 文件,LOGS 显示 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 (https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties)
hive.merge.size.per.task
Default Value: 256000000
Added In: Hive 0.4.0
Size of merged files at the end of the job.
您的初始平均文件大小小于 hive.merge.smallfiles.avgsize
,这就是合并任务开始合并它们的原因。
前两个文件合并 65.01 MB + 67.48 MB = 132.49 MB 这比 hive.merge.size.per.task
大,这就是为什么合并任务将停止合并这个结果文件与更多文件的原因。它不会被拆分为恰好128M。方法很简单。
在 Hive 2.2.0 上,我使用查询
从另一个来源 table 填充大小为 1.34 GB 的兽人 tableINSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1)
查询使用 6 个 orc 文件创建 TableORC table,这些文件比块大小 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
为了可能删除它,按照多个其他 Whosebug 用户的建议使用以下配置,截断 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 文件,LOGS 显示 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 (https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties)
hive.merge.size.per.task
Default Value: 256000000
Added In: Hive 0.4.0
Size of merged files at the end of the job.
您的初始平均文件大小小于 hive.merge.smallfiles.avgsize
,这就是合并任务开始合并它们的原因。
前两个文件合并 65.01 MB + 67.48 MB = 132.49 MB 这比 hive.merge.size.per.task
大,这就是为什么合并任务将停止合并这个结果文件与更多文件的原因。它不会被拆分为恰好128M。方法很简单。