2

我正在尝试使用 Cloudera 的 Quickstart docker 容器来测试简单的 Hadoop/Hive 作业。我希望能够在 S3 中的数据上运行作业,但到目前为止我遇到了问题。

我已将以下属性添加到 core-site.xml、hive-site.xml、hdfs-site.xml。

  <property>
    <name>fs.s3.awsAccessKeyId</name>
    <value>XXXXXX</value>
  </property>

  <property>
    <name>fs.s3.awsSecretAccessKey</name>
    <value>XXXXXX</value>
  </property>

无论如何,在 Hive 中尝试创建指向 S3 位置的外部表时,我收到错误消息:

FAILED: SemanticException java.lang.IllegalArgumentException: AWS Access Key ID and Secret Access Key must be specified as the username or password (respectively) of a s3 URL, or by setting the fs.s3.awsAccessKeyId or fs.s3.awsSecretAccessKey properties (respectively).
4

2 回答 2

1

我希望你现在已经解决了这个问题,但如果有人要参考这个链接,它可能会很有用

在所有 xml 文件中添加 Accesskey 和 secretAccesskey 后,我们需要确保查询中给出的 s3 位置应该是“s3 a ://”,我们大多数人将位置指定为“s3://”

于 2017-06-20T18:15:06.987 回答
0

在 Cloudera Quickstart 容器中有很多地方可以设置 AWS 凭证。但是,必须在 Cloudera 服务启动之前设置 Hadoop 配置文件中的凭据属性。将 AWS 密钥导出为环境变量也很有帮助。

可以在此处找到在Cloudera Quickstart 容器中设置 AWS 凭证的 Docker 映像示例,并且可以在此处查看有关此映像的博客文章

本质上,此映像的 Dockerfile 使用 shell 脚本(内容如下所示)将 AWS 密钥设置为环境变量,并用于使用AWS s3n 和 s3a 凭证属性sed进行更新。/etc/hadoop/conf/core-site.xml此脚本在快速启动容器中的任何 Cloudera 服务启动之前执行。

#!/bin/bash

# ADD ACTUAL AWS KEYS HERE BEFORE RUNNING SCRIPT/BUILDING DOCKER IMAGE
#######################################################################
AWS_ACCESS_KEY_ID=REPLACE-ME
AWS_SECRET_ACCESS_KEY=REPLACE-ME
###################################################################3

# add aws creds to .bashrc
echo "export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID" >> /root/.bashrc
echo "export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY" >> /root/.bashrc

# make backup of core-site.xml
mv /etc/hadoop/conf/core-site.xml /etc/hadoop/conf/core-site.xml.bak

# add aws credentials for s3a and s3n to core-site.xml
cat /etc/hadoop/conf/core-site.xml.bak \
  | sed "s#<\/configuration>#<property>\n<name>fs.s3a.awsAccessKeyId<\/name>\n<value>${AWS_ACCESS_KEY_ID}<\/value>\n<\/property>\n<property>\n<name>fs.s3a.awsSecretAccessKey<\/name>\n<value>${AWS_SECRET_ACCESS_KEY}<\/value>\n<\/property>\n<property>\n<name>fs.s3n.awsAccessKeyId<\/name>\n<value>${AWS_ACCESS_KEY_ID}<\/value>\n<\/property>\n<property>\n<name>fs.s3n.awsSecretAccessKey<\/name>\n<value>${AWS_SECRET_ACCESS_KEY}<\/value>\n<\/property>\n<\/configuration>#g" \
  > /etc/hadoop/conf/core-site.xml
于 2016-10-04T07:08:13.820 回答