hive.filesink.skip.empty.file 参数应用

  其他常见问题
内容纲要

概要描述


hive.filesink.skip.empty.file 参数,用于控制空文件是否被 inceptor 的 FileSink 操作跳过。当设置为 true 时,如果写入文件是空的,FileSink 不会创建这个文件。这有助于避免在 HDFS 中创建不必要的小文件,是 计算端-reduce阶段 减少小文件数量的有效方案。

详细说明


--目标表为5个分桶的orc普通表
DROP TABLE IF EXISTS orc_dest;
CREATE TABLE orc_dest(id INT ,name STRING ) CLUSTERED BY (id) INTO 5 BUCKETS STORED AS ORC;

--源表
DROP TABLE IF EXISTS orc_src;
CREATE TABLE orc_src(id INT ,name STRING ) STORED AS ORC;
INSERT INTO orc_src SELECT 1,'a' FROM system.dual;
INSERT INTO orc_src SELECT 2,'a' FROM system.dual;
INSERT INTO orc_src SELECT 3,'a' FROM system.dual;

参数开启状态下:

--开启参数:
SET hive.filesink.skip.empty.file=true;
INSERT OVERWRITE TABLE orc_dest SELECT * FROM orc_src;

可以看到,目标表hdfs目录下只有3个数据文件生成,每个数据文件都有1条数据。

[root@kv1~]# hdfs dfs -ls hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest
WARNING: log4j.properties is not found. HADOOP_CONF_DIR may be incomplete.
2024-12-05 11:15:06,095 INFO  [main] util.KerberosUtil (KerberosUtil.java:getDefaultPrincipalPattern(67)) - Using principal pattern: HTTP/_HOST
Found 3 items
-rwxr-xr-x   3 hive hbase        273 2024-12-05 11:14 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000001_0
-rwxr-xr-x   3 hive hbase        277 2024-12-05 11:14 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000002_0
-rwxr-xr-x   3 hive hbase        277 2024-12-05 11:14 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000003_0

参数关闭状态下:

--关闭参数:
SET hive.filesink.skip.empty.file=false;
INSERT OVERWRITE TABLE orc_dest SELECT * FROM orc_src;

SHOW CREATE TABLE orc_dest;
dfs -ls   hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest

目标表hdfs目录下有5个数据文件生成,其中000000_0000004_0是没有数据的

[root@kv1~]# hdfs dfs -ls hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest
WARNING: log4j.properties is not found. HADOOP_CONF_DIR may be incomplete.
2024-12-05 11:15:37,654 INFO  [main] util.KerberosUtil (KerberosUtil.java:getDefaultPrincipalPattern(67)) - Using principal pattern: HTTP/_HOST
Found 5 items
-rwxr-xr-x   3 hive hbase         71 2024-12-05 11:15 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000000_0
-rwxr-xr-x   3 hive hbase        273 2024-12-05 11:15 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000001_0
-rwxr-xr-x   3 hive hbase        277 2024-12-05 11:15 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000002_0
-rwxr-xr-x   3 hive hbase        277 2024-12-05 11:15 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000003_0
-rwxr-xr-x   3 hive hbase         71 2024-12-05 11:15 hdfs://nameservice1/quark1/user/hive/warehouse/default.db/hive/orc_dest/000004_0

一些第三方工具,比如 datax 无法识别这种空文件。

通过 orcfiledump 解析也会抛出 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 的错误。

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。