在amazons3中创建由avro文件支持的配置单元表的问题

ct3nt3jp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(455)

我一直在尝试在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的问题

nom7f22z

nom7f22z1#

我找到了一个解决s3密钥设置的方法,将密钥直接添加到s3 url,如下所示:

s3n://ACCESS_KEY:SECRET_KEY@MY_BUCKET/some/data/'

生成的create table语句如下所示:

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 's3n://ACCESS_KEY:SECRET_KEY@MY_BUCKET/some/data/'
;

相关问题