Hive 创建空 table,即使文件很多
Hive creates empty table, even there're plenty of file
我将一些文件放入 hdfs (/path/to/directory/
) 中,其中包含如下数据;
63 EB44863EA74AA0C5D3ECF3D678A7DF59
62 FABBC9ED9719A5030B2F6A4591EDB180
59 6BF6D40AF15DE2D7E295EAFB9574BBF8
他们都被命名为_user_hive_warehouse_file_name_000XYZ_A
。这些文件是从另一个 hdfs 下载的。
我正在尝试通过 Hive 创建外部 table;
CREATE EXTERNAL TABLE users(
id int,
user string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/path/to/directory/';
它说;
OK
Time taken: 0.098 seconds
select * from users;
returns 空.
select count(1) from users;
returns 0.
Hive 成功创建了 table,但它始终为空。如果我放置另一个文件,如 another.txt,其中包含上述示例数据,select count(1) from users;
returns 3.
我错过了什么,为什么 table 是空的?
环境:
- JDK 7
- Hadoop 2.6.0
- 蜂巢 0.14.0
- Ubuntu 14.04
我认为您遇到了 HIVE-6431 中外围讨论的问题。特别是,这条评论很重要:
By default, FileInputFormat(which is the super class of various formats) in hadoop ignores file name starts with "_" or ".", and hard to walk around this in hive codebase.
解决方法可能是避免使用以 _
或 .
开头的文件名
当您在 Hive 上 运行 任何命令时,它在内部作为您存储文件的 HDFS 路径上的 MapReduce 作业 运行。该作业使用 FileInputFormat 读取具有 hiddenFileFilter 的 HDFS 文件,它会忽略任何以下划线 (“_”) 和 (“.”) 开头的文件。您实际上可以通过将 FileInputFormat.SetInputPathFilter 设置为 CustomPathFilter 来设置要忽略的其他文件。 Hadoop 使用带下划线的文件是 "special" 文件来显示作业输出和日志。这可能就是它们被忽略的原因。
我将一些文件放入 hdfs (/path/to/directory/
) 中,其中包含如下数据;
63 EB44863EA74AA0C5D3ECF3D678A7DF59
62 FABBC9ED9719A5030B2F6A4591EDB180
59 6BF6D40AF15DE2D7E295EAFB9574BBF8
他们都被命名为_user_hive_warehouse_file_name_000XYZ_A
。这些文件是从另一个 hdfs 下载的。
我正在尝试通过 Hive 创建外部 table;
CREATE EXTERNAL TABLE users(
id int,
user string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/path/to/directory/';
它说;
OK
Time taken: 0.098 seconds
select * from users;
returns 空.
select count(1) from users;
returns 0.
Hive 成功创建了 table,但它始终为空。如果我放置另一个文件,如 another.txt,其中包含上述示例数据,select count(1) from users;
returns 3.
我错过了什么,为什么 table 是空的?
环境:
- JDK 7
- Hadoop 2.6.0
- 蜂巢 0.14.0
- Ubuntu 14.04
我认为您遇到了 HIVE-6431 中外围讨论的问题。特别是,这条评论很重要:
By default, FileInputFormat(which is the super class of various formats) in hadoop ignores file name starts with "_" or ".", and hard to walk around this in hive codebase.
解决方法可能是避免使用以 _
或 .
当您在 Hive 上 运行 任何命令时,它在内部作为您存储文件的 HDFS 路径上的 MapReduce 作业 运行。该作业使用 FileInputFormat 读取具有 hiddenFileFilter 的 HDFS 文件,它会忽略任何以下划线 (“_”) 和 (“.”) 开头的文件。您实际上可以通过将 FileInputFormat.SetInputPathFilter 设置为 CustomPathFilter 来设置要忽略的其他文件。 Hadoop 使用带下划线的文件是 "special" 文件来显示作业输出和日志。这可能就是它们被忽略的原因。