2017-06-27 121 views
1

我已經遵循了各種已發佈的關於使用s3a://方案集成Apache Hive 2.1.1和AWS S3的文檔,配置了fs.s3a.access.key以及 fs.s3a.secret.key對於hadoop/etc/hadoop/core-site.xmlhive/conf/hive-site.xml我如何使Hive 2.2.1使用「s3a://」方案成功與AWS S3集成

我在這裏我能夠得到hdfs dfs -ls s3a://[bucket-name]/正常工作(它返回該桶的s3 ls)。所以我知道我的信譽,存取權限以及整體Hadoop設置是有效的。

hdfs dfs -ls s3a://[bucket-name]/ 

drwxrwxrwx - hdfs hdfs   0 2017-06-27 22:43 s3a://[bucket-name]/files 
...etc. 

hdfs dfs -ls s3a://[bucket-name]/files 

drwxrwxrwx - hdfs hdfs   0 2017-06-27 22:43 s3a://[bucket-name]/files/my-csv.csv 

但是,當我試圖從配置單元訪問相同的s3資源時,運行任何CREATE SCHEMACREATE EXTERNAL TABLE語句使用LOCATION 's3a://[bucket-name]/files/',它失敗。

例如:

CREATE EXTERNAL TABLE IF NOT EXISTS mydb.my_table (my_table_id string, my_tstamp timestamp, my_sig bigint) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3a://[bucket-name]/files/';

我不斷收到此錯誤:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: java.nio.file.AccessDeniedException s3a://[bucket-name]/files: getFileStatus on s3a://[bucket-name]/files: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Request ID: C9CF3F9C50EF08D1), S3 Extended Request ID: T2xZ87REKvhkvzf+hdPTOh7CA7paRpIp6IrMWnDqNFfDWerkZuAIgBpvxilv6USD0RSxM9ymM6I=)

這是沒有意義的。我可以在hdfs測試中看到存儲桶。我已經將適當的聲明添加到了hive-site.xml。

注意:使用相同的creds,我有's3n://'和's3a://'的工作。它只是's3a://'失敗。

任何人都有什麼想法從這個等式中缺少什麼?

+0

聽起來好像aws-access-key-id缺少它需要的權限。打開存儲桶的日誌記錄以準確地確定* S3拒絕的請求可能會有所幫助。 –

+0

訪問密鑰ID具有它所需的所有權限。如果沒有,它將無法用於hadoop。這是一些蜂巢特性或錯誤。 –

+0

使用's3n://'時,相同的訪問密鑰id有效。它只是's3a://'失敗,沒有正確的錯誤消息,儘管所有日誌記錄打開。 我期望無論是需要使用還是另一個記錄不完善的's3a://'配置設置,或者指定訪問密鑰和祕密密鑰信譽時,集成根本無法按預期工作。 –

回答

0

您是否在您的Hive環境中使用EMR?如果是這樣,EMR不支持s3a。

+0

謝謝。我*不*使用EMR(在這個部署中沒有這樣做),相反,我已經將自己的Hive + Hadoop堆棧部署到了EC2。 –