Spark anAmazon Redshift mit einem Konnektor verwenden - 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.

Spark anAmazon Redshift mit einem Konnektor verwenden

Mit den Versionen 6.4.0 und höher von Amazon EMR enthält jeder mit Apache Spark erstellte Amazon EMR-Cluster einen Konnektor zwischen Spark undAmazon Redshift. Dieser Konnektor basiert auf demspark-redshift Open-Source-Konnektor und ermöglicht es Ihnen, Spark auf Amazon EMR zur Verarbeitung von Daten zu verwenden, die in gespeichert sindAmazon Redshift.

Ab der Amazon EMR-Version 6.6.0 müssen Sie die--packages Option--jars oder verwenden, um anzugeben, welche der folgenden JAR-Dateien Sie verwenden möchten. Die--jars Option gibt Abhängigkeiten an, die lokal, in HDFS oder mithilfe von HTTP/S gespeichert sind. Weitere von der--jars Option unterstützte Dateispeicherorte finden Sie unter Advanced Dependency Management in der Spark-Dokumentation. Die--packages Option gibt Abhängigkeiten an, die im öffentlichen Maven-Repo gespeichert sind.

  • spark-redshift.jar

  • spark-avro.jar

  • RedshiftJDBC.jar

  • minimal-json.jar

Diese Jars sind standardmäßig in allen Amazon EMR-Releaseversionen 6.4.0 und höher bereits auf jedem Cluster installiert, Sie müssen sie jedoch nicht in den Versionen 6.4.0 und 6.5.0 angeben. Das folgende Beispiel zeigt, wie eine Spark-Anwendung mit einemspark-redshift Konnektor mit den Versionen 6.4.0 und 6.5.0 gestartet wird.

spark-submit my_script.py

Um eine Spark-Anwendung mit einemspark-redshift Konnektor auf Amazon EMR-Version 6.6.0 oder höher zu starten, müssen Sie die--packages Option--jars oder verwenden, wie das folgende Beispiel zeigt. Beachten Sie, dass die mit der--jars Option aufgelisteten Pfade die Standardpfade für die JAR-Dateien sind.

spark-submit \ --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-redshift.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-avro.jar,/usr/share/aws/redshift/spark-redshift/lib/minimal-json.jar \ my_script.py

Um mit diesem Konnektor zu beginnen und mehr über die unterstützten Parameter zu erfahren, sieh dir die README-Datei imspark-redshift Github-Repository an. Das Repository enthält auch ein Tutorial für NeulingeAmazon Redshift.

Amazon EMR überprüft Open-Source-Code immer, wenn er in Ihren Cluster importiert wird. Aus Sicherheitsgründen unterstützen wir die folgenden Authentifizierungsmethoden von Spark bis Amazon S3 nicht:

  • AWSZugriffstasten in derhadoop-env Konfigurationsklassifizierung festlegen

  • Verschlüsseln vonAWS Zugriffsschlüsseln in dertempdir URI

Überlegungen und Einschränkungen

  • Der Parameter unterstützttempformat derzeit das Parquet-Format nicht.

  • Dietempdir URI zeigt auf einen Amazon S3 Standort. Dieses temporäre Verzeichnis wird nicht automatisch bereinigt und kann daher zusätzliche Kosten verursachen. Wir empfehlen, Amazon S3 S3-Lebenszyklusrichtlinien zu verwenden, um die Aufbewahrungsregeln für den Amazon S3 S3-Bucket zu definieren.

  • Wir empfehlen die serverseitige Amazon-S3-Verschlüsselung zum Verschlüsseln der verwendeten Amazon S3 S3-Buckets.

  • Wir empfehlen, den öffentlichen Zugriff auf Amazon S3 S3-Buckets zu sperren.

  • Wir empfehlen, dass der Amazon Redshift Redshift-Cluster nicht öffentlich zugänglich sein sollte.

  • Wir empfehlen, die Amazon Redshift Redshift-Auditprotokollierung zu aktivieren.

  • Wir empfehlen, die Amazon Redshift Redshift-Verschlüsselung im Ruhezustand zu aktivieren.

  • Wir empfehlen, SSL für die JDBC-Verbindung von Spark auf Amazon EMR zu Amazon Redshift zu aktivieren.

  • Wir empfehlen, eine IAM-Rolle mithilfe des Parametersaws_iam_role für den Amazon Redshift Redshift-Authentifizierungsparameter zu übergeben.

  • Wir empfehlenAWS Secrets Manager als bewährte Methode, Amazon Redshift Redshift-Anmeldedaten (Benutzername und Passwort für den Amazon Redshift Redshift-Cluster) zu verwalten. Das folgende Codebeispiel zeigt, wie Sie Anmeldeinformationen abrufen könnenAWS Secrets Manager, um eine Verbindung zu einem Amazon Redshift Redshift-Cluster herzustellen, indem Sie Folgendes verwendenpyspark:

    from pyspark.sql import SQLContext import boto3 sc = # existing SparkContext sql_context = SQLContext(sc) secretsmanager_client = boto3.client('secretsmanager') secret_manager_response = secretsmanager_client.get_secret_value( SecretId='string', VersionId='string', VersionStage='string' ) username = # get username from secret_manager_response password = # get password from secret_manager_response url = "jdbc:redshift://redshifthost:5439/database?user=" + username + "&password=" + password # Read data from a table df = sql_context.read \ .format("io.github.spark_redshift_community.spark.redshift") \ .option("url", url) \ .option("dbtable", "my_table") \ .option("tempdir", "s3://path/for/temp/data") \ .load()