Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menyalin data antara DynamoDB dan Amazon S3
Jika memiliki data dalam tabel DynamoDB, Anda dapat menggunakan Hive untuk menyalin data tersebut ke bucket Amazon S3.
Anda dapat melakukannya jika ingin membuat arsip data dalam tabel DynamoDB Anda. Misalnya, anggaplah lingkungan pengujian Anda mengharuskan Anda menggunakan kumpulan data pengujian dasar di DynamoDB. Anda dapat menyalin data dasar ke bucket Amazon S3, lalu menjalankan pengujian. Setelah itu, Anda dapat mengatur ulang lingkungan pengujian dengan memulihkan data dasar dari bucket Amazon S3 ke DynamoDB.
Jika Anda bekerja menggunakan Tutorial: Menggunakan Amazon DynamoDB dan Apache Hive, maka Anda sudah memiliki bucket Amazon S3 yang berisi log Amazon EMR. Anda dapat menggunakan bucket ini untuk contoh di bagian ini, jika Anda tahu jalur root untuk bucket:
Buka konsol Amazon EMR di https://console.aws.amazon.com/emr
. -
Untuk Nama, pilih klaster Anda.
-
URI tercantum di URI Log di bagian Detail Konfigurasi.
-
Membuat catatan tentang jalur root bucket. Konvensi penamaan adalah:
s3://aws-logs-
accountID
-region
di mana
accountID
adalah ID akun AWS Anda dan wilayah adalah wilayah untuk AWS bucket.
catatan
Untuk contoh ini, kita akan menggunakan subpath dalam bucket, seperti dalam contoh ini:
s3://aws-logs-123456789012-us-west-2
/hive-test
Prosedur berikut ditulis dengan asumsi Anda mengikuti langkah-langkah di tutorial dan memiliki tabel eksternal di DynamoDB bernama ddb_features.
Topik
Menyalin data menggunakan format default Hive
contoh Dari DynamoDB ke Amazon S3
Gunakan pernyataan INSERT OVERWRITE
untuk menulis langsung ke Amazon S3.
INSERT OVERWRITE DIRECTORY 's3://aws-logs-123456789012-us-west-2/hive-test' SELECT * FROM ddb_features;
File data di Amazon S3 terlihat seperti ini:
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
Setiap bidang dipisahkan oleh karakter SOH (awal mulai, 0x01). Di file, SOH muncul sebagai ^A
.
contoh Dari Amazon S3 ke DynamoDB
-
Buat tabel eksternal yang menunjuk ke data yang belum diformat di Amazon S3.
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';
-
Salin data ke DynamoDB.
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_unformatted;
Menyalin data dengan format yang ditentukan pengguna
Jika ingin menentukan karakter pemisah bidang Anda sendiri, Anda dapat membuat tabel eksternal yang dipetakan ke bucket Amazon S3. Anda dapat menggunakan teknik ini untuk membuat file data dengan nilai yang dipisahkan oleh koma (CSV).
contoh Dari DynamoDB ke Amazon S3
-
Buat tabel eksternal Hive yang dipetakan ke Amazon S3. Jika Anda melakukannya, pastikan jenis data konsisten dengan jenis data yang ada di tabel eksternal DynamoDB.
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';
-
Salin data dari DynamoDB.
INSERT OVERWRITE TABLE s3_features_csv SELECT * FROM ddb_features;
File data di Amazon S3 terlihat seperti ini:
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
contoh Dari Amazon S3 ke DynamoDB
Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:
INSERT OVERWRITE TABLE ddb_features SELECT * FROM s3_features_csv;
Menyalin data tanpa pemetaan kolom
Anda dapat menyalin data dari DynamoDB dalam format mentah dan menuliskannya ke Amazon S3 tanpa menentukan jenis data atau pemetaan kolom. Anda dapat menggunakan metode ini untuk membuat arsip data DynamoDB dan menyimpannya di Amazon S3.
contoh Dari DynamoDB ke Amazon S3
-
Buat tabel eksternal yang terkait dengan tabel DynamoDB Anda. (Tidak ada
dynamodb.column.mapping
dalam pernyataan HiveQL ini.)CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
-
Buat tabel eksternal lain yang terkait dengan bucket Amazon S3 Anda.
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';
-
Salin data dari DynamoDB ke Amazon S3.
INSERT OVERWRITE TABLE s3_features_no_mapping SELECT * FROM ddb_features_no_mapping;
File data di Amazon S3 terlihat seperti ini:
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"}
Setiap bidang diawali dengan karakter STX (awal teks, 0x02) dan diakhiri dengan karakter ETX (akhir teks, 0x03). Dalam file tersebut, STX muncul sebagai ^B
dan ETX muncul sebagai ^C
.
contoh Dari Amazon S3 ke DynamoDB
Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari Amazon S3:
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM s3_features_no_mapping;
Melihat Data di Amazon S3
Jika menggunakan SSH untuk menghubungkan ke simpul pemimpin, Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk mengakses data yang ditulis Hive ke Amazon S3.
Langkah-langkah berikut ditulis dengan asumsi Anda telah menyalin data dari DynamoDB ke Amazon S3 menggunakan salah satu prosedur di bagian ini.
-
Jika saat ini Anda berada di prompt perintah Hive, keluarlah ke prompt perintah Linux.
hive> exit;
-
Cantumkan konten direktori hive-test di bucket Amazon S3 Anda. (Di sinilah Hive menyalin data dari DynamoDB.)
aws s3 ls s3://aws-logs-123456789012-us-west-2/hive-test/
Responsnya akan tampak mirip dengan ini:
2016-11-01 23:19:54 81983 000000_0
Nama file (000000_0) dihasilkan sistem.
-
(Opsional) Anda dapat menyalin file data dari Amazon S3 ke sistem file lokal di simpul pemimpin. Setelah melakukannya, Anda dapat menggunakan utilitas baris perintah Linux standar untuk menggunakan data dalam file.
aws s3 cp s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 .
Responsnya akan tampak mirip dengan ini:
download: s3://aws-logs-123456789012-us-west-2/hive-test/000000_0 to ./000000_0
catatan
Kapasitas sistem file lokal di simpul pemimpin terbatas. Jangan gunakan perintah ini dengan file yang lebih besar dari ruang yang tersedia di sistem file lokal.