Menyalin data antara DynamoDB dan HDFS - Amazon DynamoDB

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 HDFS

Jika memiliki data di tabel DynamoDB, Anda dapat menggunakan Hive untuk menyalin data ke Hadoop Distributed File System (HDFS).

Anda dapat melakukan ini jika Anda menjalankan MapReduce pekerjaan yang membutuhkan data dari DynamoDB. Jika Anda menyalin data dari DynamoDB ke HDFS, Hadoop dapat memprosesnya, menggunakan semua simpul yang tersedia di klaster Amazon EMR secara paralel. Ketika MapReduce pekerjaan selesai, Anda kemudian dapat menulis hasil dari HDFS ke DDB.

Dalam contoh berikut, Hive akan membaca dari dan menulis ke direktori HDFS berikut: /user/hadoop/hive-test

catatan

Contoh di bagian ini ditulis dengan asumsi Anda mengikuti langkah-langkah di Tutorial: Menggunakan Amazon DynamoDB dan Apache Hive dan memiliki tabel eksternal di DynamoDB bernama ddb_features.

Menyalin data menggunakan format default Hive

contoh Dari DynamoDB ke HDFS

Gunakan pernyataan INSERT OVERWRITE untuk menulis langsung ke HDFS.

INSERT OVERWRITE DIRECTORY 'hdfs:///user/hadoop/hive-test' SELECT * FROM ddb_features;

File data di HDFS tampak seperti ini:

920709^ASoldiers Farewell Hill^ASummit^ANM^A32.3564729^A-108.33004616135 1178153^AJones Run^AStream^APA^A41.2120086^A-79.25920781260 253838^ASentinel Dome^ASummit^ACA^A37.7229821^A-119.584338133 264054^ANeversweet Gulch^AValley^ACA^A41.6565269^A-122.83614322900 115905^AChacaloochee Bay^ABay^AAL^A30.6979676^A-87.97388530

Setiap bidang dipisahkan oleh karakter SOH (awal mulai, 0x01). Di file, SOH muncul sebagai ^A.

contoh Dari HDFS ke DynamoDB
  1. Buat tabel eksternal yang memetakan data yang tidak diformat di HDFS.

    CREATE EXTERNAL TABLE hdfs_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 'hdfs:///user/hadoop/hive-test';
  2. Salin data ke DynamoDB.

    INSERT OVERWRITE TABLE ddb_features SELECT * FROM hdfs_features_unformatted;

Menyalin data dengan format yang ditentukan pengguna

Jika ingin menggunakan karakter pemisah bidang lain, Anda dapat membuat tabel eksternal yang dipetakan ke direktori HDFS. Anda dapat menggunakan teknik ini untuk membuat file data dengan nilai yang dipisahkan oleh koma (CSV).

contoh Dari DynamoDB ke HDFS
  1. Buat tabel eksternal Hive yang dipetakan ke HDFS. Jika Anda melakukannya, pastikan jenis data konsisten dengan jenis data yang ada di tabel eksternal DynamoDB.

    CREATE EXTERNAL TABLE hdfs_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 'hdfs:///user/hadoop/hive-test';
  2. Salin data dari DynamoDB.

    INSERT OVERWRITE TABLE hdfs_features_csv SELECT * FROM ddb_features;

File data di HDFS tampak 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 HDFS ke DynamoDB

Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari HDFS:

INSERT OVERWRITE TABLE ddb_features SELECT * FROM hdfs_features_csv;

Menyalin data tanpa pemetaan kolom

Anda dapat menyalin data dari DynamoDB dalam format mentah dan menuliskannya ke HDFS tanpa menentukan jenis data atau pemetaan kolom. Anda dapat menggunakan metode ini untuk membuat arsip data DynamoDB dan menyimpannya di HDFS.

catatan

Jika tabel DynamoDB Anda berisi atribut jenis Peta, Daftar, Boolean, atau Null, maka ini adalah satu-satunya cara Anda dapat menggunakan Hive untuk menyalin data dari DynamoDB ke HDFS.

contoh Dari DynamoDB ke HDFS
  1. 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");

  2. Buat tabel eksternal lain yang terkait dengan direktori HDFS Anda.

    CREATE EXTERNAL TABLE hdfs_features_no_mapping (item MAP<STRING, STRING>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 'hdfs:///user/hadoop/hive-test';
  3. Salin data dari DynamoDB ke HDFS.

    INSERT OVERWRITE TABLE hdfs_features_no_mapping SELECT * FROM ddb_features_no_mapping;

File data di HDFS tampak seperti ini:

Name^C{"s":"Soldiers Farewell Hill"}^BState^C{"s":"NM"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"6135"}^BLatitude^C{"n":"32.3564729"}^BId^C{"n":"920709"}^BLongitude^C{"n":"-108.3300461"} Name^C{"s":"Jones Run"}^BState^C{"s":"PA"}^BClass^C{"s":"Stream"}^BElevation^C{"n":"1260"}^BLatitude^C{"n":"41.2120086"}^BId^C{"n":"1178153"}^BLongitude^C{"n":"-79.2592078"} Name^C{"s":"Sentinel Dome"}^BState^C{"s":"CA"}^BClass^C{"s":"Summit"}^BElevation^C{"n":"8133"}^BLatitude^C{"n":"37.7229821"}^BId^C{"n":"253838"}^BLongitude^C{"n":"-119.58433"} Name^C{"s":"Neversweet Gulch"}^BState^C{"s":"CA"}^BClass^C{"s":"Valley"}^BElevation^C{"n":"2900"}^BLatitude^C{"n":"41.6565269"}^BId^C{"n":"264054"}^BLongitude^C{"n":"-122.8361432"} Name^C{"s":"Chacaloochee Bay"}^BState^C{"s":"AL"}^BClass^C{"s":"Bay"}^BElevation^C{"n":"0"}^BLatitude^C{"n":"30.6979676"}^BId^C{"n":"115905"}^BLongitude^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 HDFS ke DynamoDB

Dengan pernyataan HiveQL tunggal, Anda dapat mengisi tabel DynamoDB menggunakan data dari HDFS:

INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM hdfs_features_no_mapping;

Mengakses data di HDFS

HDFS adalah sistem file terdistribusi, dapat diakses oleh semua simpul dalam klaster Amazon EMR. Jika menggunakan SSH untuk menghubungkan ke simpul pemimpin, Anda dapat menggunakan alat baris perintah untuk mengakses data yang ditulis Hive ke HDFS.

HDFS tidak sama dengan sistem file lokal di simpul pemimpin. Anda tidak dapat menggunakan file dan direktori di HDFS menggunakan perintah Linux standar (seperti cat, cp, mv, atau rm). Sebaliknya, Anda melakukan tugas-tugas ini menggunakan perintah hadoop fs.

Langkah-langkah berikut ditulis dengan asumsi Anda telah menyalin data dari DynamoDB ke HDFS menggunakan salah satu prosedur di bagian ini.

  1. Jika saat ini Anda berada di prompt perintah Hive, keluarlah ke prompt perintah Linux.

    hive> exit;
  2. Daftar isi direktori the /user/hadoop/hive -test di HDFS. (Di sinilah Hive menyalin data dari DynamoDB.)

    hadoop fs -ls /user/hadoop/hive-test

    Responsnya akan tampak mirip dengan ini:

    Found 1 items -rw-r--r-- 1 hadoop hadoop 29504 2016-06-08 23:40 /user/hadoop/hive-test/000000_0

    Nama file (000000_0) dihasilkan sistem.

  3. Lihat konten file:

    hadoop fs -cat /user/hadoop/hive-test/000000_0
    catatan

    Dalam contoh ini, file relatif kecil (sekitar 29 KB). Hati-hati saat Anda menggunakan perintah ini dengan file yang sangat besar atau berisi karakter yang tidak dapat dicetak.

  4. (Opsional) Anda dapat menyalin file data dari HDFS ke sistem file lokal di simpul pemimpin. Setelah melakukannya, Anda dapat menggunakan utilitas baris perintah Linux standar untuk menggunakan data dalam file.

    hadoop fs -get /user/hadoop/hive-test/000000_0

    Perintah ini tidak akan menimpa file.

    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.