MR任务启动
hadoop jar MapReduceTest-1.0-SNAPSHOT.jar com.example7pi.jobPI -Dmapred.child.java.opts="-Xmx1024m" -Dmapreduce.map.memory.mb=1024 100 1000000000
-Dmapred.child.java.opts="-Xmx1024m" -Dmapreduce.map.memory.mb=1024 参数只能放在类名后 参数前。若是放在最后,参数获取不到
关于MR任务内存参数解析:、
mapred.child.java.opts 子任务在操作系统上 实际启动JVM进程 所使用的参数
mapreduce.map.memory.mb 是每个map任务 向yarn集群申请的内存数量,一个container占用的内存数
假如配置如下 -Dmapred.child.java.opts="-Xmx1024m" -Dmapreduce.map.memory.mb=2048
对于只有一个map任务来说,在操作系统上启动的YarnChild进程 jvm参数是-Xmx1024m
在yarn的:8088界面上显示是占用了 2048m 内存
研究:
参数为 -Dmapred.child.java.opts="-Xmx1024m" -Dmapreduce.map.memory.mb=8024 200 1000000000
为每个container分配8G内存 ,启动200个map 但是集群中只有160个vcore,576G内存。
会怎么样呢?
理论按照内存计算 576G/8G=72个container
实际上启动了71个container vcore占用71个 减去一个AM , 实际上只是启动了70个map
vcore和内存 实际使用以短板为主
若是-Dmapred.child.java.opts="-Xmx1024m" -Dmapreduce.map.memory.mb=1024 200 1000000000
此时情况 是vcore不够使用 内存足够
实际情况:以短板为主, 有多少个vcore 就启动 多少个 container
yarn集群队列资源支持实时修改并生效,不需要重启任何服务
<?xml version="1.0"?>
<allocations>
<queueMaxAMShareDefault>-1</queueMaxAMShareDefault>
<queue name="default">
<minResources>294912 mb,80 vcores</minResources>
<maxResources>589824 mb,320 vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<maxAMShare>-1.0</maxAMShare>
<aclSubmitApps>default</aclSubmitApps>
<weight>1.0</weight>
<schedulingPolicy>fair</schedulingPolicy>
<fairSharePreemptionThreshold>1.0</fairSharePreemptionThreshold>
<minSharePreemptionTimeout>15</minSharePreemptionTimeout>
<fairSharePreemptionTimeout>15</fairSharePreemptionTimeout>
<allowPreemptionFrom>true</allowPreemptionFrom>
<nodeLabels>-</nodeLabels>
</queue>
</allocations>