S3文件夹中的零长度文件可能会阻止使用Hive访问该文件夹?

时间:2015-02-28 17:59:16

标签: hadoop amazon-s3 hive hdfs

我无法使用Hive访问AWS S3上的文件夹,可能是该目录中的零长度文件是原因。 AWS管理控制台的文件夹是一个零字节对象,其键以斜杠结尾,即" folder_name /"。我认为Hive或Hadoop可能在如何定义S3上的文件夹方案方面存在错误。

这就是我所做的。

    CREATE EXTERNAL TABLE is_data_original (user_id STRING, action_name STRING, timestamp STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  STORED AS TEXTFILE LOCATION 's3n://bucketname/logs/';

    SELECT * FROM is_data_original LIMIT 10;

异常java.io.IOException失败:java.lang.NullPointerException

username@client:~$ hadoop fs -ls s3n://bucketname/logs/
Found 4 items
-rwxrwxrwx   1          0 2015-01-22 20:30 /logs/data
-rwxrwxrwx   1       8947 2015-02-27 18:57 /logs/data_2015-02-13.csv
-rwxrwxrwx   1       7912 2015-02-27 18:57 /logs/data_2015-02-14.csv
-rwxrwxrwx   1      16786 2015-02-27 18:57 /logs/data_2015-02-15.csv

hadoop fs -mkdir s3n://bucketname/copylogs/
hadoop fs -cp s3n://bucketname/logs/*.csv s3n://bucketname/copylogs/

username@client:~$ hadoop fs -ls s3n://bucketname/copylogs/
Found 3 items
-rwxrwxrwx   1       8947 2015-02-28 05:09 /copylogs/data_2015-02-13.csv
-rwxrwxrwx   1       7912 2015-02-28 05:09 /copylogs/data_2015-02-14.csv
-rwxrwxrwx   1      16786 2015-02-28 05:09 /copylogs/data_2015-02-15.csv

CREATE EXTERNAL TABLE is_data_copy (user_id STRING, action_name STRING, timestamp STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  STORED AS TEXTFILE LOCATION 's3n://bucketname/copylogs/';

SELECT * FROM is_data_copy LIMIT 10;

后者在复制后工作正常。

以下两个命令都有效:

hadoop fs -cat s3n://bucketname/logs/data_2015-02-15.csv
hadoop fs -cat s3n://bucketname/copylogs/data_2015-02-15.csv

版本: Hive 0.11.0 Hadoop 1.0.3。

这是某种错误吗?它与AWS S3有关吗?有任何想法吗?我需要能够读取原始位置,因为这是数据不断流动的地方。

我无法控制创建目录并在其中放置日志文件的进程,因此我无法检查任何内容。


我进行了一项实验:在S3上创建了一个密钥/文件夹,并以两种不同的方式在其中放置了一个文件:使用AWS管理控制台并使用hadoop fs。 我可以在文件夹中看到一个零字节文件,以防我使用AWS控制台,我得到一个空指针异常,用Hive评估它。有了hadoop fs,我不会遇到这样的问题。我假设,该零字节文件应该被删除,但不是AWS Console的情况。我确信,在我的情况下,s3文件夹不是从AWS控制台创建的,但可能是Ruby或Javascript。

1 个答案:

答案 0 :(得分:0)

好像是一个Hive bug。 Hive 0.12.0没有这个问题。