2016-02-22 14 views
5

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のに必要な設定を助けることができれば、参考になります。

答えて

4

これで解決しました。 --emrfsは正しく設定を適用しませんでした。しかし、aws emr create-clusterの下のオプションは、sparkとhadoop distcpの両方で動作します。

--configurations '[{"Classification":"emrfs-site","Properties":{"fs.s3.enableServerSideEncryption":"true"},"Configurations":[]}]'

EC2インスタンスは、バケツからの読み取り/書き込みにロールプロファイルで設定されているとおり、私の火花コードは、AWSアクセスキーを設けることなく働きました。

もっとEMRの設定オプションは、AWS EMRは、同じことを行うための2つのオプションを与えている理由は、私はわからないemr create-clusterhttp://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html

--configurationオプションと一緒に使用することができ、でご利用いただけます。 1つは動作し、他は動作しません。

関連する問題