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.