sparkジョブを実行するAWS EMR Clusterを実行しています。 s3バケットで動作するために、ハープの設定は、アクセスキー、秘密鍵、enableServerSideEncryption、および暗号化に使用されるアルゴリズムで設定されます。上記の構成の下Spark/Hadoop - サーバーサイドの暗号化でs3に保存できません。
val hadoopConf = sc.hadoopConfiguration; hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") hadoopConf.set("fs.s3.awsAccessKeyId", "xxx") hadoopConf.set("fs.s3.awsSecretAccessKey", "xxx") hadoopConf.set("fs.s3.enableServerSideEncryption", "true") hadoopConf.set("fs.s3.serverSideEncryptionAlgorithm","AES256")
下のコードを参照してください、スパークプログラムは、S3バケットから読み込む処理を実行することが可能です。しかし、s3に結果を保存しようとすると失敗し、データを暗号化する必要があります。バケットが暗号化されていないデータを許可する場合、バケットは暗号化されずに正常に保存されます。
これは、サーバー側の暗号化を適用するオプションを使用してクラスタを構築した場合でも発生します。--emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256]
。
emrからs3へのhdfsからのhadoop distcpも失敗します。しかし、s3-dist-copy(awsバージョンhdfs distcp)が--s3ServerSideEncryptionオプションで設定された場合、正常に動作します。
しかし、ec2インスタンスには、ユーザーアクセスキーを使用せずにサーバー側の暗号化を使用して同じバケットにデータをアップロードするために必要なロール権限があります。以下のコマンド例を参照してください。以下のコマンドで-sseを省略すると、「アクセス拒否エラー」がスローされます。
aws s3 cp test.txt s3://encrypted-bucket/ —sse
誰かがサーバー側の暗号化とAWS S3にデータを保存するために、スパーク/ Hadoopのに必要な設定を助けることができれば、参考になります。