设置AWS凭据 - Cloudera Quickstart Docker容器

时间:2016-08-23 06:06:09

标签: amazon-web-services hadoop hive cloudera cloudera-quickstart-vm

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

2 个答案:

答案 0 :(得分:0)

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

在Cloudera快速入门容器can be found here中设置AWS凭据的Docker镜像示例以及此图片上的博客帖子be seen here.

本图的Dockerfile基本上使用shell脚本(如下所示)将AWS密钥设置为环境变量,并使用sed使用AWS s3n和s3a凭证属性更新/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

答案 1 :(得分:0)

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

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