我遵循了各种已发布的文档,了解如何使用 s3a://
方案将 Apache Hive 2.1.1 与 AWS S3 集成,配置 fs.s3a.access.key
和
fs.s3a.secret.key
用于 hadoop/etc/hadoop/core-site.xml
和 hive/conf/hive-site.xml
.
我现在可以让 hdfs dfs -ls s3a://[bucket-name]/
正常工作(它返回那个桶的 s3 ls)。所以我知道我的信用、存储桶访问和整体 Hadoop 设置是有效的。
hdfs dfs -ls s3a://[bucket-name]/
drwxrwxrwx - hdfs hdfs 0 2017-06-27 22:43 s3a://[bucket-name]/files
...etc.
hdfs dfs -ls s3a://[bucket-name]/files
drwxrwxrwx - hdfs hdfs 0 2017-06-27 22:43 s3a://[bucket-name]/files/my-csv.csv
但是,当我尝试从配置单元访问相同的 s3 资源时,例如使用 LOCATION 's3a://[bucket-name]/files/'
运行任何 CREATE SCHEMA
或 CREATE EXTERNAL TABLE
语句,它会失败。
例如:
CREATE EXTERNAL TABLE IF NOT EXISTS mydb.my_table ( my_table_id string, my_tstamp timestamp, my_sig bigint ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3a://[bucket-name]/files/';
我一直收到这个错误:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: java.nio.file.AccessDeniedException s3a://[bucket-name]/files: getFileStatus on s3a://[bucket-name]/files: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: C9CF3F9C50EF08D1), S3 Extended Request ID: T2xZ87REKvhkvzf+hdPTOh7CA7paRpIp6IrMWnDqNFfDWerkZuAIgBpvxilv6USD0RSxM9ymM6I=)
这毫无意义。正如在 hdfs 测试中看到的那样,我可以访问存储桶。我已经将适当的凭据添加到 hive-site.xml。
注意:使用相同的凭据,我将其用于“s3n://”和“s3a://”。它只是对“s3a://”失败。
有人知道这个等式中缺少什么吗?
最佳答案
您是否在 Hive 环境中使用 EMR?如果是这样,则 EMR 不支持 s3a。
关于amazon-web-services - 如何使用 "s3a://"方案让 Hive 2.2.1 成功与 AWS S3 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791397/