2

我试图使用Cloudera的Quickstart docker容器来测试简单的Hadoop/Hive作业。我希望能够在S3中运行数据,但到目前为止我们遇到了问题。设置AWS Credentials - Cloudera快速入门Docker容器

我已将以下属性添加到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> 

无论如何,在蜂房尝试创建一个外部表指向一个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). 

回答

0

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

,其设定在Cloudera的快速启动容器can be found here AWS凭证的多克尔图像,并且该图像上的博客文章的实例可以be seen here.

本质上Dockerfile该图像使用一个外壳脚本(如下所示的内容),以将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 
0

我希望你已经通过,现在解决了该问题,但如果任何一个人要参考这个链接

在我们需要让所有的XML文件添加快速键& secretAccesskey后,它可能是有用的确定查询中给出的s3位置应为“s3 a://”我们大多数人给出的位置为“s3://”