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.
DynamoDB-Verbindungen
Sie können AWS Glue für Spark zum Lesen und Schreiben in Tabellen in DocumentDB in AWS Glue verwenden. Die Verbindung zu DynamoDB erfolgt über IAM-Berechtigungen, die Ihrem AWS-Glue-Auftrag angehängt sind. AWS Glue unterstützt das Schreiben von Daten in die DynamoDB-Tabelle eines anderen AWS-Kontos. Weitere Informationen finden Sie unter Konten- und regionenübergreifender Zugriff auf DynamoDB-Tabellen.
Neben dem AWS Glue-DynamoDB-ETL-Konnektor können Sie den DynamoDB-Export-Konnektor zum Lesen von DynamoDB verwenden. Dieser ruft eine DynamoDB-ExportTableToPointInTime
-Anforderung auf und speichert sie im Format DynamoDB JSON an einem von Ihnen angegebenen Amazon-S3-Speicherort. AWS Glue erstellt dann ein DynamicFrame-Objekt, indem die Daten vom Amazon-S3-Exportspeicherort gelesen werden.
Der DynamoDB Writer wird in AWS Glue Version 1.0 oder höher unterstützt. Der AWS Glue-DynamoDB-Export-Konnektor wird in AWS Glue Version 2.0 oder höher unterstützt.
Weitere Informationen zu DynamoDB finden Sie in der Dokumentation zu Amazon DynamoDB.
Anmerkung
Der DynamoDB-ETL-Reader unterstützt keine Filter oder Pushdown-Prädikate.
Konfigurieren von DynamoDB-Verbindungen
Um von AWS Glue aus eine Verbindung zu DynamoDB herzustellen, erteilen Sie der mit Ihrem AWS-Glue-Auftrag verknüpften IAM-Rolle die Erlaubnis, mit DynamoDB zu interagieren. Weitere Informationen zu Berechtigungen auf Ressourcenebene, die zum Lesen und Schreiben in DynamoDB erforderlich sind, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für DynamoDB in der Dokumentation zu IAM.
In den folgenden Situationen ist möglicherweise eine zusätzliche Konfiguration erforderlich:
-
Wenn Sie den DynamoDB-Export-Konnektor verwenden, müssen Sie IAM so konfigurieren, dass Ihr Auftrag DynamoDB-Tabellenexporte anfordern kann. Außerdem müssen Sie einen Amazon-S3-Bucket für den Export benennen und die erforderlichen Berechtigungen in IAM bereitstellen, damit DynamoDB in diesen Bucket schreiben und Ihr AWS-Glue-Auftrag daraus lesen kann. Weitere Informationen finden Sie unter Anfordern eines Tabellenexports in DynamoDB.
-
Wenn Ihr AWS-Glue-Auftrag spezielle Amazon-VPC-Verbindungsanforderungen hat, verwenden Sie den AWS-Glue-Verbindungstyp
NETWORK
, um Netzwerkoptionen bereitzustellen. Da der Zugriff auf DynamoDB von IAM autorisiert wird, ist kein AWS-Glue-DynamoDB-Verbindungstyp erforderlich.
Aus DynamoDB lesen und in DynamoDB schreiben
In den folgenden Codebeispielen wird gezeigt, wie DynamoDB-Tabellen (über den ETL Connector) gelesen und geschrieben werden. Sie demonstrieren das Lesen von einer Tabelle und das Schreiben in eine andere Tabelle.
Verwenden des DynamoDB-Export-Konnektors
Der Export-Konnektor funktioniert besser als der ETL-Konnektor, wenn die DynamoDB-Tabelle größer als 80 GB ist. Da außerdem die Exportanforderung außerhalb der Spark-Prozesse in einem AWS Glue-Auftrag durchgeführt wird, können Sie Auto Scaling von AWS-Glue-Aufträgen aktivieren, um bei der Export-Anforderung die DPU-Auslastung zu verringern. Mit dem Export-Konnektor müssen Sie auch nicht die Anzahl der Aufteilungen für die Parallelität des Spark-Executors oder den Prozentsatz des DynamoDB-Durchsatzes konfigurieren.
Anmerkung
DynamoDB hat spezifische Anforderungen, um ExportTableToPointInTime
-Anforderungen aufzurufen. Weitere Informationen finden Sie unter Anfordern eines Tabellenexports in DynamoDB. Zum Beispiel muss „Point-in-Time-Restore“ (Zeitpunktbezogene Wiederherstellung, PITR) für die Tabelle aktiviert sein, um diesen Konnektor verwenden zu können. Der DynamoDB-Konnektor unterstützt auch AWS KMS-Verschlüsselung für DynamoDB-Exporte nach Amazon S3. Die Bereitstellung Ihrer Sicherheitskonfiguration in der AWS-Glue-Auftragskonfiguration aktiviert die AWS KMS-Verschlüsselung für einen DynamoDB-Export. Der KMS-Schlüssel muss sich in derselben Region wie der Amazon-S3-Bucket befinden.
Beachten Sie, dass zusätzliche Gebühren für den DynamoDB-Export und Amazon-S3-Speicherkosten anfallen. Exportierte Daten in Amazon S3 bleiben bestehen, nachdem ein Auftrag ausgeführt wurde, sodass Sie sie ohne zusätzliche DynamoDB-Exporte wiederverwenden können. Eine Voraussetzung für die Verwendung des Konnektors ist, dass die zeitpunktbezogene Wiederherstellung (PITR) für die Tabelle aktiviert ist.
Der DynamoDB-ETL-Konnektor oder Export-Konnektor unterstützt keine Filter oder Pushdown-Prädikate, die an der DynamoDB-Quelle angewendet werden sollen.
In den folgenden Codebeispielen wird gezeigt, wie die Anzahl der Partitionen (über den Export-Konnektor) gelesen und gedruckt werden.
Diese Beispiele zeigen, wie die Anzahl der Partitionen (über den Export-Konnektor) aus einem AWS-Glue-Datenkatalog mit einer dynamodb
-Klassifikation gelesen und gedruckt werden.
Vereinfachung der Verwendung einer DynamoDB-Export-JSON
DynamoDB-Exporte mit dem AWS Glue-DynamoDB-Export-Konnektor ergeben JSON-Dateien mit speziellen verschachtelten Strukturen. Weitere Informationen finden Sie unter Datenobjekte. AWS Glue bietet eine DynamicFrame-Transformation, die solche Strukturen in eine einfacher nutzbare Form für nachgelagerte Anwendungen aufheben kann.
Die Transformation kann auf zwei Arten aufgerufen werden. Beim Aufrufen einer Methode zum Lesen aus DynamoDB können Sie die Verbindungsoption "dynamodb.simplifyDDBJson"
mit dem Wert "true"
festlegen. Sie können die Transformation auch als eigenständige Methode aufrufen, die in der AWS-Glue-Bibliothek verfügbar ist.
Betrachten Sie das folgende Schema, das durch einen DynamoDB-Export generiert wurde:
root |-- Item: struct | |-- parentMap: struct | | |-- M: struct | | | |-- childMap: struct | | | | |-- M: struct | | | | | |-- appName: struct | | | | | | |-- S: string | | | | | |-- packageName: struct | | | | | | |-- S: string | | | | | |-- updatedAt: struct | | | | | | |-- N: string | |-- strings: struct | | |-- SS: array | | | |-- element: string | |-- numbers: struct | | |-- NS: array | | | |-- element: string | |-- binaries: struct | | |-- BS: array | | | |-- element: string | |-- isDDBJson: struct | | |-- BOOL: boolean | |-- nullValue: struct | | |-- NULL: boolean
Die Transformation simplifyDDBJson
vereinfacht dies zu:
root |-- parentMap: struct | |-- childMap: struct | | |-- appName: string | | |-- packageName: string | | |-- updatedAt: string |-- strings: array | |-- element: string |-- numbers: array | |-- element: string |-- binaries: array | |-- element: string |-- isDDBJson: boolean |-- nullValue: null
Anmerkung
simplifyDDBJson
ist in AWS Glue 3.0 und späteren Versionen verfügbar. Mit der Transformation unnestDDBJson
können Sie auch das JSON aus einem DynamoDB-Export vereinfachen. Wir empfehlen Benutzern, von unnestDDBJson
auf simplifyDDBJson
umzusteigen.
Konfigurieren der Parallelisierung bei DynamoDB-Vorgängen
Um die Leistung zu verbessern, können Sie bestimmte für den DynamoDB-Konnektor verfügbare Parameter anpassen. Ihr Ziel bei der Anpassung der Parallelisierungsparameter ist es, die Nutzung der bereitgestellten AWS-Glue-Worker zu maximieren. Wenn Sie dann mehr Leistung benötigen, empfehlen wir Ihnen, den Auftrag aufzuskalieren, indem Sie die Anzahl der DPUs erhöhen.
Sie können die Parallelisierung in einem DynamoDB-Lesevorgang mit dem Parameter dynamodb.splits
ändern, wenn Sie den ETL-Konnektor verwenden. Wenn Sie den Export-Konnektor zum Lesen verwenden, müssen Sie die Anzahl der Splits für die Spark-Executor-Parallelisierung nicht konfigurieren. Sie können die Parallelisierung in einem DynamoDB-Schreibvorgang mit dynamodb.output.numParallelTasks
ändern.
Lesen mit dem DynamoDB-ETL-Konnektor
Wir empfehlen Ihnen, die Berechnung von dynamodb.splits
auf der Grundlage der in Ihrer Auftragskonfiguration festgelegten maximalen Anzahl von Workern und der folgenden numSlots
-Berechnung durchzuführen. Bei einer automatischen Skalierung kann sich die tatsächliche Anzahl verfügbarer Worker unter dieser Obergrenze ändern. Weitere Informationen zur Festlegung der Höchstzahl an Workern finden Sie unter Anzahl der Worker (NumberOfWorkers
) inKonfiguration der Auftragseigenschaften für Spark-Jobs in AWS Glue.
-
numExecutors = NumberOfWorkers - 1
Für den Kontext ist ein Executor für den Spark-Treiber reserviert; andere Executors werden für die Datenverarbeitung verwendet.
-
numSlotsPerExecutor =
-
numSlots = numSlotsPerExecutor * numExecutors
Wir empfehlen Ihnen dynamodb.splits
auf die Anzahl der verfügbaren Slots einzustellen, numSlots
.
In DynamoDB schreiben
Der Parameter dynamodb.output.numParallelTasks
wird verwendet, um die WCU pro Spark-Aufgabe anhand der folgenden Berechnung zu bestimmen:
permittedWcuPerTask = ( TableWCU * dynamodb.throughput.write.percent ) /
dynamodb.output.numParallelTasks
Der DynamoDB-Writer funktioniert am besten, wenn die Konfiguration die Anzahl der Spark-Aufgaben, die in DynamoDB schreiben, genau wiedergibt. In manchen Fällen müssen Sie die Standardberechnung außer Kraft setzen, um die Schreibleistung zu verbessern. Wenn Sie diesen Parameter nicht angeben, wird die zulässige WCU pro Spark-Aufgabe automatisch nach der folgenden Formel berechnet:
-
-
numPartitions = dynamicframe.getNumPartitions()
-
numSlots
(wie zuvor in diesem Abschnitt definiert) -
numParallelTasks = min(numPartitions, numSlots)
-
-
Beispiel 1. DPU=10, WorkerType=Standard. Input DynamicFrame hat 100 RDD-Partitionen.
-
numPartitions = 100
-
numExecutors = (10 - 1) * 2 - 1 = 17
-
numSlots = 4 * 17 = 68
-
numParallelTasks = min(100, 68) = 68
-
-
Beispiel 2. DPU=10, WorkerType=Standard. Input DynamicFrame hat 20 RDD-Partitionen.
-
numPartitions = 20
-
numExecutors = (10 - 1) * 2 - 1 = 17
-
numSlots = 4 * 17 = 68
-
numParallelTasks = min(20, 68) = 20
-
Anmerkung
Aufträge auf älteren AWS-Glue-Versionen und solche, die Standard-Worker verwenden, erfordern unterschiedliche Methoden zur Berechnung der Slot-Anzahl. Wenn Sie die Leistung dieser Aufträge optimieren müssen, empfehlen wir Ihnen, auf unterstützte AWS-Glue-Versionen umzusteigen.
Referenz zur DynamoDB-Verbindungsoption
Bezeichnet eine Verbindung mit Amazon DynamoDB.
Die Anschlussmöglichkeiten bei einer Quellverbindung und eine Senkenverbindung unterscheiden sich.
„connectionType“: „dynamodb“ mit dem ETL-Konnektor als Quelle
Verwenden Sie die folgenden Verbindungsoptionen mit "connectionType": "dynamodb"
als Quelle, wenn Sie den AWS-Glue-DynamoDB-ETL-Konnektor verwenden:
-
"dynamodb.input.tableName"
: (Erforderlich) Die zu lesende DynamoDB-Tabelle. -
"dynamodb.throughput.read.percent"
(optional): Der Prozentsatz der zu verwendenden Lesekapazitätseinheiten (Read Capacity Units, RCU). Der Standard ist auf „0,5“ gesetzt. Zulässigen Werte sind „0,1“ bis „1,5“ inklusive.-
0.5
stellt die Standardleserate dar. Dies bedeutet, dass AWS Glue versucht, die Hälfte der Lesekapazität der Tabelle zu verbrauchen. Wenn Sie den Wert über0.5
anheben, erhöht AWS Glue die Anforderungsrate. Durch Senken des Werts unter0.5
wird die Leseanforderungsrate verringert. (Die tatsächliche Leserate variiert abhängig von Faktoren wie der Tatsache, ob eine einheitliche Verteilung des Schlüssels in der DynamoDB-Tabelle vorliegt.) -
Wenn sich die DynamoDB-Tabelle im On-Demand-Modus befindet, legt AWS Glue die Lesekapazität der Tabelle als 40 000 fest. Zum Exportieren einer großen Tabelle empfehlen wir, Ihre DynamoDB-Tabelle in den On-Demand-Modus zu ändern.
-
-
"dynamodb.splits"
: (Optional) Definiert die Anzahl der Teile, in die diese DynamoDB-Tabelle beim Lesen partitioniert wird. Der Standard ist auf „1“ gesetzt. Zulässigen Werte sind „1“ bis „1,000,000“ inklusive.1
stellt dar, dass es keine Parallelität gibt. Es wird dringend empfohlen, dass Sie einen größeren Wert für eine bessere Leistung angeben, indem Sie die folgende Formel verwenden. Weitere Informationen zur korrekten Einstellung eines Werts finden Sie unter Konfigurieren der Parallelisierung bei DynamoDB-Vorgängen. -
"dynamodb.sts.roleArn"
: (Optional) Die IAM-Rolle ARN, die für den kontoübergreifenden Zugriff angenommen werden soll. Dieser Parameter ist ab AWS Glue 1.0 verfügbar. -
"dynamodb.sts.roleSessionName"
: (Optional) Name der STS-Sitzung. Die Standardeinstellung ist auf „glue-dynamodb-read-sts-session“ gesetzt. Dieser Parameter ist ab AWS Glue 1.0 verfügbar.
„connectionType“: „dynamodb“ mit dem AWS Glue-DynamoDB-Export-Konnektor als Quelle
Verwenden Sie die folgenden Verbindungsoptionen mit „connectionType“: „dynamodb“ als Quelle, wenn Sie den AWS Glue-DynamoDB-Export-Konnektor verwenden, der nur ab AWS Glue 2.0 verfügbar ist:
-
"dynamodb.export"
: (Erforderlich) Ein Zeichenfolgenwert:-
Wenn Sie
ddb
einstellen, wird der AWS Glue-DynamoDB-Export-Konnektor aktiviert, wobei ein neuerExportTableToPointInTimeRequest
während des AWS Glue-Auftrags aufgerufen wird. Ein neuer Export wird mit dem Speicherort generiert, der vondynamodb.s3.bucket
andynamodb.s3.prefix
übergeben wurde. -
Wenn auf
s3
eingestellt, wird der AWS Glue-DynamoDB-Export-Konnektor aktiviert, aber die Erstellung eines neuen DynamoDB-Exports übersprungen. Stattdessen werdendynamodb.s3.bucket
unddynamodb.s3.prefix
als Amazon-S3-Speicherort eines früheren Exports der Tabelle verwendet.
-
-
"dynamodb.tableArn"
: (Erforderlich) Die zu lesende DynamoDB-Tabelle. -
"dynamodb.unnestDDBJson"
: (Optional) Standard: falsch. Zulässige Werte: Boolesch. Wenn der Wert auf „true“ festgelegt ist, wird die Verschachtelung der DynamoDB-JSON-Struktur, die in den Exporten vorhanden ist, durch eine Transformation aufgehoben. Es ist ein Fehler,"dynamodb.unnestDDBJson"
und"dynamodb.simplifyDDBJson"
gleichzeitig auf „true“ zu setzen. In AWS Glue 3.0 und späteren Versionen empfehlen wir die Verwendung von"dynamodb.simplifyDDBJson"
, um das Verhalten bei der Vereinfachung von DynamoDB-Zuordnungstypen zu verbessern. Weitere Informationen finden Sie unter Vereinfachung der Verwendung einer DynamoDB-Export-JSON. -
"dynamodb.simplifyDDBJson"
: (Optional) Standard: falsch. Zulässige Werte: Boolesch. Wenn der Wert auf „true“ festgelegt ist, wird eine Transformation zur Vereinfachung der DynamoDB-JSON-Struktur, die in den Exporten vorhanden ist, durchgeführt. Dies hat den gleichen Zweck wie die Option"dynamodb.unnestDDBJson"
, bietet jedoch eine bessere Unterstützung für DynamoDB-Zuordnungstypen oder sogar verschachtelte Zuordnungstypen in Ihrer DynamoDB-Tabelle. Diese Option ist in AWS Glue 3.0 und späteren Versionen verfügbar. Es ist ein Fehler,"dynamodb.unnestDDBJson"
und"dynamodb.simplifyDDBJson"
gleichzeitig auf „true“ zu setzen. Weitere Informationen finden Sie unter Vereinfachung der Verwendung einer DynamoDB-Export-JSON. -
"dynamodb.s3.bucket"
: (Optional) Gibt den Speicherort des Amazon S3 Bucket an, in dem der DynamoDBExportTableToPointInTime
-Prozess durchgeführt werden soll. Das Dateiformat für den Export ist DynamoDB JSON.-
"dynamodb.s3.prefix"
: (Optional) Gibt den Speicherort des Amazon S3-Präfixes im AmazonS3 Bucket an, in dem die DynamoDBExportTableToPointInTime
-Lasten gespeichert werden sollen. Wenn wederdynamodb.s3.prefix
nochdynamodb.s3.bucket
angegeben sind, werden diese Werte standardmäßig auf den in der AWS Glue-Auftragskonfiguration angegebenen Speicherort für das temporäre Verzeichnis gesetzt. Weitere Informationen finden Sie unter Spezielle Parameter, die von AWS Glue verwendet werden. -
"dynamodb.s3.bucketOwner"
: Zeigt den Bucket-Besitzer an, der für den kontoübergreifenden Amazon-S3-Zugriff benötigt wird.
-
-
"dynamodb.sts.roleArn"
: (Optional) Der IAM-Rollen-ARN, der für den kontoübergreifenden Zugriff und/oder den regionsübergreifenden Zugriff auf die DynamoDB-Tabelle übernommen werden soll. Hinweis: Dieselbe IAM-Rolle ARN wird für den Zugriff auf den für dieExportTableToPointInTime
-Anfrage angegebenen Amazon S3-Speicherort verwendet. -
"dynamodb.sts.roleSessionName"
: (Optional) Name der STS-Sitzung. Die Standardeinstellung ist auf „glue-dynamodb-read-sts-session“ gesetzt. "dynamodb.exportTime"
: (Optional) Gültige Werte: Zeichenfolgen, die ISO-8601-Instanzen darstellen. Ein Zeitpunkt, zu dem der Export erfolgen soll."dynamodb.sts.region"
: (Erforderlich, wenn ein regionsübergreifender Aufruf über einen regionalen Endpunkt getätigt wird). Die Region, in der sich die DynamoDB-Tabelle befindet, die Sie lesen möchten.
„connectionType“: „dynamodb“ mit dem ETL-Konnektor als Senke
Verwenden Sie die folgenden Verbindungsoptionen mit "connectionType": "dynamodb"
als Senke:
-
"dynamodb.output.tableName"
: (Erforderlich) Die DynamoDB-Tabelle, in die geschrieben werden soll. -
"dynamodb.throughput.write.percent"
(optional): Der Prozentsatz der zu verwendenden Schreibkapazitätseinheiten (Write Capacity Units, WCU). Der Standard ist auf „0,5“ gesetzt. Zulässigen Werte sind „0,1“ bis „1,5“ inklusive.-
0.5
stellt die Standardschreibrate dar. Dies bedeutet, dass AWS Glue versucht, die Hälfte der Schreibkapazität der Tabelle zu verbrauchen. Wenn Sie den Wert über 0,5 anheben, erhöht AWS Glue die Anforderungsrate. Durch Senken des Werts unter 0,5 wird die Schreibanforderungsrate verringert. (Die tatsächliche Schreibrate variiert abhängig von Faktoren wie der Tatsache, ob eine einheitliche Verteilung des Schlüssels in der DynamoDB-Tabelle vorliegt.) -
Wenn sich die DynamoDB-Tabelle im On-Demand-Modus befindet, legt AWS Glue die Schreibkapazität der Tabelle als
40000
fest. Zum Importieren einer großen Tabelle empfehlen wir, Ihre DynamoDB-Tabelle in den On-Demand-Modus zu ändern.
-
-
"dynamodb.output.numParallelTasks"
: (Optional) definiert, wie viele parallele Aufgaben gleichzeitig in DynamoDB geschrieben werden. Wird verwendet, um berechtigende WCU pro Spark-Aufgabe zu berechnen. In den meisten Fällen berechnet AWS Glue einen angemessenen Standardwert für diesen Wert. Weitere Informationen finden Sie unter Konfigurieren der Parallelisierung bei DynamoDB-Vorgängen. -
"dynamodb.output.retry"
: (Optional) Definiert die Anzahl erneuter Versuche, die durchgeführt werden, wenn es eineProvisionedThroughputExceededException
aus DynamoDB gibt. Der Standard ist auf „10“ gesetzt. -
"dynamodb.sts.roleArn"
: (Optional) Die IAM-Rolle ARN, die für den kontoübergreifenden Zugriff angenommen werden soll. -
"dynamodb.sts.roleSessionName"
: (Optional) Name der STS-Sitzung. Die Standardeinstellung ist auf „glue-dynamodb-write-sts-session“ gesetzt.