我使用的是当前版本的Hadoop,并运行一些 TestDFSIO 基准测试(v。1.8)来比较默认文件系统为HDFS与默认文件系统为S3存储桶(通过 S3a 使用)的情况。

当读取默认文件系统为S3a的 100 x 1 MB 文件时,我观察到YARN Web UI中的最大容器数小于默认情况下HDFS的情况,并且S3a约为,是慢4倍。

当使用默认文件系统S3a读取 1000 x 10 KB 文件时,我观察到YARN Web UI中的最大容器数至少是,比缺省HDFS少 10倍,而S3a大约是 16倍较慢。 (例如,默认情况下,HDFS的测试执行时间为50秒,默认情况下,S3a的测试执行时间为 16分钟。)

每种情况下启动的 map task 的数量均与预期的一样,两者之间没有区别。但是为什么YARN创建的至少使的容器数量减少至少10倍(例如,HDFS上为117,而S3a上为8)?当集群的vcore,RAM和作业的输入拆分时,YARN如何决定创建多少个容器,并且启动的 map task 是还是;和仅存储后端不同吗?

当运行相同的TestDFSIO作业时,可以期望HDFS与Amazon S3(通过S3a)之间的性能差异当然很好,我想要了解的是YARN如何确定在这些作业期间启动的最大容器数,其中仅更改了默认文件系统,因为当前,例如,当默认文件系统为S3a时,YARN几乎没有使用90%的并行度(通常在默认文件系统为HDFS时使用)。

该群集是一个15节点的群集,具有1个NameNode,1个ResourceManager(YARN)和13个DataNode(工作节点)。每个节点具有128 GB RAM和48核CPU。这是一个专用的测试群集:在TestDFSIO测试运行期间,该群集上没有其他任何运行。

对于HDFS,dfs.blocksize256m,它使用4个HDD(dfs.datanode.data.dir设置为file:///mnt/hadoopData1,file:///mnt/hadoopData2,file:///mnt/hadoopData3,file:///mnt/hadoopData4)。

对于S3a,fs.s3a.block.size设置为268435456,即256m,与HDFS默认块大小相同。

Hadoop tmp目录位于SSD上(通过在hadoop.tmp.dir中将/mnt/ssd1/tmp设置为core-site.xml,还在mapreduce.cluster.local.dir中将/mnt/ssd1/mapred/local设置为mapred-site.xml)

下面总结了性能差异(默认HDFS与默认设置为S3a):

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

hadoop - YARN如何决定创建多少个容器? (为什么S3a和HDFS之间有区别?)-LMLPHP

hadoop - YARN如何决定创建多少个容器? (为什么S3a和HDFS之间有区别?)-LMLPHP

最佳答案

长话短说,YARN用于确定要创建多少个容器的重要标准之一是基于数据位置。当使用诸如S3a之类的非HDFS文件系统连接到Amazon S3或另一个与S3兼容的对象存储时,文件系统有责任提供有关数据位置的信息,因为在这种情况下,任何数据对于节点而言是本地的,每个节点都需要从网络中检索数据,或者从另一个角度来看,每个节点都具有相同的数据位置。

上一段说明了使用S3a文件系统针对Amazon S3运行Hadoop MapReduce作业时观察到的容器创建行为。为了解决此问题,我开始研究补丁,并将通过HADOOP-12878跟踪开发情况。

另请参阅以下内容:

  • SO question:hadoop/yarn and task parallelization on non-hdfs filesystems
  • Mail list thread: hadoop/yarn and task parallelization on non-hdfs filesystems
  • 关于hadoop - YARN如何决定创建多少个容器? (为什么S3a和HDFS之间有区别?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35721188/

    10-10 02:02