Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 纱线如何决定创建多少个容器?(为什么S3a和HDFS之间存在差异?)_Hadoop_Amazon S3_Yarn - Fatal编程技术网

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

Hadoop 纱线如何决定创建多少个容器?(为什么S3a和HDFS之间存在差异?),hadoop,amazon-s3,yarn,Hadoop,Amazon S3,Yarn,我正在使用当前版本的Hadoop,并运行一些TestDFSIO基准测试(1.8版),比较默认文件系统是HDFS还是默认文件系统是S3存储桶(通过S3a使用)的情况 当读取默认文件系统为S3a的100 x 1 MB文件时,我观察到Thread Web UI中的最大容器数少于默认HDFS的情况,S3a大约慢了4倍 在默认文件系统为S3a的情况下读取1000 x 10 KB文件时,我观察到纱线Web UI中的最大容器数至少比默认HDFS少10倍,S3a大约慢16倍。(例如,HDFS默认情况下的测试执行

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

当读取默认文件系统为S3a的100 x 1 MB文件时,我观察到Thread Web UI中的最大容器数少于默认HDFS的情况,S3a大约慢了4倍

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

在每种情况下,启动的Map任务的数量都与预期的一样,在这方面没有区别。但是为什么纱线产生的容器数量至少是的10倍(例如HDFS上为117个,S3a上为8个)?当集群的vCore、RAM和作业的输入拆分时,纱线如何决定创建多少个容器,并且启动的映射任务是相同的;而只有存储后端不同

当然,在运行相同的TestDFSIO作业时,HDFS与Amazon S3(通过S3a)之间的性能差异是可以预期的,我想了解的是,在这些作业期间,Thread是如何决定它启动的最大容器数的,在这些作业中,只有默认的文件系统发生了更改,因为目前,当默认文件系统是S3a时,Thread几乎没有使用90%的并行性(当默认文件系统是HDFS时通常会这样做)

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

对于HDFS,
dfs.blocksize
256m
,它使用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上(通过在
core site.xml
中将
Hadoop.tmp.dir
设置为
/mnt/ssd1/tmp
,并在
mapred site.xml
中将
mapreduce.cluster.local.dir
设置为
/mnt/ssd1/mapred/local

性能差异(默认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


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

上一段解释了我在使用S3a文件系统对AmazonS3运行Hadoop MapReduce作业时观察到的容器创建行为。为了解决这个问题,我已经开始开发一个补丁,开发过程将通过

另见下文:


您的Hadoop版本是什么?你使用的是什么洗牌后端?还有你的jvm重用设置是什么?我脑海中浮现的另一个问题是:你的工作是在“优步”模式下运行的吗?@ThomasJungblut我使用的是
hadoop 3.0.0-SNAPSHOT
(基于主干和一些补丁构建的)。如果“shuffle backend”的意思是
warn.nodemanager.aux services
,则它被设置为
mapreduce\u shuffle
。至于JVM重用设置,据我所知,我没有做任何相关的事情,所以应该是默认设置(您指的是哪些特定属性?(当然))。运行未处于“Uber”模式,因为TestDFSIO报告“…在Uber模式下运行:false”。