Errori di input e output - 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à.

Errori di input e output

I seguenti errori sono comuni nelle operazioni di input e output del cluster.

Il percorso per Amazon Simple Storage Service (Amazon S3) presenta almeno tre barre?

Quando si specifica un bucket Amazon S3, è necessario includere una barra di terminazione alla fine dell'URL. Ad esempio, invece di fare riferimento a un bucket come "s3n://DOC-EXAMPLE-BUCKET1", si dovrebbe utilizzare "s3n://DOC-EXAMPLE-BUCKET1/", altrimenti Hadoop ha esito negativo sul cluster nella maggior parte dei casi.

Stai cercando di attraversare le directory di input in modo ricorsivo?

Hadoop non cerca i file nelle directory di input in modo ricorsivo. Se si dispone di una struttura di directory come /corpus/01/01.txt, /corpus/01/02.txt, /corpus/02/01.txt, ecc. e si specifica /corpus/ come parametro di input per il cluster, Hadoop non trova alcun file di input perché la directory /corpus/ è vuota e Hadoop non controlla il contenuto delle sottodirectory. Allo stesso modo, Hadoop non controlla ricorsivamente le sottodirectory bucket Amazon S3.

I file di input devono trovarsi direttamente nella directory di input o nel bucket Amazon S3 specificato, non nelle sottocartelle.

La directory di output esiste già?

Se si specifica un percorso di output che esiste già, Hadoop farà fallire il cluster nella maggior parte dei casi. Questo significa che se si esegue un cluster una volta e poi lo si esegue di nuovo con esattamente gli stessi parametri, probabilmente funzionerà la prima volta e poi mai più; dopo la prima esecuzione, il percorso di output esiste e quindi causa il fallimento di tutte le esecuzioni successive.

Si sta tentando di specificare una risorsa utilizzando un URL HTTP?

Hadoop non accetta le posizioni di risorsa specificate utilizzando il prefisso http:// Non è possibile fare riferimento a una risorsa utilizzando un URL HTTP. Ad esempio, se si passa http://mysite/myjar.jar come parametro JAR il cluster fallisce.

Si sta facendo riferimento a un bucket Amazon S3 che utilizza un formato di nome non valido?

Se si tenta di utilizzare un nome di bucket come "DOC-EXAMPLE-BUCKET1.1" con Amazon EMR, il cluster avrà esito negativo perché Amazon EMR richiede che i nomi del bucket siano nomi host RFC 2396 validi; il nome non può terminare con un numero. Inoltre, a causa dei requisiti di Hadoop, i nomi dei bucket Amazon S3 utilizzati con Amazon EMR devono contenere solo lettere minuscole, numeri, punti (.) e trattini alti (-). Per ulteriori informazioni su come formattare i nomi dei bucket Amazon S3, consulta Restrizioni e limitazioni dei bucket nella Guida per l'utente di Amazon Simple Storage Service.

Si stanno verificando problemi di caricamento dei dati in e da Amazon S3?

Amazon S3 è la più popolare fonte di input e output per Amazon EMR. Un errore comune è trattare Amazon S3 come un normale file system. Occorre tener conto delle differenze tra Amazon S3 e un file system quando si esegue il cluster.

  • Se si verifica un errore interno in Amazon S3, l'applicazione deve gestirlo in modo semplice e ripetere l'operazione.

  • Se le chiamate ad Amazon S3 impiegano troppo tempo per tornare indietro, l'applicazione potrebbe dover ridurre la frequenza con cui chiama Amazon S3.

  • L'elenco di tutti gli oggetti in un bucket Amazon S3 costituisce una chiamata costosa. L'applicazione dovrebbe ridurre al minimo il numero di volte che ciò accade.

Ci sono diversi modi per migliorare il modo in cui il cluster interagisce con Amazon S3.

  • Avviare il cluster utilizzando la versione più recente di Amazon EMR.

  • Usa S3 DistCp per spostare oggetti dentro e fuori da Amazon S3. S3 DistCp implementa la gestione degli errori, i nuovi tentativi e i back-off per soddisfare i requisiti di Amazon S3. Per ulteriori informazioni, consulta Copia distribuita con S3. DistCp

  • Progettare l'applicazione con la consistenza finale in mente. Utilizza HDFS per la memorizzazione dei dati intermedi mentre il cluster è in esecuzione e Amazon S3 solo per inserire i dati iniziali e produrre i risultati finali.

  • Se i cluster impegneranno 200 o più transazioni al secondo in Amazon S3, contatta il supporto per preparare il bucket per più transazioni al secondo e prendI in considerazione l'utilizzo delle strategie di partizione chiave descritte in Consigli per le prestazioni in Amazon S3.

  • Impostare l'impostazione di configurazione Hadoop io.file.buffer.size su 65536. In questo modo Hadoop trascorre meno tempo a cercare tra gli oggetti Amazon S3.

  • Considera la possibilità di disabilitare la funzione di esecuzione speculativa di Hadoop se il cluster riscontra problemi di concomitanza con Amazon S3. Questo è utile anche quando si esegue la risoluzione dei problemi di un cluster lento. È possibile eseguire questa operazione impostando le proprietà mapreduce.map.speculative e mapreduce.reduce.speculative su false. Quando si avvia un cluster, è possibile impostare questi valori utilizzando la classificazione di configurazione mapred-env. Per ulteriori informazioni, consulta Configurazione delle applicazioni nella Guida alle versioni di Amazon EMR.

  • Se è in esecuzione un cluster Hive, consulta Si stanno verificando problemi di caricamento dei dati in e da Amazon S3 in Hive?.

Per ulteriori informazioni, consulta Best practice per gli errori di Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.