Workload-Partitionierung mit begrenzter Ausführung - AWS Glue

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.

Workload-Partitionierung mit begrenzter Ausführung

Fehler in Spark-Anwendungen entstehen häufig durch ineffiziente Spark-Skripte, die verteilte Ausführung von großen Transformationen im Speicher und Datensatzanomalien. Es gibt viele Gründe, die beim Treiber oder Executor Probleme mit dem Arbeitsspeicher verursachen können, z. B. eine Datenverzerrung, eine Auflistung zu vieler Objekte oder eine große Datenmischung. Diese Probleme treten häufig auf, wenn Sie große Mengen an Backlog-Daten mit Spark verarbeiten.

AWS Glue ermöglicht Ihnen die Behebung von Arbeitsspeicherproblemen und erleichtert Ihre ETL-Verarbeitung mit Workload-Partitionierung. Bei aktivierter Workload-Partitionierung wählt jeder ETL-Auftragslauf nur unverarbeitete Daten aus, wobei eine Obergrenze für die Datensatzgröße oder die Anzahl der Dateien besteht, die mit diesem Auftragslauf verarbeitet werden können. Zukünftige Auftragsläufe verarbeiten die verbleibenden Daten. Wenn beispielsweise 1 000 Dateien verarbeitet werden müssen, können Sie die Anzahl der Dateien auf 500 festlegen und sie in zwei Auftragsläufe aufteilen.

Die Workload-Partitionierung wird nur für Amazon-S3-Datenquellen unterstützt.

Aktivieren der Workload-Partitionierung

Sie können die begrenzte Ausführung aktivieren, indem Sie die Optionen in Ihrem Skript manuell festlegen oder Katalogtabelleneigenschaften hinzufügen.

Die Workload-Partitionierung mit begrenzter Ausführung in Ihrem Skript aktivieren:
  1. Um eine erneute Verarbeitung von Daten zu vermeiden, aktivieren Sie Auftragslesezeichen im neuen oder vorhandenen Auftrag. Weitere Informationen finden Sie unter Verfolgung verarbeiteter Daten anhand von Auftragslesezeichen.

  2. Ändern Sie das Skript und legen Sie das Begrenzungslimit in den zusätzlichen Optionen in der AWS Glue getSource API fest. Sie sollten auch den Transformationskontext für das Auftragslesezeichen festlegen, um das state-Element zu speichern. Zum Beispiel:

    Python

    glueContext.create_dynamic_frame.from_catalog( database = "database", table_name = "table_name", redshift_tmp_dir = "", transformation_ctx = "datasource0", additional_options = { "boundedFiles" : "500", # need to be string # "boundedSize" : "1000000000" unit is byte } )

    Scala

    val datasource0 = glueContext.getCatalogSource( database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions( Map("boundedFiles" -> "500") // need to be string //"boundedSize" -> "1000000000" unit is byte ) ).getDynamicFrame()
    val connectionOptions = JsonOptions( Map("paths" -> List(baseLocation), "boundedFiles" -> "30") ) val source = glueContext.getSource("s3", connectionOptions, "datasource0", "")
Die Workload-Partitionierung mit begrenzter Ausführung in Ihrer Tabelle für Data Catalog aktivieren:
  1. Legen Sie die Schlüssel-Wert-Paare im parameters-Feld für Ihre Tabellenstruktur in Data Catalog fest. Weitere Informationen finden Sie unter Anzeigen und Bearbeiten von Tabellendetails.

  2. Legen Sie die Obergrenze für die Datensatzgröße oder die Anzahl der verarbeiteten Dateien fest:

    • Legen Sie boundedSize auf die Zielgröße des Datensatzes in Bytes fest. Der Auftragslauf wird beendet, nachdem die Zielgröße aus der Tabelle erreicht wurde.

    • Legen Sie boundedFiles auf die Zielanzahl der Dateien fest. Der Auftragslauf wird beendet, nachdem die Zielanzahl der Dateien verarbeitet wurde.

    Anmerkung

    Sie sollten nur eine von boundedSize oder boundedFiles festlegen, da nur eine einzelne Begrenzung unterstützt wird.

Einrichten eines AWS Glue-Auslösers zur automatischen Ausführung des Auftrags

Sobald Sie die begrenzte Ausführung aktiviert haben, können Sie einen AWS Glue-Auslöser einrichten, um den Auftrag automatisch auszuführen und inkrementell die Daten in sequenziellen Durchläufen zu laden. Rufen Sie die AWS Glue-Konsole auf und erstellen Sie einen Auslöser, planen Sie die Zeit und fügen Sie sie an Ihren Auftrag an. Dann wird der nächste Auftragslauf automatisch ausgelöst und der neue Datenbatch verarbeitet.

Sie können auch AWS Glue-Workflows verwenden, um mehrere Aufträge zu orchestrieren und Daten aus verschiedenen Partitionen parallel verarbeiten. Weitere Informationen finden Sie unter AWS Glue Auslöser und AWS Glue-Workflows.

Weitere Informationen zu Anwendungsfällen und Optionen finden Sie im Blog Optimieren von Spark-Anwendungen mit Workload-Partitionierung in AWS Glue.