Caricamento di dati da host remoti - Amazon Redshift

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à.

Caricamento di dati da host remoti

Puoi utilizzare il COPY comando per caricare dati in parallelo da uno o più host remoti, come EC2 istanze Amazon o altri computer. COPYsi connette agli host remoti utilizzando SSH ed esegue comandi sugli host remoti per generare output di testo.

L'host remoto può essere un'istanza Amazon EC2 Linux o un altro computer Unix o Linux configurato per accettare SSH connessioni. Questa guida presuppone che il tuo host remoto sia un'EC2istanza Amazon. Se la procedura è diversa per un altro computer, la guida indicherà la differenza.

Amazon Redshift può connettersi a più host e può aprire più SSH connessioni per ogni host. Amazon Redshift invia un comando univoco attraverso ogni connessione per generare output di testo per l'output standard dell'host, che legge quindi come un file di testo.

Prima di iniziare

Prima di iniziare, devi disporre dei seguenti requisiti:

  • Una o più macchine host, come EC2 le istanze Amazon, a cui puoi connetterti utilizzandoSSH.

  • Origini dati negli host.

    Saranno forniti i comandi che il cluster Amazon Redshift eseguirà sugli host per generare l'output di testo. Dopo la connessione del cluster a un host, il COPY comando esegue i comandi, legge il testo dallo standard output degli host e carica i dati in parallelo in una tabella Amazon Redshift. L'output di testo deve essere in una forma che il COPY comando possa assimilare. Per ulteriori informazioni, consulta Preparazione dei dati di input

  • Accesso agli host dal computer.

    Per un'EC2istanza Amazon, utilizzerai una SSH connessione per accedere all'host. Devi accedere all'host per aggiungere la chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate dell'host.

  • Un cluster Amazon Redshift in esecuzione.

    Per informazioni su come avviare un cluster, consultare Guida alle operazioni di base di Amazon Redshift.

Processo di caricamento dei dati

Questa sezione illustra il processo di caricamento dei dati da host remoti. Le sezioni seguenti forniscono le informazioni dettagliate necessarie per completare ogni fase.

Fase 1: recupero degli indirizzi IP dei nodi del cluster e della chiave pubblica del cluster

Sarà utilizzato l'indirizzo IP per ciascun nodo del cluster per configurare i gruppi di sicurezza dell'host in modo da consentire l'accesso dal cluster Amazon Redshift utilizzando questi indirizzi IP.

Per recuperare la chiave pubblica del cluster e gli indirizzi IP dei nodi del cluster tramite la console
  1. Accedere alla console di gestione di Amazon Redshift.

  2. Nel riquadro di navigazione scegli Clusters (Cluster).

  3. Selezionare il cluster dall'elenco.

  4. Individua il gruppo SSHIngestion Settings.

    Prendere nota dei valori di Cluster Public Key (Chiave pubblica del cluster) e Node IP addresses (Indirizzi IP del nodo). Queste informazioni saranno utili per le fasi successive.

    Schermata del gruppo SSH Ingestion Settings che mostra gli indirizzi IP della chiave pubblica del cluster e del nodo.

    Per configurare l'host affinché accetti la connessione da Amazon Redshift, saranno utilizzati gli indirizzi IP della fase 3. A seconda del tipo di host a cui ti connetti e del fatto che si trovi in unVPC, utilizzerai gli indirizzi IP pubblici o gli indirizzi IP privati.

Per recuperare la chiave pubblica del cluster e gli indirizzi IP del nodo del cluster per il cluster utilizzando Amazon CLI Redshift, esegui il comando describe-clusters.

Per esempio:

aws redshift describe-clusters --cluster-identifier <cluster-identifier>

La risposta includerà l'elenco ClusterPublicKey e l'elenco di indirizzi IP privati e pubblici, simili ai seguenti:

{ "Clusters": [ { "VpcSecurityGroups": [], "ClusterStatus": "available", "ClusterNodes": [ { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "LEADER", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-0", "PublicIPAddress": "10.nnn.nnn.nnn" }, { "PrivateIPAddress": "10.nnn.nnn.nnn", "NodeRole": "COMPUTE-1", "PublicIPAddress": "10.nnn.nnn.nnn" } ], "AutomatedSnapshotRetentionPeriod": 1, "PreferredMaintenanceWindow": "wed:05:30-wed:06:00", "AvailabilityZone": "us-east-1a", "NodeType": "dc2.large", "ClusterPublicKey": "ssh-rsa AAAABexamplepublickey...Y3TAl Amazon-Redshift", ... ... }

Per recuperare la chiave pubblica del cluster e gli indirizzi IP del nodo del cluster per il cluster utilizzando Amazon API Redshift, utilizza l' DescribeClusters azione. Per ulteriori informazioni, consulta describe-clusters nella Amazon Redshift Guide o CLInella Amazon Redshift Guide. DescribeClustersAPI

Fase 2: Aggiunta della chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate di ciascun host

Aggiungi la chiave pubblica del cluster al file delle chiavi autorizzate di ciascun host in modo che l'host riconosca Amazon Redshift e accetti la SSH connessione.

Come aggiungere la chiave pubblica del cluster Amazon Redshift al file di chiavi autorizzate di ciascun host
  1. Accedi all'host utilizzando una SSH connessione.

    Per informazioni sulla connessione a un'istanza utilizzandoSSH, consulta Connect to Your Instance nella Amazon EC2 User Guide.

  2. Copia la chiave pubblica di Amazon Redshift dalla console o dal testo della CLI risposta.

  3. Copiare e incollare i contenuti della chiave pubblica nel file /home/<ssh_username>/.ssh/authorized_keys nell'host remoto. Il valore <ssh_username> deve corrispondere al valore per il campo "username" nel file manifest. Includere la stringa completa, compreso il prefisso "ssh-rsa " e il suffisso "Amazon-Redshift". Ad esempio:

    ssh-rsa AAAACTP3isxgGzVWoIWpbVvRCOzYdVifMrh… uA70BnMHCaMiRdmvsDOedZDOedZ Amazon-Redshift

Fase 3: Configurazione dell'host affinché accetti tutti gli indirizzi IP del cluster Amazon Redshift

Se lavori con un'EC2istanza Amazon o un EMR cluster Amazon, aggiungi le regole in entrata al gruppo di sicurezza dell'host per consentire il traffico proveniente da ogni nodo del cluster Amazon Redshift. Per Tipo, seleziona SSH con TCP protocollo sulla porta 22. In Origine, inserire gli indirizzi IP dei nodi del cluster di Amazon Redshift recuperati in Fase 1: recupero degli indirizzi IP dei nodi del cluster e della chiave pubblica del cluster. Per informazioni sull'aggiunta di regole a un gruppo di EC2 sicurezza Amazon, consulta Authorizing Inbound Traffic for Your Instances nella Amazon EC2 User Guide.

Utilizza gli indirizzi IP privati quando:

  • Hai un cluster Amazon Redshift che non si trova in un Virtual Private Cloud (VPC) e un'istanza Amazon EC2 -Classic, entrambi situati nella stessa regione. AWS

  • Hai un cluster Amazon Redshift che si trova in un'VPCistanza Amazon EC2 e un'VPCistanza Amazon, entrambi situati nella stessa AWS regione e nella stessa. VPC

In alternativa, utilizza gli indirizzi IP pubblici.

Per ulteriori informazioni sull'utilizzo di Amazon Redshift in aVPC, consulta Managing Clusters in Virtual Private Cloud (VPC) nella Amazon Redshift Management Guide.

Fase 4: ottenere una chiave pubblica per l'host

Facoltativamente, è possibile fornire la chiave pubblica dell'host nel file manifest in modo che Amazon Redshift possa identificare l'host. Il COPY comando non richiede la chiave pubblica dell'host ma, per motivi di sicurezza, consigliamo vivamente di utilizzare una chiave pubblica per prevenire gli attacchi «». man-in-the-middle

È possibile trovare la chiave pubblica dell'host nel seguente percorso, dove <ssh_host_rsa_key_name> è il nome univoco della chiave pubblica dell'host:

: /etc/ssh/<ssh_host_rsa_key_name>.pub
Nota

Amazon Redshift supporta RSA solo le chiavi. Non supportiamo DSA le chiavi.

Quando crei il file manifest alla fase 5, incollerai il testo della chiave pubblica nel campo "Public Key" (Chiave pubblica) nella voce del file manifest.

Fase 5: creazione di un file manifest

Il COPY comando può connettersi a più host utilizzando SSH e può creare più SSH connessioni a ciascun host. COPYesegue un comando tramite ogni connessione host, quindi carica l'output dei comandi in parallelo nella tabella. Il file manifest è un file di testo nel JSON formato utilizzato da Amazon Redshift per connettersi all'host. Il file manifest specifica gli endpoint SSH host e i comandi che vengono eseguiti sugli host per restituire i dati ad Amazon Redshift. Facoltativamente, puoi includere la chiave pubblica dell'host, il nome utente di login e un flag obbligatorio per ogni voce.

Crea il file manifest nel computer locale. In un passaggio successivo, il file viene caricato in Amazon S3.

Il file manifest è nel seguente formato:

{ "entries": [ {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"}, {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "host_user_name"} ] }

Il file manifest contiene un costrutto «entry» per ogni connessione. SSH Ogni voce rappresenta una singola SSH connessione. È possibile avere più connessioni a un singolo host o più connessioni a più host. Le doppie virgolette sono richieste come mostrato, sia per i nomi dei campi sia per i valori. L'unico valore che non necessita di doppie virgolette è il valore booleano true o false per il campo obbligatorio.

Di seguito sono descritti i campi del file manifest.

endpoint

L'URLindirizzo o l'indirizzo IP dell'host. Ad esempio, "ec2-111-222-333.compute-1.amazonaws.com" o "22.33.44.56"

command

Il comando che verrà eseguito dall'host per generare output di testo o binario (gzip, lzop, or bzip2). Il comando può essere qualsiasi comando che l'utente "host_user_name" è autorizzato a eseguire. Il comando può essere semplice come stampare un file o eseguire una query su un database o lanciare uno script. L'output (file di testo, file binario gzip, file binario lzop o file binario bzip2) deve essere in un formato che il comando Amazon Redshift possa importare. COPY Per ulteriori informazioni, consulta Preparazione dei dati di input.

publickey

(Facoltativo) La chiave pubblica dell'host. Se fornita, Amazon Redshift userà la chiave pubblica per identificare l'host. Se la chiave pubblica non viene fornita, Amazon Redshift non tenterà l'identificazione dell'host. Ad esempio, se la chiave pubblica dell'host remoto è ssh-rsa AbcCbaxxx…xxxDHKJ root@amazon.com, digita il seguente testo nel campo della chiave pubblica: AbcCbaxxx…xxxDHKJ.

mandatory

(Facoltativo) Indica se il COPY comando deve fallire se la connessione fallisce. Il valore predefinito è false. Se Amazon Redshift non effettua correttamente almeno una connessione, il COPY comando ha esito negativo.

username

(Facoltativo) Il nome utente che verrà utilizzato per accedere al sistema host ed eseguire il comando remoto. Il nome di login dell'utente deve essere lo stesso utilizzato per aggiungere la chiave pubblica al file delle chiavi autorizzate nella fase 2. Il nome utente predefinito è "redshift".

Il seguente esempio mostra un manifest completato per aprire quattro connessioni allo stesso host ed eseguire un comando diverso tramite ciascuna connessione:

{ "entries": [ {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata1.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata2.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata3.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"}, {"endpoint":"ec2-184-72-204-112.compute-1.amazonaws.com", "command": "cat loaddata4.txt", "mandatory":true, "publickey": "ec2publickeyportionoftheec2keypair", "username": "ec2-user"} ] }

Fase 6: Caricamento del file manifest in un bucket Amazon S3

Caricare il file manifest in un bucket Amazon S3. Se il bucket Amazon S3 non si trova nella stessa AWS regione del cluster Amazon Redshift, devi utilizzare l'REGIONopzione per specificare la AWS regione in cui si trova il manifest. Per ulteriori informazioni sulla creazione di un bucket Amazon S3 e sul caricamento di un file, consultare Guida per l'utente di Amazon Simple Storage Service.

Passaggio 7: esegui il COPY comando per caricare i dati

Eseguire un comando COPY per effettuare la connessione all'host e caricare i dati in una tabella Amazon Redshift. Nel COPY comando, specifica il percorso esplicito dell'oggetto Amazon S3 per il file manifest e SSH includi l'opzione. Ad esempio,

COPY sales FROM 's3://amzn-s3-demo-bucket/ssh_manifest' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|' SSH;
Nota

Se utilizzi la compressione automatica, il COPY comando esegue due letture di dati, il che significa che esegue il comando remoto due volte. La prima operazione di lettura consiste nel fornire un campione per l'analisi della compressione e la seconda operazione di lettura carica effettivamente i dati. Se la doppia esecuzione del comando remoto può causare un problema, dati i potenziali effetti collaterali, è necessario disattivare la compressione automatica. Per disattivare la compressione automatica, esegui il COPY comando con l'COMPUPDATEopzione impostata su. OFF Per ulteriori informazioni, consulta Caricamento di tabelle con compressione automatica.