hadoop - Hive:合并配置设置不起作用

标签 hadoop hive hiveql orc hive-configuration

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

INSERT INTO TABLE TableOrc SELECT * FROM Table; ---- (1)

该查询创建包含 6 个 orc 文件的 TableORC 表,这些文件比 256MB 的 block 大小小得多。

-- 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)

这次的结果是一个具有 3 个 ORC 文件的 TableOrc,并且日志显示了 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。它的工作方法非常简单。

关于hadoop - Hive:合并配置设置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291181/

相关文章:

hadoop - 插入Hive Orc分区表时出现运行时异常

java - Camel hdfs2到文件协议(protocol)文件传输

java - org.apache.hive.service.cli.HiveSQLException : java. lang.NoClassDefFoundError:org/apache/hadoop/ipc/CallerContext$Builder

hadoop - Hive:断言/测试两列始终包含相同的值

sql - 转换时间戳的任何更好的方法(HH :mm:ss) to Seconds in Hive

java - Spark SASL 无法使用 yarn 在 emr 上工作

hadoop - 将配置单元分区表加载到Spark Dataframe

apache-spark - Pyspark 中的表格显示来自 CSV 文件的标题

hadoop - MapReduce作业运行时要查找什么?

mysql - 返回每个用户具有的不同值的 Hive 查询