我一直在尝试在s3中创建一个由avro文件支持的配置单元表。起初,我认为这样做可能相对简单,但我遇到了以下错误。
下面是create table命令:
set fs.s3.awsAccessKeyId=ACCESS_KEY_ID;
set fs.s3.awsSecretAccessKey=SECRET_ACCESS_KEY;
use some_database;
CREATE EXTERNAL TABLE experiment_with_s3_backed_data
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES (
'avro.schema.literal'='{
"namespace": "",
"type": "record",
"name": "SomeAvroSchema",
"fields": [
{"name": "someVariable","type":"string"}
]
}')
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 's3://MY_BUCKET/some/data/'
;
我得到的错误是:
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).
我两个都试过了 s3
以及 s3n
URL和参数,结果相同。我注意到了相关的问题,建议在 core-site.xml
,但我不能这么做有两个原因:
由于访问限制,我无法更改hadoop配置。
我可能有不同的表,对s3有不同的访问权限,因此我通常对向用户提供将其s3数据加载到配置单元表的能力感兴趣。
请参阅使用amazonec2/s3将本地数据复制到hadoop集群上的hdfs的问题
1条答案
按热度按时间nom7f22z1#
我找到了一个解决s3密钥设置的方法,将密钥直接添加到s3 url,如下所示:
生成的create table语句如下所示: