- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个由 1 个主节点(namenode、secondarynamenode、resourcemanager)和 2 个从节点(datanode、nodemanager)组成的小型集群。
我已经在master的yarn-site.xml中设置了:
yarn.scheduler.minimum-allocation-mb
:512yarn.scheduler.maximum-allocation-mb
:1024yarn.scheduler.minimum-allocation-vcores
:1yarn.scheduler.maximum-allocation-vcores
:2我在slaves的yarn-site.xml里设置了:
yarn.nodemanager.resource.memory-mb
: 2048 yarn.nodemanager.resource.cpu-vcores
:4然后在master中,我在mapred-site.xml中设置:
mapreduce.map.memory.mb
:512mapreduce.map.java.opts
: -Xmx500mmapreduce.map.cpu.vcores
:1mapreduce.reduce.memory.mb
:512mapreduce.reduce.java.opts
: -Xmx500mmapreduce.reduce.cpu.vcores
:1因此据我了解,在运行作业时,mapreduce ApplicationMaster 将尝试在两个从站上创建尽可能多的 512 Mb 和 1 个 vCore 容器,每个从站只有 2048 Mb 和 4 个 vCores 可用,这为 4 个提供了空间每个奴隶上的容器。这正是我工作中发生的情况,所以到目前为止没有问题。
但是,当我将 mapreduce.map.cpu.vcores
和 mapreduce.reduce.cpu.vcores
从 1 增加到 2 时,理论上应该只有足够的 vCores可用于为每个奴隶创建 2 个容器吗?但是不,我每个奴隶还有 4 个容器。
然后我尝试将 mapreduce.map.memory.mb
和 mapreduce.reduce.memory.mb
从 512 增加到 768。这为 2 个容器留出了空间( 2048/768=2)。
映射器和缩减器的 vCore 设置为 1 或 2 无关紧要,这始终会为每个从站生成 2 个 768mb 容器和 4 个 512mb 容器。那么 vCore 有什么用? ApplicationMaster 似乎并不关心。
此外,当将内存设置为 768 并将 vCores 设置为 2 时,我在映射器容器的节点管理器 UI 上显示了此信息:
768 Mb 变成了 1024 TotalMemoryNeeded,2 个 vCores 被忽略并显示为 1 TotalVCoresNeeded。
因此,将“它是如何工作的”问题分解为多个问题:
mapreduce.map.memory.mb
值是否只是一个用于计算容器数量的完全抽象值(这就是为什么它可以四舍五入到 2 的下一次幂)?或者它是否以某种方式代表真实的内存分配?mapreduce.map.java.opts
中指定一些 -Xmx 值?为什么 yarn 不使用 mapreduce.map.memory.mb
中的值来为容器分配内存?mapreduce.map.cpu.vcores
但它从未更改。最佳答案
我将假设所使用的调度程序是 CapacityScheduler 来回答这个问题。
CapacityScheduler 使用 ResourceCalculator 计算应用程序所需的资源。有两种类型的资源计算器:
默认情况下,CapacityScheduler 使用DefaultResourceCalculator。如果你想使用DominantResourceCalculator,那么你需要在“capacity-scheduler.xml”文件中设置以下属性:
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
现在,回答您的问题:
如果使用DominantResourceCalculator,则在计算容器数量时同时考虑内存和VCores
mapreduce.map.memory.mb 不是抽象值。在计算资源时将其考虑在内。
DominantResourceCalculator 类有一个 normalize() 函数,它使用 minimumResouce(由配置 yarn.scheduler.minimum-allocation-mb 确定)规范化资源请求,最大资源(由配置 yarn.scheduler.maximum-allocation-mb 决定)和步长因子(由配置 yarn.scheduler.minimum-allocation-mb 决定)。
标准化内存的代码如下所示(检查 org.apache.hadoop.yarn.util.resource.DominantResourceCalculator.java):
int normalizedMemory = Math.min(roundUp(
Math.max(r.getMemory(), minimumResource.getMemory()),
stepFactor.getMemory()),maximumResource.getMemory());
地点:
r = 请求的内存
逻辑如下:
一个。取max of(requested resource and minimum resource) = max(768, 512) = 768
roundup(768, StepFactor) = roundUp (768, 512) == 1279(大约)
Roundup does : ((768 + (512 -1)) / 512) * 512
min(roundup(512, stepFactor), maximumresource) = min(1279, 1024) = 1024
最后,分配的内存为 1024 MB,这就是您得到的。
为了简单起见,您可以说汇总,以 512 MB(这是最小资源)的步长增加需求
mapreduce.map.memory.mb 是容器使用的总内存。
mapreduce.map.java.opts 的值应小于 mapreduce.map.memory.mb
当您使用 DominantResourceCalculator 时,它会使用 normalize() 函数来计算所需的 vCore。
它的代码是(类似于内存的规范化):
int normalizedCores = Math.min(roundUp
` Math.max(r.getVirtualCores(), minimumResource.getVirtualCores()),
stepFactor.getVirtualCores()), maximumResource.getVirtualCores());
关于hadoop - MapReduce2 中如何基于 vcores 和内存创建容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33099601/
这是我想做的 1 - 点击提交 2 - 隐藏 DIV 容器 1 3 - 显示 DIV 容器 2 4 - 将“PricingDisclaimer.php”中找到的所有 DIV 加载到 Div 容器 2
我有一个 ios 应用程序,它使用 iCloudcontainer 来保存用户的一些数据,例如用户的“到期日期”。我要用不同的方式创建应用程序的副本开发者账号。我要将用户从第一个应用程序迁移到第二个应
这是场景。 我有三个容器。 Container1、container2 和 container3(基于 Ubuntu 的镜像),其中 container2 充当容器 1 和容器 2 之间的路由器。 我
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我正在改造管道以使用声明式管道方法,以便我能够 to use Docker images在每个阶段。 目前我有以下工作代码,它执行连接到在 Docker 容器中运行的数据库的集成测试。 node {
我正在开发一个需要尽可能简单地为最终用户安装的应用程序。虽然最终用户可能是经验丰富的 Linux 用户(或销售工程师),但他们对 Tomcat、Jetty 等并不真正了解,我认为他们也不应该了解。 所
我从gvisor-containerd-shim(Shim V1)移到了containerd-shim-runsc-v1(Shim V2)。在使用gvisor-containerd-shim的情况下,
假设我们只在某些开发阶段很少需要这样做(冒烟测试几个 api 调用),让项目 Bar 中的 dockerized web 服务访问 Project Foo 中的 dockerized web 服务的最
各位,我的操作系统是 Windows 10,运行的是 Docker 版本 17.06.0-ce-win19。我在 Windows 容器中运行 SQL Server Express,并且希望将 SQL
谁能告诉我,为什么我们不能在 Azure 存储中的容器内创建容器?还有什么方法可以处理,我们需要在 azure 存储中创建目录层次结构? 最佳答案 您无法在容器中创建容器,因为 Windows Azu
#include template struct Row { Row() { puts("Row default"); } Row(const Row& other) { puts
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
RDF容器用于描述一组事物 例如,把一本书的所有作者列在一起 RDF容器有三种类型: <Bag> <Seq> <Alt> <rdf:
编辑:从到目前为止添加的答案和评论看来,我没有正确解释我想要什么。下面是一个例子: // type not supporting any type of comparison [] [] type b
我正在测试 spatie 的异步项目。我创建了一个这样的任务。 use Spatie\Async\Task; class ServiceTask extends Task { protecte
我想使用 Azure Blob 存储来上传和下载文档。有一些公司可以上传和下载他们的文档。我想保证这些文件的安全。这意味着公司只能看到他们的文件。不是别人的。 我可以在 blob 容器中创建多个文件夹
我正在尝试与 Azure 中的容器实例进行远程交互。我已执行以下步骤: 已在本地注册表中加载本地镜像 docker load -i ima.tar 登录远程 ACR docker登录--用户名--密码
我正在研究http://progrium.viewdocs.io/dokku/process-management/,并试图弄清楚如何从单个项目中运行多个服务。 我有一个Dockerfile的仓库:
我有一个想要容器化的单体应用程序。文件夹结构是这样的: --app | |-file.py <-has a variable foo that is passed in --configs
我正在学习 Docker,并且一直在为 Ubuntu 容器制作 Dockerfile。 我的问题是我不断获取不同容器之间的持久信息。我已经退出,移除了容器,然后移除了它的图像。在对 Dockerfil
我是一名优秀的程序员,十分优秀!