设置aws凭据-cloudera quickstart docker容器

cvxl0en2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(422)

我正在尝试使用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).
llew8vvj

llew8vvj1#

在clouderaquickstart容器中有许多地方可以设置aws凭据。但是,hadoop配置文件中的凭证属性必须在cloudera服务启动之前设置。将aws密钥导出为环境变量也很有帮助。
在cloudera快速启动容器中设置aws凭证的docker映像的示例可以在这里找到,关于此映像的博客文章可以在这里看到。
基本上,此图像的dockerfile使用shell脚本(内容如下所示)将aws键设置为环境变量,并使用 sed 更新 /etc/hadoop/conf/core-site.xml 具有aws s3n和s3a凭据属性。此脚本在quickstart容器中的任何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
yh2wf1be

yh2wf1be2#

我希望您现在已经解决了这个问题,但如果有人要引用此链接,它可能会很有用
在所有xml文件中添加accesskey和secretaccesskey之后,我们需要确保查询中给出的s3位置应该是“s3a://”,其中大多数人给出的位置是“s3://”

相关问题