Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Se hai dati in una tabella DynamoDB, puoi usare Hive per copiare i dati nel file system distribuito Hadoop (). HDFS
Questa operazione può essere eseguita se si esegue un MapReduce processo che richiede dati provenienti da DynamoDB. Se copi i dati da DynamoDB HDFS in, Hadoop può elaborarli, utilizzando tutti i nodi disponibili nel cluster Amazon in parallelo. EMR Una volta completato il MapReduce lavoro, puoi scrivere i risultati da a. HDFS DDB
Negli esempi seguenti, Hive leggerà e scriverà HDFS nella seguente directory: /user/hadoop/hive-test
Nota
Gli esempi in questa sezione presuppongono che sia stata seguita la procedura in Tutorial: Utilizzo di Amazon DynamoDB e Apache Hive e che sia presente una tabella esterna in DynamoDB denominata ddb_features.
Argomenti
Copia di dati utilizzando il formato predefinito Hive
Esempio Da DynamoDB a HDFS
Usa un'INSERT OVERWRITE
istruzione a cui scrivere direttamente. HDFS
INSERT OVERWRITE DIRECTORY 'hdfs:///user/hadoop/hive-test' SELECT * FROM ddb_features;
Il file di dati in HDFS ha il seguente aspetto:
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
Ogni campo è separato da un SOH carattere (inizio del titolo, 0x01). Nel file, SOH appare come. ^A
Esempio Da HDFS a DynamoDB
-
Crea una tabella esterna mappata ai dati non formattati in. 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';
-
Copiare i dati in DynamoDB.
INSERT OVERWRITE TABLE ddb_features SELECT * FROM hdfs_features_unformatted;
Copia di dati con un formato specificato dall'utente
Se desideri utilizzare un carattere separatore di campo diverso, puoi creare una tabella esterna mappata alla directory. HDFS È possibile utilizzare questa tecnica per creare file di dati con valori separati da virgole (). CSV
Esempio Da DynamoDB a HDFS
-
Crea una tabella esterna Hive a cui mappare. HDFS Quando si esegue questa operazione, assicurarsi che i tipi di dati siano coerenti con quelli della tabella esterna 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';
-
Copiare i dati da DynamoDB.
INSERT OVERWRITE TABLE hdfs_features_csv SELECT * FROM ddb_features;
Il file di dati in HDFS ha il seguente aspetto:
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
Esempio Da HDFS a DynamoDB
Con una singola istruzione HiveQL, è possibile popolare la tabella DynamoDB utilizzando i dati di: HDFS
INSERT OVERWRITE TABLE ddb_features SELECT * FROM hdfs_features_csv;
Copia di dati senza mappature di colonne
È possibile copiare i dati da DynamoDB in formato raw e scriverli senza specificare alcun tipo HDFS di dati o mappatura di colonne. È possibile utilizzare questo metodo per creare un archivio di dati DynamoDB e archiviarlo. HDFS
Nota
Se la tabella DynamoDB contiene attributi di tipo Map, List, Boolean o Null, questo è l'unico modo per utilizzare Hive per copiare i dati da DynamoDB a. HDFS
Esempio Da DynamoDB a HDFS
-
Crea una tabella esterna associata alla tabella DynamoDB. In questa istruzione HiveQL non c'è
dynamodb.column.mapping
.CREATE EXTERNAL TABLE ddb_features_no_mapping (item MAP<STRING, STRING>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Features");
-
Crea un'altra tabella esterna associata alla tua HDFS directory.
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';
-
Copia i dati da DynamoDB a. HDFS
INSERT OVERWRITE TABLE hdfs_features_no_mapping SELECT * FROM ddb_features_no_mapping;
Il file di dati in HDFS ha il seguente aspetto:
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"}
Ogni campo inizia con un STX carattere (inizio del testo, 0x02) e termina con un ETX carattere (fine del testo, 0x03). Nel file, STX appare come e appare come^B
. ETX ^C
Esempio Da HDFS a DynamoDB
Con una singola istruzione HiveQL, è possibile popolare la tabella DynamoDB utilizzando i dati di: HDFS
INSERT OVERWRITE TABLE ddb_features_no_mapping SELECT * FROM hdfs_features_no_mapping;
Accesso ai dati in HDFS
HDFSè un file system distribuito, accessibile a tutti i nodi del EMR cluster Amazon. Se lo utilizzi SSH per connetterti al nodo leader, puoi utilizzare gli strumenti a riga di comando per accedere ai dati su cui Hive ha scritto. HDFS
HDFSnon è la stessa cosa del file system locale sul nodo leader. Non è possibile lavorare con file e directory HDFS utilizzando comandi Linux standard (comecat
, cp
mv
, orm
). Invece, queste attività vengono eseguite utilizzando il comando hadoop
fs
.
I passaggi seguenti sono scritti presupponendo che i dati siano stati copiati da DynamoDB HDFS utilizzando una delle procedure di questa sezione.
-
Se ti trovi attualmente al prompt dei comandi di Hive, passa al prompt dei comandi di Linux.
hive> exit;
-
Elenca il contenuto della directory -test inthe /user/hadoop/hive. HDFS Questo è il percorso in cui Hive ha copiato i dati da DynamoDB.
hadoop fs -ls /user/hadoop/hive-test
La risposta dovrebbe essere simile alla seguente:
Found 1 items -rw-r--r-- 1 hadoop hadoop 29504 2016-06-08 23:40 /user/hadoop/hive-test/000000_0
Il nome del file (000000_0) è generato dal sistema.
-
Visualizzare il contenuto del file :
hadoop fs -cat /user/hadoop/hive-test/000000_0
Nota
In questo esempio, il file è relativamente piccolo (circa 29 KB). Fare attenzione quando si utilizza questo comando con file molto grandi o contenenti caratteri non stampabili.
-
(Facoltativo) È possibile copiare il file HDFS di dati dal file system locale sul nodo leader. Successivamente, sarà possibile utilizzare le utilità della riga di comando Linux standard per lavorare con i dati nel file.
hadoop fs -get /user/hadoop/hive-test/000000_0
Questo comando non sovrascriverà il file.
Nota
Il file system locale sul nodo principale ha una capacità limitata. Non utilizzare questo comando con file più grandi dello spazio disponibile nel file system locale.