2017-08-11 102 views
2

我在Spark中使用EMR 5.5.0。如果我使用s3://... URL將簡單文件寫入s3,則它會寫入正確。但是如果我使用s3a://...地址,則它將失敗Service: Amazon S3; Status Code: 403; Error Code: AccessDeniedS3A:在S3中失敗:在Spark EMR中工作

使用AWS命令行我可以在我正在寫入的路徑中創建cp,mv和rm文件。但從火花,s3a失敗的put命令。

我們啓用了服務器端加密功能,我知道火花知道,因爲s3網址有效。有任何想法嗎?

失敗PUT調試日誌here。也許需要注意的是,我正在做rdd.saveAsTextFile(path),但put命令說它試圖寫入/my-bucket/tmp/carlos/testWrite/4/_temporary/0/它應該只在實木複合地板上做?不知道這個細節是否相關,但我想我會提到。

回答

2

s3a是Apache Hadoop中主動維護的S3客戶端。 AWS在多年前推出了自己的客戶端,這個客戶端早在&(大概)就已經大規模地改寫了他們的客戶端。

他們可以讀取和寫入相同的數據,但EMR的某些位需要額外的文件系統客戶端方法,只有EMR s3支持......您無法安全地使用s3a。

還有原始的ASF s3://客戶端,它與其他所有東西都不兼容,但是在EMR是亞馬遜產品之前,它是第一個將Hadoop與S3連接起來的代碼。

哪個更好?截至2017年8月,S3A可能會更快速地實施ORC和Parquet等柱狀格式的積極閱讀IO。 EMR S3與emrfs可能在彈性和一致性方面具有優勢。但是開源的ASF S3A客戶端正在轉向解決這些問題

+0

你碰巧知道'EMR''3協議是否允許Parquet中的謂詞下推? (類似於它如何使用's3a') –

+0

不在FS級別,它位於Spark和Parquet庫之間。取決於AWS對這兩個項目所做的工作以及下推需要的任何設置。你最好測試它看看 –