【问题标题】:Hive creates empty table, even there're plenty of fileHive创建空表,即使有很多文件
【发布时间】:2015-01-28 11:56:55
【问题描述】:

我将一些文件放入 hdfs (/path/to/directory/),其中包含如下数据;

63  EB44863EA74AA0C5D3ECF3D678A7DF59
62  FABBC9ED9719A5030B2F6A4591EDB180
59  6BF6D40AF15DE2D7E295EAFB9574BBF8

它们都被命名为_user_hive_warehouse_file_name_000XYZ_A。这些文件是从另一个 hdfs 下载的。

我正在尝试通过 Hive 创建外部表;

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; 返回

select count(1) from users; 返回 0

Hive 成功创建表,但它始终为空。如果我放置另一个文件,如 another.txt,其中包含上述示例数据,select count(1) from users; 将返回 3

我错过了什么,为什么桌子是空的?

环境

  • JDK 7
  • Hadoop 2.6.0
  • Hive 0.14.0
  • Ubuntu 14.04

【问题讨论】:

    标签: hadoop hive


    【解决方案1】:

    我认为您遇到的问题在HIVE-6431 中进行了外围讨论。特别是,这条评论很重要:

    默认情况下,hadoop 中的 FileInputFormat(它是各种格式的超类)会忽略以“_”或“.”开头的文件名,在 hive 代码库中很难绕过。

    解决方法可能是避免使用以_. 开头的文件名

    【讨论】:

      【解决方案2】:

      当您在 Hive 上运行任何命令时,它会在您存储文件的 HDFS 路径上作为 MapReduce 作业在内部运行。该作业使用 FileInputFormat 读取 HDFS 文件,该文件具有 hiddenFileFilter 忽略以下划线 ("_") 和 (".") 开头的任何文件。您实际上可以通过将 FileInputFormat.SetInputPathFilter 设置为 CustomPathFilter 来设置要忽略的其他文件。 Hadoop 使用带下划线的文件是“特殊”文件来显示作业输出和日志。这可能就是他们被忽略的原因。

      【讨论】:

        猜你喜欢
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 2020-07-14
        • 2019-02-18
        • 2015-12-29
        • 1970-01-01
        • 2012-11-26
        相关资源
        最近更新 更多