Importazione di file con la cache distribuita - Amazon EMR

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

Importazione di file con la cache distribuita

DistributedCache è una funzionalità Hadoop in grado di aumentare l'efficienza quando una mappa o un'attività di riduzione richiede l'accesso a dati comuni. Se il cluster dipende da applicazioni esistenti o da file binari non installati al momento della creazione del cluster, è possibile utilizzare DistributedCache per importare questi file. Questa funzione consente a un nodo del cluster di leggere i file importati dal file system locale, invece di recuperare i file da altri nodi del cluster.

Per ulteriori informazioni, visitate http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/ DistributedCache .html.

È possibile richiamare DistributedCache quando si crea il cluster. I file vengono messi in cache poco prima dell'avvio del lavoro Hadoop e rimangono in cache per tutta la durata del lavoro. È possibile mettere in cache i file archiviati su qualsiasi file system compatibile con Hadoop, ad esempio HDFS o Amazon S3. La dimensione predefinita della cache dei file è 10 GB. Per modificare la dimensione della cache, riconfigurare il parametro Hadoop, local.cache.size usando l'operazione di bootstrap. Per ulteriori informazioni, consulta Creazione di operazioni di bootstrap per l'installazione di software aggiuntivo.

Tipi di file supportati

DistributedCache consente sia singoli file che archivi. I singoli file vengono memorizzati in cache come file di sola lettura. Gli eseguibili e i file binari hanno le autorizzazioni di esecuzione impostate.

Gli archivi sono uno o più file assemblati utilizzando un'utilità, ad esempio gzip. DistributedCache trasferisce i file compressi in ogni nodo principale e decomprime l'archivio come parte della memorizzazione nella cache. DistributedCache supporta i seguenti formati di compressione:

  • zip

  • tgz

  • tar.gz

  • tar

  • jar

Percorso dei file memorizzati nella cache

DistributedCache copia i file solo nei nodi principali. Se non sono presenti nodi principali nel cluster, DistributedCache copia i file nel nodo primario.

DistributedCache associa i file della cache alla directory di lavoro corrente del mappatore e del riduttore utilizzando collegamenti simbolici. Un collegamento simbolico è un alias a una posizione del file, non la posizione effettiva del file. Il valore del parametro, yarn.nodemanager.local-dirs in yarn-site.xml, specifica il percorso dei file temporanei. Amazon EMR imposta il parametro su /mnt/mapred o alcune variazioni in base al tipo di istanza e alla versione EMR. Ad esempio, un'impostazione può avere /mnt/mapred e /mnt1/mapred perché il tipo di istanza ha due volumi effimeri. I file della cache si trovano in una sottodirectory della posizione del file temporaneo in /mnt/mapred/taskTracker/archive.

Se si memorizza nella cache un singolo file, DistributedCache inserisce il file nella directory archive. Se si memorizza nella cache un archivio, DistributedCache decomprime il file e crea una sottodirectory in /archive con lo stesso nome del file di archivio. I singoli file si trovano nella nuova sottodirectory.

Puoi utilizzare DistributedCache solo quando utilizzi lo streaming.

Accesso ai file della cache dalle applicazioni in streaming

Per accedere ai file memorizzati nella cache dalle applicazioni mappatore o riduttore, accertati di aver aggiunto la directory di lavoro corrente (. /) nel percorso dell'applicazione e di aver fatto riferimento ai file memorizzati nella cache come se fossero presenti nella directory di lavoro corrente.

Accesso ai file della cache dalle applicazioni in streaming

È possibile utilizzare AWS Management Console and the AWS CLI per creare cluster che utilizzano Distributed Cache.

Nota

Abbiamo riprogettato la console Amazon EMR per facilitarne l'utilizzo. Per scoprire le differenze tra la vecchia e la nuova esperienza sulla console, consulta la sezione Console Amazon EMR.

New console
Specifica dei file della cache distribuita con la nuova console
  1. Accedi a e apri AWS Management Console la console Amazon EMR all'indirizzo https://console.aws.amazon.com/emr.

  2. In EMR on EC2 (EMR su EC2), nel riquadro di navigazione a sinistra, scegli Clusters (Cluster) e seleziona Create cluster (Crea cluster).

  3. In Steps (Fasi), scegli Add step (Aggiungi fase). Si apre la finestra di dialogo Add step (Aggiungi fase). Nel campo Arguments (Argomenti), includi i file e gli archivi da salvare nella cache. La dimensione del file (o la dimensione totale dei file in un file di archivio) deve essere inferiore alla dimensione della cache assegnata.

    Se desideri aggiungere un singolo file alla cache distribuita, specifica -cacheFile seguito dal nome e dalla posizione del file, dal segno cancelletto (#) e quindi dal nome che desideri assegnare al file quando viene collocato nella cache locale. L'esempio seguente mostra come aggiungere un singolo file alla cache distribuita.

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file-name#cache-file-name

    Se desideri aggiungere un file di archivio alla cache distribuita, inserisci -cacheArchive seguito dal percorso dei file in Amazon S3, dal segno cancelletto (#) e quindi dal nome che desideri assegnare alla raccolta di file nella cache locale. L'esempio seguente mostra come aggiungere un file di archivio alla cache distribuita.

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive-name#cache-archive-name

    Inserisci i valori appropriati negli altri campi di dialogo. Le opzioni variano a seconda del tipo di fase. Per aggiungere la fase e uscire dalla finestra di dialogo, scegli Add step (Aggiungi fase).

  4. Scegli qualsiasi altra opzione applicabile al cluster.

  5. Per avviare il cluster, scegli Create cluster (Crea cluster).

Old console
Specifica dei file della cache distribuita con la vecchia console
  1. Passa alla nuova console Amazon EMR e seleziona Passa alla vecchia console dalla barra di navigazione laterale. Per ulteriori informazioni su cosa aspettarti quando passi alla vecchia console, consulta Utilizzo della vecchia console.

  2. Scegli Create cluster (Crea cluster).

  3. Scegli Step execution (Esecuzione fase) come modalità di avvio.

  4. Nella sezione Steps (Fasi), nel campo Add Step (Aggiungi fase), scegli Streaming Program (Programma Streaming) dall'elenco e quindi fai clic su Configure and add (Configura e aggiungi).

  5. Nel campo Arguments (Argomenti), includi i file e gli archivi da salvare nella cache e fai clic su Add (Aggiungi). La dimensione del file (o la dimensione totale dei file in un file di archivio) deve essere inferiore alla dimensione della cache assegnata.

    Se desideri aggiungere un singolo file alla cache distribuita, specifica -cacheFile seguito dal nome e dalla posizione del file, dal segno cancelletto (#) e quindi dal nome che desideri assegnare al file quando viene collocato nella cache locale. L'esempio seguente mostra come aggiungere un singolo file alla cache distribuita.

    -cacheFile \ s3://DOC-EXAMPLE-BUCKET/file_name#cache_file_name

    Se desideri aggiungere un file di archivio alla cache distribuita, inserisci -cacheArchive seguito dal percorso dei file in Amazon S3, dal segno cancelletto (#) e quindi dal nome che desideri assegnare alla raccolta di file nella cache locale. L'esempio seguente mostra come aggiungere un file di archivio alla cache distribuita.

    -cacheArchive \ s3://DOC-EXAMPLE-BUCKET/archive_name#cache_archive_name
  6. Procedi con la configurazione e l'avvio del cluster. Il cluster copia i file nella posizione di cache prima di elaborare qualsiasi fase del cluster.

CLI
Per specificare i file di cache distribuiti con AWS CLI
  • Per inviare una fase di Streaming quando un cluster è stato creato, digita il comando create-cluster con il parametro --steps. Per specificare i file di cache distribuiti utilizzando il AWS CLI, specificate gli argomenti appropriati quando inviate un passaggio di Streaming.

    Se desideri aggiungere un singolo file alla cache distribuita, specifica -cacheFile seguito dal nome e dalla posizione del file, dal segno cancelletto (#) e quindi dal nome che desideri assegnare al file quando viene collocato nella cache locale.

    Se desideri aggiungere un file di archivio alla cache distribuita, inserisci -cacheArchive seguito dal percorso dei file in Amazon S3, dal segno cancelletto (#) e quindi dal nome che desideri assegnare alla raccolta di file nella cache locale. L'esempio seguente mostra come aggiungere un file di archivio alla cache distribuita.

    Per ulteriori informazioni sull'utilizzo dei comandi Amazon EMR in AWS CLI, consulta. https://docs.aws.amazon.com/cli/latest/reference/emr

Esempio 1

Digita il comando seguente per avviare un cluster e invia una fase di Streaming che utilizza -cacheFile per aggiungere un file, sample_dataset_cached.dat, alla cache.

aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"]

Quando si specifica il numero di istanze senza utilizzare il parametro --instance-groups, viene avviato un singolo nodo primario e le istanze rimanenti vengono avviate come nodi core. Tutti i nodi utilizzeranno il tipo di istanza specificato nel comando.

Se in precedenza non sono stati creati il ruolo di servizio EMR predefinito e il profilo dell'istanza EC2, digita aws emr create-default-roles per crearli prima di digitare il sottocomando create-cluster.

Esempio 2

Il comando seguente mostra la creazione di un cluster di streaming e si avvale di -cacheArchive per aggiungere un archivio di file nella cache.

aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"]

Quando si specifica il numero di istanze senza utilizzare il parametro --instance-groups, viene avviato un singolo nodo primario e le istanze rimanenti vengono avviate come nodi core. Tutti i nodi utilizzeranno il tipo di istanza specificato nel comando.

Se in precedenza non sono stati creati il ruolo di servizio EMR predefinito e il profilo dell'istanza EC2, digita aws emr create-default-roles per crearli prima di digitare il sottocomando create-cluster.