我編寫了一個Java程序,該程序包含在oozie工作流程中,該工作流程將文件從HDFS傳輸到S3存儲桶。不過,我收到以下錯誤將文件從HDFS傳輸到S3存儲桶時拒絕訪問
com.amazonaws.services.s3.model.AmazonS3Exception:拒絕訪問 (服務:亞馬遜S3;狀態代碼:403;錯誤代碼:存取遭拒; 請求ID:310F08CD4FF8B5D9 ),S3擴展請求ID: fAysD1vgtriV8x + sf1zqHk58eAT89Y6HD + ziEokaPvFPKwaPrHDxt5yygsiA1ktNVsyj + GTmbQ0 =
我創建動態地Oozie的工作流程在S3桶中的關鍵路徑。
對於例如:如果我的文件名是abc_20171009.tsv.gz
那麼這個文件應該被上傳以下路徑
tsvFile/year=2017/month=10/day=09/abc_20171009.tsv.gz
到桶,以類似的方式前些天文件應根據日期上傳。
我的查詢是在上載文件之前關鍵路徑是否應預先存儲在存儲桶中,還是可以動態創建?
// Request server-side encryption.
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKeyId, awsSecretKey);
AmazonS3Client s3Client = new AmazonS3Client(awsCredentials);
PutObjectRequest request = new PutObjectRequest("bucket_name", "key_name","");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setMetadata(objectMetadata);
PutObjectResult response = s3Client.putObject(request);
LOGGER.info("Server Side Encryption successful" +response.getSSEAlgorithm());
注:我可以通過AWS CLI手動將文件並連接到S3桶。
您還可以確認關鍵路徑(tsvFile /年= 2017 /月= 10 /日= 09 /)需要在上傳文件之前預先存在,還是可以動態創建? – Shash
當你上傳一個文件到S3,你沒有創建任何目錄,你在Web界面上看到的只是對象鍵的解釋(所以文件a/b/c.txt只是S3上的一個文件,但在Web界面上它被解釋爲嵌套目錄)。因爲沒有「預先存在」的目錄,所以你的「目錄」tsvFile/year = 2017/month = 10/day = 09 /中的每個文件都需要轉義「=」號。 – pezetem
This是我目前面臨的問題 - 由com.amazonaws引起。services.s3.model.AmazonS3Exception:此操作不支持x-amz-server-side-encryption標頭。 (Service:Amazon S3; Status Code:400; Error Code:InvalidArgument; Request ID:A4563A21BFA23BCE),S3 Extended Request ID:HoAo1ia5jOO3zuNsBzOspmB5b + ZG9YQHgCuFvJnrd0iGEGegCpUoqMf7VWybOj0Np0KVjk5ovm8 = – Shash