我正在尝试使用“S3a//”方案在 S3 对象存储之上使用 Beeline 创建 Hive 外部表。我已遵循官方 cloudera 文档并配置了以下属性。
- fs.s3a.access.key
- fs.s3a.secret.key
- fs.s3a.endpoint
我能够hadoop fs -Dfs.s3a.access.key=<access_key> -Dfs.s3a.secret.key=<secret_key> -Dfs.s3a.endpoint=<host_port> -ls s3a://<bucket_name>/dir/
成功运行并且能够看到目录。所以我知道我的凭据、存储桶访问权限和整体 Hadoop 设置是有效的。
但是,当我尝试从hive(Beeline)访问相同的 s3 资源时,例如使用 LOCATION 's3a://[bucket-name]/dir/'运行CREATE EXTERNAL TABLE语句,它会失败。
配置
set fs.s3a.access.key=<access_key>;
set fs.s3a.secret.key=<secret_key>;
set fs.s3a.endpoint=<host:port>;
询问
CREATE EXTERNAL TABLE NAME_TEST_S3(name string, age int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TextFile LOCATION 's3a://<bucket_name>/dir/'
我得到以下错误。
错误:失败:执行错误,从 org.apache.hadoop.hive.ql.ddl.DDLTask 返回代码 40000。MetaException(消息:得到异常:java.nio.file.AccessDeniedException <bucket_name>:org.apache.hadooop.fs.s3a.auth.NoAuthWithAWSException:TemporaryAWSCredentialsProvider SimpleAWSCredentialsProvider EnvironmentVariableCredentialsProvider IAMInstanceCredentialsProvider 没有提供 AWS 凭证:com.amazonaws.sdkClientException:无法从环境变量(AWS_ACCESS_KEY_ID(或 AWS_ACCESS_KEY)和 AWS_SECRET_KEY(或 AWS_SECRET_ACCESS_KEY))加载 AWS 凭证(状态=08S01,代码=40000)
注意:我使用的是 CDH-7.1.6、Hive 3.1.3 和 S3 对象存储。我能够使用 hadoop fs 以及使用 spark scala read api 访问相同的 s3 资源
有人知道这个等式缺少什么吗?