2016-02-22 3 views
5

Ich verwende AWS EMR Cluster, um Funke-Jobs auszuführen. Um mit s3-Buckets arbeiten zu können, wird die hadoop-Konfiguration mit Zugriffstasten, geheimen Schlüsseln, enableServerSideEncryption und einem Algorithmus für die Verschlüsselung festgelegt. Bitte beachten Sie den Code untenSpark/Hadoop - Nicht in der Lage, mit serverseitiger Verschlüsselung in s3 zu speichern

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")

Unter der obigen Konfiguration ist der Funke Programm in der Lage von s3 Eimern zu lesen, führt die Verarbeitung. Aber es schlägt fehl, wenn es versucht, Ergebnisse in s3 zu speichern, was erzwingt, dass die Daten verschlüsselt werden müssen. Wenn der Bucket unverschlüsselte Daten zulässt, wird er erfolgreich unverschlüsselt gespeichert.

Dies passiert auch, wenn der Cluster mit der Option erstellt wird, die serverseitige Verschlüsselung erzwingt --emrfs Encryption=ServerSide,Args=[fs.s3.serverSideEncryptionAlgorithm=AES256].

hadoop distcp von hdfs auf dem emr zu s3 schlägt auch fehl. Aber, s3-dist-copy (aws-Version hdfs distcp), wenn mit --s3ServerSideEncryption Option gesetzt, funktioniert erfolgreich.

Die ec2-Instanz verfügt jedoch über die erforderliche Rollenberechtigung zum Hochladen von Daten in denselben Bucket mit serverseitiger Verschlüsselung ohne Verwendung von Benutzerzugriffsschlüsseln. Bitte beachten Sie den Beispielbefehl unten. Wenn "-sse" im folgenden Befehl weggelassen wird, wird ein "Zugriff verweigert" -Fehler ausgelöst.

aws s3 cp test.txt s3://encrypted-bucket/ —sse

Es wird hilfreich sein, wenn jemand mit der Konfiguration in Funken/hadoop erforderlich helfen könnten Daten zu aws s3 mit Server-Seite Verschlüsselung zu speichern.

Antwort

4

Dies ist jetzt gelöst. --emrfs hat die Konfiguration nicht korrekt angewendet. Aber die folgende Option mit aws emr create-cluster funktioniert sowohl mit Funken und hadoop distcp.

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

Da die EC2-Instanzen haben Setup mit dem Rollenprofil gewesen/Schreiben aus dem Eimer zu lesen, arbeitete mein Funke Code, ohne die aws Zugriffsschlüssel zu schaffen.

Weitere emr Konfigurationsoptionen sind in, die mit --configuration Option verwendet werden kann, mit emr create-clusterhttp://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html

Ich bin nicht sicher, warum aws emr 2 Möglichkeiten geben für das gleiche tun. Man arbeitet und andere nicht.

Verwandte Themen