3

我已经设置了一个交互式配置单元会话并将 apache weblog 日期直接从 s3 存储桶加载到表中:

    DROP TABLE apachelog;
CREATE EXTERNAL TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE
LOCATION 's3n://OperationOverkill/';

然后我可以像这样成功地从中选择:

SELECT * FROM apachelog LIMIT 5;

但是计数(或任何需要实际 map-reduce 的东西都不会:

SELECT COUNT(host) FROM apachelog;

错误信息:

Job Submission failed with exception 'java.io.IOException(cannot find dir = s3n: //OperationOverkill/access_clickkiller_12-08-08.log in pathToPartitionInfo: s3n ://OperationOverkill/)'

我用谷歌搜索并在 AWS Support 论坛上发现了一个类似的问题, 但我希望从 SO 获得更快的指示/帮助。

4

2 回答 2

1

我遇到了同样的问题,但使用 s3 中的子目录修复了它。因此,我会尝试将您的文件放在“s3n://OperationOverkill/subdir/”之类的文件中并使用它。

于 2014-03-04T20:00:49.293 回答
0

这似乎是一个错误,如果您不使用存储桶根,它可能适用于 S3,但我无法为 HDFS 工作(类似于 hdfs:///path/to/folder/): https://issues .apache.org/jira/browse/HIVE-7774

由于 Hive 0.14 中修复了 bug,因此您需要使用高于该版本的版本。

在 AWS 的背景下,

如果您从此处遵循示例代码:http: //docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/calling-emr-with-java-sdk.html 您可能正在使用 Hive 0.13.*:请参阅: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_SupportedHiveVersions.html

您可以改为点击此链接,该链接显示了使用新 AMI 版本创建集群的新方法:http: //docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-4.5.0/emr-release-differences.html #emr 发布标签

对于“release-lable”4 或 5,您可以获得新的 Hive 版本,这应该可以解决问题,请参阅 EMR(AMI) 到 Hive 版本映射: http ://docs.aws.amazon.com//ElasticMapReduce/最新/ReleaseGuide/emr-release-components.html

于 2016-10-09T04:35:06.600 回答