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.
Kopieren von Daten zwischen DynamoDB und Amazon S3
Wenn Sie Daten in einer DynamoDB-Tabelle vorliegen haben, können Sie sie mit Hive in einen Amazon-S3-Bucket kopieren.
Dies ist sinnvoll, wenn Sie ein Datenarchiv in Ihrer DynamoDB-Tabelle erstellen möchten. Angenommen, Sie haben eine Testumgebung, in der Sie mit einer grundlegenden Reihe von Testdaten in DynamoDB arbeiten müssen. Sie können die grundlegenden Daten in einen Amazon-S3-Bucket kopieren und Ihre Tests dann ausführen. Danach können Sie die Testumgebung durch Wiederherstellen der grundlegenden Daten aus dem Amazon-S3-Bucket in DynamoDB zurücksetzen.
Wenn Sie das Tutorial: Arbeiten mit Amazon DynamoDB und Apache Hive durchgearbeitet haben, verfügen Sie bereits über einen Amazon-S3-Bucket, der Ihre Amazon-EMR-Protokolle enthält. Sie können diesen Bucket für die Beispiele in diesem Abschnitt verwenden, wenn Sie den Stammpfad des Buckets kennen:
Öffnen Sie die Amazon EMR-Konsole unter https://console.aws.amazon.com/emr
. -
Wählen Sie für Name Ihren Cluster aus.
-
Der URI ist in Log URI unter Configuration Details aufgelistet.
-
Notieren Sie den Stammpfad des Buckets. Die Namenskonvention lautet wie folgt:
s3://aws-logs-
accountID
-region
wobei
AccountID
Ihre AWS accountID und Region die AWS Region für den Bucket ist.
Anmerkung
Bei diesen Beispielen verwenden wir ein Unterpfad innerhalb des Buckets, wie in diesem Fall:
s3://aws-logs-123456789012-us-west-2
/hive-test
Die folgenden Verfahren setzen voraus, dass Sie die Schritte im Tutorial befolgt haben und über eine externe Tabelle, die in DynamoDB verwaltet wird (ddb_features), verfügen.
Themen
Kopieren von Daten mit dem Hive-Standardformat
Beispiel Von DynamoDB zu Amazon S3
Verwenden Sie eine INSERT OVERWRITE
-Anweisung, um direkt in Amazon S3 zu schreiben.
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;
Die Datendatei in Amazon S3 sieht folgendermaßen aus:
920709
^A
Soldiers Farewell Hill^A
Summit^A
NM^A
32.3564729^A
-108.33004616135 1178153^A
Jones Run^A
Stream^A
PA^A
41.2120086^A
-79.25920781260 253838^A
Sentinel Dome^A
Summit^A
CA^A
37.7229821^A
-119.584338133 264054^A
Neversweet Gulch^A
Valley^A
CA^A
41.6565269^A
-122.83614322900 115905^A
Chacaloochee Bay^A
Bay^A
AL^A
30.6979676^A
-87.97388530
Jedes Feld wird durch ein SoH-Zeichen getrennt (Anfang der Überschrift, 0x01). In der Datei wird SoH als ^A
angezeigt.
Beispiel Von Amazon S3 zu DynamoDB
-
Erstellen Sie eine externe Tabelle, die auf die unformatierten Daten in Amazon S3 verweist.
CREATE EXTERNAL TABLE s3_features_unformatted (feature_id BIGINT, feature_name STRING , feature_class STRING , state_alpha STRING, prim_lat_dec DOUBLE , prim_long_dec DOUBLE , elev_in_ft BIGINT) LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
-
Kopieren Sie die Daten nach DynamoDB.
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;
Kopieren von Daten in einem benutzerdefinierten Format
Wenn Sie ein eigenes Feldtrennzeichen angeben möchten, können Sie eine externe Tabelle erstellen, die dem Amazon S3-Bucket zugeordnet ist. Sie können diese Vorgehensweise zum Erstellen von Datendateien mit CSV-Werten verwenden.
Beispiel Von DynamoDB zu Amazon S3
-
Erstellen Sie eine externe Hive-Tabelle, die Amazon S3 zugeordnet ist. Stellen Sie dabei sicher, dass die Datentypen mit den Typen der externen DynamoDB-Tabelle konsistent sind.
CREATE EXTERNAL TABLE s3_features_csv (feature_id BIGINT, feature_name STRING, feature_class STRING, state_alpha STRING, prim_lat_dec DOUBLE, prim_long_dec DOUBLE, elev_in_ft BIGINT) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
-
Kopieren Sie die Daten aus DynamoDB.
INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;
Die Datendatei in Amazon S3 sieht folgendermaßen aus:
920709,Soldiers Farewell Hill,Summit,NM,32.3564729,-108.3300461,6135 1178153,Jones Run,Stream,PA,41.2120086,-79.2592078,1260 253838,Sentinel Dome,Summit,CA,37.7229821,-119.58433,8133 264054,Neversweet Gulch,Valley,CA,41.6565269,-122.8361432,2900 115905,Chacaloochee Bay,Bay,AL,30.6979676,-87.9738853,0
Beispiel Von Amazon S3 zu DynamoDB
Mit einer einzigen HiveQL-Anweisung können Sie die DynamoDB-Tabelle mit den Daten aus Amazon S3: auffüllen:
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;
Kopieren von Daten ohne Spaltenmapping
Sie können Daten aus DynamoDB in einem unformatierten Format kopieren und sie ohne Angabe von Datentypen oder Spaltenmapping in Amazon S3 schreiben. Sie können diese Methode zum Erstellen eines Archivs von DynamoDB-Daten und zum Speichern in Amazon S3 verwenden.
Beispiel Von DynamoDB zu Amazon S3
-
Erstellen Sie eine externe Tabelle im Zusammenhang mit Ihrer DynamoDB-Tabelle. (In dieser HiveQL-Anweisung ist keine
dynamodb.column.mapping
enthalten.)CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
-
Erstellen Sie eine weitere externe Tabelle im Zusammenhang mit Ihrem Amazon-S3-Bucket.
CREATE EXTERNAL TABLE s3_features_no_mapping (item MAP<STRING, STRING>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://aws-logs-123456789012-us-west-2/hive-test';
-
Kopieren Sie die Daten aus DynamoDB in Amazon S3.
INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;
Die Datendatei in Amazon S3 sieht folgendermaßen aus:
Name
^C
{"s":"Soldiers Farewell Hill"}^B
State^C
{"s":"NM"}^B
Class^C
{"s":"Summit"}^B
Elevation^C
{"n":"6135"}^B
Latitude^C
{"n":"32.3564729"}^B
Id^C
{"n":"920709"}^B
Longitude^C
{"n":"-108.3300461"} Name^C
{"s":"Jones Run"}^B
State^C
{"s":"PA"}^B
Class^C
{"s":"Stream"}^B
Elevation^C
{"n":"1260"}^B
Latitude^C
{"n":"41.2120086"}^B
Id^C
{"n":"1178153"}^B
Longitude^C
{"n":"-79.2592078"} Name^C
{"s":"Sentinel Dome"}^B
State^C
{"s":"CA"}^B
Class^C
{"s":"Summit"}^B
Elevation^C
{"n":"8133"}^B
Latitude^C
{"n":"37.7229821"}^B
Id^C
{"n":"253838"}^B
Longitude^C
{"n":"-119.58433"} Name^C
{"s":"Neversweet Gulch"}^B
State^C
{"s":"CA"}^B
Class^C
{"s":"Valley"}^B
Elevation^C
{"n":"2900"}^B
Latitude^C
{"n":"41.6565269"}^B
Id^C
{"n":"264054"}^B
Longitude^C
{"n":"-122.8361432"} Name^C
{"s":"Chacaloochee Bay"}^B
State^C
{"s":"AL"}^B
Class^C
{"s":"Bay"}^B
Elevation^C
{"n":"0"}^B
Latitude^C
{"n":"30.6979676"}^B
Id^C
{"n":"115905"}^B
Longitude^C
{"n":"-87.9738853"}
Jedes Feld beginnt mit einem STX-Zeichen (Textanfang, 0x02) und endet mit einem ETX-Zeichen (Textende, 0x03). In der Datei wird für STX ^B
und für ETX ^C
angegeben.
Beispiel Von Amazon S3 zu DynamoDB
Mit einer einzigen HiveQL-Anweisung können Sie die DynamoDB-Tabelle mit den Daten aus Amazon S3: auffüllen:
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;
Anzeigen der Daten in Amazon S3
Wenn Sie eine Verbindung zum Leader-Knoten über SSH herstellen, können Sie die AWS Command Line Interface (AWS CLI) für den Zugriff auf die Daten verwenden, die von Hive in Amazon S3 geschrieben wurden.
Die folgenden Schritte setzen voraus, dass Sie die Daten aus DynamoDB in Amazon S3 mit einem der in diesem Abschnitt beschriebenen Verfahren kopiert haben.
-
Wenn Sie sich an der Hive-Eingabeaufforderung befinden, beenden Sie die Linux-Eingabeaufforderung.
hive> exit;
-
Führen Sie den Inhalt des Hive-Testverzeichnisses in Ihrem Amazon-S3-Bucket auf. (Dies ist der Speicherort, an den Hive die Daten aus DynamoDB kopiert hat.)
aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/
Die Antwort sollte wie folgt aussehen:
2016-11-01 23:19:54 81983 000000_0
Der Dateiname (000000_0) wird vom System generiert.
-
(Optional) Sie können die Datendatei aus Amazon S3 in das lokale Dateisystem auf dem Leader-Knoten kopieren. Anschließend können Sie mithilfe von Standardbefehlszeilen-Dienstprogrammen von Linux mit den Daten in der Datei arbeiten.
aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .
Die Antwort sollte wie folgt aussehen:
download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0
Anmerkung
Das lokale Dateisystem auf dem Leader-Knoten verfügt über begrenzte Kapazität. Verwenden Sie diesen Befehl nicht mit Dateien, die größer als der im lokalen Dateisystem verfügbare Platz sind.