So schreiben Sie mit Amazon EMR Daten in einen Amazon S3 S3-Bucket, den Sie nicht besitzen - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

So schreiben Sie mit Amazon EMR Daten in einen Amazon S3 S3-Bucket, den Sie nicht besitzen

Wenn Sie eine Datei in einen Amazon Simple Storage Service (Amazon S3)-Bucket schreiben, können standardmäßig nur Sie die Datei lesen. Es wird davon ausgegangen, dass Sie Dateien in Ihre Buckets schreiben. Diese Standardeinstellung dient dem Schutz Ihrer Dateien.

Wenn Sie jedoch einen Cluster ausführen und möchten, dass die Ausgabe in den Amazon S3 S3-Bucket eines anderen AWS Benutzers schreibt und Sie möchten, dass dieser andere AWS Benutzer diese Ausgabe lesen kann, müssen Sie zwei Dinge tun:

  • Bitten Sie den anderen AWS Benutzer, Ihnen Schreibberechtigungen für seinen Amazon S3 S3-Bucket zu gewähren. Der Cluster, den Sie starten, wird unter Ihren AWS Anmeldeinformationen ausgeführt, sodass alle Cluster, die Sie starten, auch in den Bucket dieses anderen AWS Benutzers schreiben können.

  • Legen Sie Leseberechtigungen für den anderen AWS Benutzer für die Dateien fest, die Sie oder der Cluster in den Amazon S3 S3-Bucket schreiben. Die einfachste Methode, diese Leseberechtigungen festzulegen, besteht darin, vorgefertigte Zugriffskontrolllisten (ACLs) zu verwenden. Dabei handelt es sich um eine Reihe von vordefinierten Zugriffsrichtlinien, die von Amazon S3 definiert wurden.

Informationen darüber, wie der andere AWS Benutzer Ihnen Berechtigungen zum Schreiben von Dateien in den Amazon S3 S3-Bucket des anderen Benutzers gewähren kann, finden Sie unter Bearbeiten von Bucket-Berechtigungen im Amazon Simple Storage Service-Benutzerhandbuch.

Damit Ihr Cluster ACLs beim Schreiben von Dateien in Amazon S3 die Funktion „Gespeichert“ verwenden soll, setzen Sie die fs.s3.canned.acl Cluster-Konfigurationsoption auf die zu verwendende ACL mit gespeicherten Daten. In der folgenden Tabelle sind die aktuell definierten Canned aufgeführt ACLs.

Vordefinierte ACL Beschreibung
AuthenticatedRead Gibt an, dass dem Eigentümer Permission.FullControl und dem Berechtigungsempfänger der Gruppe GroupGrantee.AuthenticatedUsers der Zugriff Permission.Read gewährt wird.
BucketOwnerFullControl Gibt an, dass dem Bucket-Eigentümer Permission.FullControl gewährt wird. Der Bucket-Eigentümer muss nicht unbedingt derselbe wie der Objekteigentümer sein.
BucketOwnerRead Gibt an, dass dem Bucket-Eigentümer Permission.Read gewährt wird. Der Bucket-Eigentümer muss nicht unbedingt derselbe wie der Objekteigentümer sein.
LogDeliveryWrite Gibt an, dass dem Eigentümer Permission.FullControl und dem Berechtigungsempfänger der Gruppe GroupGrantee.LogDelivery der Zugriff Permission.Write gewährt wird, damit Zugriffsprotokolle bereitgestellt werden können.
Private Gibt an, dass dem Eigentümer Permission.FullControl gewährt wird.
PublicRead Gibt an, dass dem Eigentümer Permission.FullControl und dem Berechtigungsempfänger der Gruppe GroupGrantee.AllUsers der Zugriff Permission.Read gewährt wird.
PublicReadWrite Gibt an, dass dem Eigentümer Permission.FullControl und dem Berechtigungsempfänger der Gruppe GroupGrantee.AllUsers die Zugriffsberechtigungen Permission.Read und Permission.Write gewährt wird.

Die Cluster-Konfigurationsoptionen können auf vielfältige Weise festgelegt werden, je nach Typ des ausgeführten Clusters. Die folgenden Verfahren zeigen die Festlegung der Option für allgemeine Anwendungsfälle.

So schreiben Sie Dateien mithilfe von canned ACLs in Hive
  • Legen Sie in der Hive-Eingabeaufforderung die Konfigurationsoption fs.s3.canned.acl auf die vordefinierte ACL fest, die der Cluster für zu Amazon S3 geschriebene Dateien festlegen soll. Stellen Sie für den Zugriff auf die Hive-Eingabeaufforderung eine Verbindung mit dem Master-Knoten über SSH her und geben Sie an der Hadoop-Eingabeaufforderung "Hive" ein. Weitere Informationen finden Sie unter Stellen Sie mithilfe von SSH eine Connect zum primären Knoten des Amazon EMR-Clusters her.

    Im folgenden Beispiel wird die Konfigurationsoption fs.s3.canned.acl auf BucketOwnerFullControl festgelegt. Dadurch erhält der Eigentümer des Amazon-S3-Buckets vollständige Kontrolle über die Datei. Beachten Sie: Der Festlegungsbefehl erfordert die Beachtung der Groß- und Kleinschreibung und enthält keine Anführungszeichen oder Leerzeichen.

    hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://amzn-s3-demo-bucket/acl/'; insert overwrite table acl select count(*) from acl;

    Die beiden letzten Zeilen des Beispiels erstellen eine Tabelle, die in Amazon S3 gespeichert wird, und schreiben Daten in die Tabelle.

Um Dateien mit Canned ACLs in Pig zu schreiben
  • Legen Sie in der Pig-Eingabeaufforderung die Konfigurationsoption fs.s3.canned.acl auf die vordefinierte ACL fest, die der Cluster für zu Amazon S3 geschriebene Dateien festlegen soll. Stellen Sie für den Zugriff auf die Pig-Eingabeaufforderung eine Verbindung mit dem Master-Knoten über SSH her und geben Sie an der Hadoop-Eingabeaufforderung "Pig" ein. Weitere Informationen finden Sie unter Stellen Sie mithilfe von SSH eine Connect zum primären Knoten des Amazon EMR-Clusters her.

    Im folgenden Beispiel wird die fs.s3.canned.acl Konfigurationsoption auf gesetzt BucketOwnerFullControl, wodurch der Besitzer des Amazon S3 S3-Buckets die vollständige Kontrolle über die Datei hat. Beachten Sie: Der Festlegungsbefehl enthält ein Leerzeichen vor dem Namen der vordefinierten ACL und keine Anführungszeichen.

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://amzn-s3-demo-bucket/pig/acl';
Um Dateien mithilfe von Canned ACLs in einem benutzerdefinierten JAR zu schreiben
  • Legen Sie mit Hadoop die Konfigurationsoption fs.s3.canned.acl mit -D-Flag fest. Das wird im Beispiel unten veranschaulicht.

    hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://amzn-s3-demo-bucket/input s3://amzn-s3-demo-bucket/output