YARN如何决定创建多少个容器?(为什么S3a和HDFS之间存在差异?)

Emr*_*inç 7 hadoop amazon-s3 hadoop-yarn

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

当使用默认文件系统读取100 x 1 MB文件作为S3a时,我观察到YARN Web UI中的最大容器数量少于默认情况下HDFS的情况,S3a 大约4倍.

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

在每种情况下,启动的地图任务的数量都是预期的,没有区别.但是为什么 YARN创造的容器数量减少至少10倍(例如HDFS上的117个,而S3a上的8个)?当集群的vcores,RAM和作业的输入分裂以及启动的map任务相同时,YARN如何决定创建多少个容器; 并且只存储后端有什么不同?

当运行相同的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/tmpin core-site.xml,并设置mapreduce.cluster.local.dir/mnt/ssd1/mapred/localin 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
Run Code Online (Sandbox Code Playgroud)

100 x 1 MB  - 默认FS HDFS与默认FS S3a

1000 x 10 KB  - 默认FS HDFS与默认FS S3a

Emr*_*inç 1

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

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

另请参阅以下内容: