设置 AWS 凭证 - Cloudera 快速入门 Docker 容器
Setting up AWS Credentials - Cloudera Quickstart Docker Container
我正在尝试使用 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 位置的外部 table 时,出现错误:
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).
Cloudera Quickstart 容器中有很多地方可以设置 AWS 凭证。但是,必须在 Cloudera 服务启动之前设置 Hadoop 配置文件中的凭证属性。将 AWS 密钥导出为环境变量也很有帮助。
在 Cloudera Quickstart 容器中设置 AWS 凭证的 Docker 图像示例 can be found here, and a blog post on this image can be seen here.
本质上,此图像的 Docker 文件使用 shell 脚本(内容如下所示)将 AWS 密钥设置为环境变量,并使用 sed
更新 /etc/hadoop/conf/core-site.xml
具有 AWS s3n 和 s3a 凭证属性。此脚本在快速启动容器中的任何 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
我希望你现在已经解决了这个问题,但如果有人要参考这个问题,它可能会有用 link
在所有 xml 文件中添加 Accesskey 和 secretAccesskey 之后,我们需要确保查询中给出的 s3 位置应该是 "s3a://",我们大多数人给出的位置是 "s3://"
我正在尝试使用 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 位置的外部 table 时,出现错误:
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).
Cloudera Quickstart 容器中有很多地方可以设置 AWS 凭证。但是,必须在 Cloudera 服务启动之前设置 Hadoop 配置文件中的凭证属性。将 AWS 密钥导出为环境变量也很有帮助。
在 Cloudera Quickstart 容器中设置 AWS 凭证的 Docker 图像示例 can be found here, and a blog post on this image can be seen here.
本质上,此图像的 Docker 文件使用 shell 脚本(内容如下所示)将 AWS 密钥设置为环境变量,并使用 sed
更新 /etc/hadoop/conf/core-site.xml
具有 AWS s3n 和 s3a 凭证属性。此脚本在快速启动容器中的任何 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
我希望你现在已经解决了这个问题,但如果有人要参考这个问题,它可能会有用 link
在所有 xml 文件中添加 Accesskey 和 secretAccesskey 之后,我们需要确保查询中给出的 s3 位置应该是 "s3a://",我们大多数人给出的位置是 "s3://"