2016-03-01 9 views
7

Sto utilizzando la versione corrente di Hadoop ed eseguo alcuni benchmark TestDFSIO (v. 1.8) per confrontare i casi in cui il file system predefinito è HDFS rispetto al file system predefinito è un secchio S3 (utilizzato tramite S3a).In che modo YARN decide di creare quanti contenitori? (Perché la differenza tra S3a e HDFS?)

Durante la lettura 100 x 1 MB file con file system di default come S3a, osservo il numero di contenitori max in UI FILATO Web è inferiore nel caso di HDFS come predefinito e S3a è di circa 4 volte più lento .

Durante la lettura 1000 x 10 KB file con file system di default come S3a, osservo il numero di contenitori max in filato utente web è almeno 10 volte meno rispetto al caso di HDFS come predefinito e S3a è circa 16 volte più lento. (Per esempio 50 secondi di test del tempo di esecuzione con HDFS predefinita, contro 16 minuti di test del tempo di esecuzione con S3a di default.)

Il numero di Mappa Compiti lanciato è come previsto in ogni caso, non c'è alcuna differenza rispetto a quella . Ma perché è YARN che crea almeno 10 volte meno numero di contenitori (ad esempio 117 su HDFS rispetto a 8 su S3a)? In che modo YARN decide di creare il numero di contenitori quando i vcores, la RAM e l'input del lavoro si suddividono e le attività della mappa avviate sono lo stesso; e è diverso il back-end di storage?

Naturalmente potrebbe aspettarsi una differenza di prestazioni tra HDFS rispetto ad Amazon S3 (tramite S3a) quando si eseguono gli stessi lavori di TestDFSIO, quello che sto cercando è capire come YARN sta decidendo il numero di contenitori massimi che lancia durante quei lavori, dove viene modificato solo il file system predefinito, perché al momento, è come quando il file system predefinito è S3a, YARN non utilizza quasi il 90% del parallelismo (cosa che normalmente avviene quando il file system predefinito è HDFS) .

Il cluster è un cluster a 15 nodi, con 1 NameNode, 1 ResourceManager (YARN) e 13 DataNode (nodi worker). Ogni nodo ha 128 GB di RAM e 48 core di CPU. Questo è un cluster di test dedicato: durante le esecuzioni di test di TestDFSIO, nient'altro viene eseguito sul cluster.

Per HDFS, il dfs.blocksize è 256m, ed utilizza 4 HDD (dfs.datanode.data.dir è impostato file:///mnt/hadoopData1,file:///mnt/hadoopData2,file:///mnt/hadoopData3,file:///mnt/hadoopData4).

Per S3a, fs.s3a.block.size è impostato su 268435456, ovvero 256 m, come le dimensioni di blocco predefinite di HDFS.

La directory Hadoop tmp è in uno SSD (impostando hadoop.tmp.dir a /mnt/ssd1/tmp in core-site.xml, e anche l'impostazione mapreduce.cluster.local.dir-/mnt/ssd1/mapred/local in mapred-site.xml)

La differenza di prestazioni (default HDFS, contro di default impostato S3a) è riassunta qui di seguito :

TestDFSIO v. 1.8 (READ)  

fs.default.name    # of Files x Size of File Launched Map Tasks Max # of containers observed in YARN Web UI Test exec time sec 
============================= ========================= ================== ===========================================  ================== 
hdfs://hadoop1:9000   100 x 1 MB     100     117            19 
hdfs://hadoop1:9000   1000 x 10 KB    1000     117            56 
s3a://emre-hadoop-test-bucket 100 x 1 MB     100     60            78 
s3a://emre-hadoop-test-bucket 1000 x 10 KB    1000     8            1012 

100 x 1 MB - default FS HDFS versus default FS S3a

1000 x 10 KB - default FS HDFS versus default FS S3a

+0

Qual è la vostra versione Hadoop? Che backend shuffle stai usando? –

+0

Quali sono le impostazioni di riutilizzo jvm? –

+0

Ancora un'altra domanda che mi è venuta in mente: il tuo lavoro era in esecuzione in modalità "Uber"? –

risposta

1

Per farla breve, uno dei criteri importanti YARN utilizza per decidere quanti contenitori creare in base alla località di dati . Quando si utilizza un file system non HDFS, come ad esempio S3a per connettersi ad Amazon S3, o un altro archivio di oggetti compatibile S3, è responsabilità del file system fornire informazioni sulla località dei dati in quanto, in tal caso, nessuno dei i dati sono locali per un nodo, ogni nodo ha bisogno di recuperare i dati dalla rete, oppure, da un'altra prospettiva, ogni nodo ha la stessa località dei dati.

Il paragrafo precedente spiega il comportamento di creazione del contenitore che ho osservato durante l'esecuzione di lavori Hadoop MapReduce contro Amazon S3, utilizzando il file system S3a. Per risolvere il problema, ho iniziato a lavorare su una patch e lo sviluppo verrà tracciato tramite HADOOP-12878.

vedere anche quanto segue:

Problemi correlati