1
程序员文章站
2024-03-21 19:46:40
...
<div class="article-header-box">
<div class="article-header">
<div class="article-title-box">
<span class="article-type type-1 float-left">原</span> <h1 class="title-article">Yarn下Mapreduce的内存参数理解&xml参数配置</h1>
</div>
<div class="article-info-box">
<div class="article-bar-top" style="height: 23px;">
<span class="time">2017年11月26日 15:39:15</span>
<a class="follow-nickName" href="https://me.csdn.net/z3935212" target="_blank">z3935212</a>
<span class="read-count">阅读数:2035</span>
<span class="tags-box artic-tag-box">
<span class="label">标签:</span>
<a data-track-click="{"mod":"popu_626","con":"mapreduce"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=mapreduce&t=blog" target="_blank">mapreduce </a><a data-track-click="{"mod":"popu_626","con":"内存"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=内存&t=blog" target="_blank">内存 </a><a data-track-click="{"mod":"popu_626","con":"yarn"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=yarn&t=blog" target="_blank">yarn </a><a data-track-click="{"mod":"popu_626","con":"框架"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=框架&t=blog" target="_blank">框架 </a>
<span class="article_info_click">更多</span></span>
<div class="tags-box space">
<span class="label">个人分类:</span>
<a class="tag-link" href="https://blog.csdn.net/z3935212/article/category/7310584" target="_blank">大数据 </a>
</div>
</div>
<div class="operating">
</div>
</div>
</div>
</div>
<article>
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post" style="height: 1896px; overflow: hidden;">
<div class="markdown_views">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
<p>参考:<a href="http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/" rel="nofollow" target="_blank">http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-resourcemanager-nodemanager/</a></p>
<h2 id="container是什么"><a name="t0"></a><strong>Container是什么?</strong></h2>
<p>Container就是一个yarn的java进程,在Mapreduce中的AM,MapTask,ReduceTask都作为Container在Yarn的框架上执行,你可以在RM的网页上【8088端口】看到Container的状态</p>
<h2 id="基础"><a name="t1"></a><strong>基础</strong></h2>
<p>Yarn的ResourceManger(简称RM)通过逻辑上的队列分配内存,CPU等资源给application,默认情况下RM允许最大AM申请Container资源为8192MB(“yarn.scheduler.maximum-allocation-mb“),默认情况下的最小分配资源为1024M(“yarn.scheduler.minimum-allocation-mb“),AM只能以增量(”yarn.scheduler.minimum-allocation-mb“)和不会超过(“yarn.scheduler.maximum-allocation-mb“)的值去向RM申请资源,AM负责将(“mapreduce.map.memory.mb“)和(“mapreduce.reduce.memory.mb“)的值规整到能被(“yarn.scheduler.minimum-allocation-mb“)整除,RM会拒绝申请内存超过8192MB和不能被1024MB整除的资源请求【内存增量】。</p>
<p><strong>本文基于Hadoop2.6;下面提到的配置项最好都要设置以覆盖默认值,以便调优。</strong></p>
<h2 id="1yarn-sitexml-设置"><a name="t2"></a><strong>1、yarn-site.xml 设置</strong></h2>
<p>yarn进行资源管理的时候:以contain作为最小单位来进行资源分配的。 <br>
<strong>事实上Hadoop所有设置都可以写在同一个xml中,</strong>但是为了自己查看方便,模块化,所以分开写。 <br>
yarn-site.xml主要设置yarn的基本配置,以yarn开头的配置项。修改后必须重启集群生效。 <br>
mapred-site.xml主要设置mapreduxe任务的配置项;这个文件修改后不需重启集群。</p>
<h2 id="11-nm设置nodemanager"><a name="t3"></a><strong>1.1 NM设置(NodeManager)</strong></h2>
<p>NM的内存资源配置,主要是通过下面两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置) : <br>
yarn.nodemanager.resource.memory-mb 默认8GB <br>
yarn.nodemanager.vmem-pmem-ratio 默认2.1 <br>
说明:第一个参数:该结点向操作系统申请的内存总量,RM中的两个值不能超过此值。此数值可以用于计算container最大数目,即:用此值除以RM中的最小容器内存。第二个:虚拟内存率,是占task所用内存的百分比,默认值为2.1倍。如报错虚拟内存溢出,则提高该值。 <br>
注意:第一个参数默认大小是8G,即使计算机内存不足8G也会按着8G内存来使用,所有计算机内存小于8GB应该调低这个值。</p>
<h2 id="12-rm设置resourcemanager"><a name="t4"></a><strong>1.2 RM设置(ResourceManager)</strong></h2>
<p>RM的内存资源配置,主要是通过下面的两个参数进行的(这两个值是Yarn平台特性,应在yarn-sit.xml中配置): <br>
yarn.scheduler.minimum-allocation-mb 默认1GB <br>
yarn.scheduler.maximum-allocation-mb 默认8GB <br>
说明:单个容器可申请的最小与最大内存,应用在运行申请内存时不能超过最大值,应用申请小于最小值则会分配最小值,从这个角度看,最小值有点像操作系统中的页。最小值还有另外一种用途,用来计算一个节点的最大container数目。注:这两个值一经设定不能动态改变(此处所说的动态改变是指需要重启集群生效)。</p>
<h1 id="2mapred-sitexml-设置见文后附录"><a name="t5"></a><strong>2、mapred-site.xml 设置见文后附录</strong></h1>
<h2 id="21-am设置applicationmanager"><a name="t6"></a><strong>2.1 AM设置(ApplicationManager)</strong></h2>
<p>AM内存配置相关参数,此处以MapReduce为例进行说明(这两个值是AM特性,应在mapred-site.xml中配置),如下: <br>
mapreduce.map.memory.mb 默认 <br>
mapreduce.reduce.memory.mb 默认 <br>
说明:单个Map/Reduce task 申请的内存大小,其值应该在RM中的最大和最小container值之间。如果没有配置则通过如下简单公式获得: <br>
max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers)) <br>
<strong>一般reduce内存大小应该是map的2倍。</strong>注:这两个值可以在应用启动时通过参数改变,可以动态调整;</p>
<h2 id="22-am-jvm设置"><a name="t7"></a><strong>2.2 AM JVM设置</strong></h2>
<p>AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以通过,如下选项配置: <br>
mapreduce.map.java.opts 默认 <br>
mapreduce.reduce.java.opts 默认 <br>
说明:这两个参主要是为需要运行JVM程序(java、scala等)准备的,通过这两个设置可以向JVM中传递参数的,与内存有关的是,-Xmx,-Xms等选项。此数值大小,应该在AM中的map.mb和reduce.mb之间。</p>
<h2 id="23总结"><a name="t8"></a><strong>2.3总结</strong></h2>
<p>AM为Map/Reduce task向RM申请资源,RM按照mini和max、资源增量的值为task分配一个固定大小的container供task使用。RM可以分配下去的资源总量受到NM配置的值限制。</p>
<h2 id="3注意"><a name="t9"></a><strong>3、注意:</strong></h2>
<p>在hadoop2及以上版本中,map和reduce task 是运行在container中的。mapreduce.{map|reduce}.memory.mb 被yarn用来设置container的内存大小。如果container的内存超限,会被yarn杀死。在container中,为了执行map和reduce task,yarn会在contaner中启动一个jvm来执行task任务。mapreduce.{map|reduce}.java.opts用来设置container启动的jvm相关参数,通过设置Xmx来设置map 或者reduce task的最大堆内存。 <br>
理论上,{map|reduce}.java.opts设置的最大堆内存要比{map|reduce}.memory.mb小。一般设置为一般设置为0.75倍的memory.mb即可;因为在yarn container这种模式下,JVM进程跑在container中,需要为java code等非JVM的内存使用预留些空间。 <br>
运行中的设置方法例如:xml中也可设置 <br>
hadoop jar -Dmapreduce.reduce.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx3276</p>
<h2 id="4常见内存溢出报错解决"><a name="t10"></a><strong>4、常见内存溢出报错&解决</strong></h2>
<p>默认情况下,yarn.nodemanager.vmem-pmem-ratio被设置为2.1,这意味着,每个map或者task任务只能使用2.1倍(”mapreduce.reduce.memory.mb”) or (“mapreduce.map.memory.mb”) 大小的虚拟内存,如果使用的量超出则会被nm杀掉。 <br>
例如:日志中常见报错: <br>
1、Container xxx is running beyond physical memory limits <br>
2、java heap space <br>
3、Error: GC overhead limit exceeded</p>
<pre class="prettyprint" name="code"><code class="hljs lasso has-numbering">报错<span class="hljs-number">1</span>:Current usage: <span class="hljs-number">1.1</span>gb of <span class="hljs-number">2.0</span>gb physical memory used; <span class="hljs-number">4.6</span>gb of <span class="hljs-number">4.2</span>gb virtual memory used<span class="hljs-built_in">.</span> Killing container<span class="hljs-built_in">.</span>【即虚拟内存溢出】;
<span class="hljs-subst">**</span>方法一:提高yarn<span class="hljs-built_in">.</span>nodemanager<span class="hljs-built_in">.</span>vmem<span class="hljs-attribute">-pmem</span><span class="hljs-attribute">-ratio</span> <span class="hljs-subst">=</span> <span class="hljs-number">5</span>或者更高;【推荐】<span class="hljs-subst">**</span>
方法二:yarn<span class="hljs-built_in">.</span>nodemanager<span class="hljs-built_in">.</span>vmem<span class="hljs-attribute">-check</span><span class="hljs-attribute">-enabled</span> <span class="hljs-subst">=</span><span class="hljs-literal">false</span> ;关闭虚拟内存检查;不推荐
方法三:提高物理内存分配,相应的虚拟内存自然就多了,但是这样不是最优</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre>
<pre class="prettyprint" name="code"><code class="hljs avrasm has-numbering">报错<span class="hljs-number">2</span>:Current usage: <span class="hljs-number">2.1</span>gb of <span class="hljs-number">2.0</span>gb physical memory used<span class="hljs-comment">; 3.6gb of 4.2gb virtual memory used. Killing container.【即物理内存溢出】;</span>
方法一:mapreduce<span class="hljs-preprocessor">.map</span><span class="hljs-preprocessor">.memory</span><span class="hljs-preprocessor">.mb</span> = <span class="hljs-number">3</span>GB以上,然后测试这个map/reduce task需要使用多少内存才够用,提高这个值直到不报错为止。
方法二:提高yarn<span class="hljs-preprocessor">.scheduler</span><span class="hljs-preprocessor">.minimum</span>-allocation-mb = <span class="hljs-number">3</span>GB以上,同理【不推荐】</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre>
<h2 id="5内存分配增量规整因子incrementmemory"><a name="t11"></a><strong>5、内存分配增量/规整因子/incrementMemory</strong></h2>
<p>为了易于管理资源和调度资源,Hadoop YARN内置了资源规整化算法,它规定了最小可申请资源量、最大可申请资源量和<strong>资源规整化因子</strong>,规整化因子是用来规整化应用程序资源的,<strong>应用程序申请的资源如果不是该因子的整数倍,则将被修改为最小的整数倍对应的值</strong>,公式为ceil(a/b)*b,其中a是应用程序申请的资源,b为规整化因子。对于规整化因子,不同调度器不同,具体如下: <br>
FIFO和Capacity Scheduler,规整化因子等于最小可申请资源量,不可单独配置。 <br>
Fair Scheduler:规整化因子通过参数yarn.scheduler.increment-allocation-mb和yarn.scheduler.increment-allocation-vcores设置,默认是1024和1。 <br>
通过以上介绍可知,应用程序申请到资源量可能大于资源申请的资源量,比如YARN的最小可申请资源内存量为1024,规整因子是1024,如果一个应用程序申请1500内存,则会得到2048内存,如果规整因子是512,则得到1536内存。</p>
<p>如下图:map container的内存(“mapreduce.map.memory.mb”)被设置为1536mb 。但是AM会为其申请了2048m的内存,因为am的最小分配单位/增量(yarn.scheduler.minimum-allocation-mb)被设置为1024,也就是以1GB为单位往上加。这是一种逻辑上的分配,这个值被NodeManager用来监控该进程内存资源的使用率,如果mapTask的堆内存使用率超过了2048MB,NM将会把这个task给杀掉。</p>
<p><img src="http://hackershell.cn/image/Copy_of_Yarn_mem_params.jpg" alt="这里写图片描述" title=""> <br>
从上面的图可以看出map,reduce,AM container的JVM,“JVM”矩形代表服务进程,“Max heap”,“Max virtual”矩形代表NodeManager对JVM进程的最大内存和虚拟内存的限制。</p>
<p>When a mapreduce job completes you will see several counters dumped at the end of the job.The three memory counters below show how much physical memory was allocated vs virtual memory.</p>
<hr>
<p>对于56G内存的NM来说,如果全部跑map则56/3大约跑18个container <br>
大概了解完以上的参数之后,mapreduce.map.java.opts和mapreduce.map.memory.mb参数之间,有什么联系呢? <br>
通过上面的分析,我们知道如果一个yarn的container超除了heap设置的大小,这个task将会失败,我们可以根据哪种类型的container失败去相应增大mapreduce.{map|reduce}.memory.mb去解决问题。 <strong>但同时带来的问题是集群并行跑的container的数量少了</strong>,<strong><em>所以适当的调整内存参数对集群的利用率的提升尤为重要。</em></strong></p>
<hr>
<h2 id="对cpu的设置参数"><a name="t12"></a><strong>对cpu的设置参数:</strong></h2>
<p>在yarn的框架中,CPU的配置决定了一个任务的生死,CPU只是决定了任务的完成效率。所以CPU的设置只是简单列出来。 <br>
yarn.scheduler.minimum-allocation-vcores:最小可申请CPU数,默认是1 <br>
yarn.scheduler.maximum-allocation-vcores:最大可申请CPU数,默认是4 <br>
yarn.nodemanager.resource.cpu-vcores:集群向系统申请的总可用CPU数目,默认是8</p>
<p>mapreduce.map.cpu.vcores:task container申请的CPU数目,默认是1 <br>
完结!</p>
<hr>
<p>附录1-我的yarn-site.xml配置:</p>
<pre class="prettyprint" name="code"><code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0"?></span>
<span class="hljs-tag"><<span class="hljs-title">configuration</span>></span>
<span class="hljs-comment"><!-- Site specific YARN configuration properties
下面的配置项中值的大小,特别是内存大小,通过每个节点logs中的yarn-hadoop-nodemanager-Slave1.log 文件中查看日志来判断;出错行形如:
running beyond virtual memory limits. Current usage: 484.0 MB of 2 GB physical memory used; 4.9 GB of 4.2 GB virtual memory used. Killing container.
在yarn-hadoop-resourcemanager-Slave1.log日志文件中:形如:表示内存和cpu资源分配:
例如:总的结点资源:<memory:16000, vCores:8>==<memory:10240, vCores:5>+<memory:5760, vCores:3>
Released container container_1511512572160_0003_01_000025 of capacity <memory:2048, vCores:1> on host Slave1:42899, which currently has 5 containers, <memory:10240, vCores:5> used and <memory:5760, vCores:3> available,
--></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.resourcemanager.hostname<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>Slave1<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.aux-services<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>mapreduce_shuffle<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.pmem-check-enabled<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>true<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>检测物理内存的使用是否超出分配值,若任务超出分配值,则将其杀掉,默认true。<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.vmem-check-enabled<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>true<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>检测虚拟内存的使用是否超出;若任务超出分配值,则将其杀掉,默认true。在确定内存不会泄漏的情况下可以设置此项为 False;<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.vmem-pmem-ratio<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>8<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>任务每使用1MB物理内存,最多可使用虚拟内存量比率,默认2.1;在上一项中设置为false不检测虚拟内存时,此项就无意义了<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.resource.cpu-vcores<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>12<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>该节点上YARN可使用的总核心数;一般设为cat /proc/cpuinfo| grep "processor"| wc -l 的值。默认是8个;<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.nodemanager.resource.memory-mb<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>16000<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>该节点上YARN可使用的物理内存总量,【向操作系统申请的总量】默认是8192(MB)<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.scheduler.minimum-allocation-mb<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>3072<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>单个容器/调度器可申请的最少物理内存量,默认是1024(MB);一般每个contain都分配这个值;即:capacity memory:3072, vCores:1,如果提示物理内存溢出,提高这个值即可;<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.scheduler.maximum-allocation-mb<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>8000<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>单个容器申请最大值<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>The minimum allocation for every container request at the RM,
in terms of virtual CPU cores. Requests lower than this will throw a
InvalidResourceRequestException.<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.scheduler.minimum-allocation-vcores<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>1<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>The http address of the RM web application.<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>yarn.resourcemanager.webapp.address<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>${yarn.resourcemanager.hostname}:8088<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"></<span class="hljs-title">configuration</span>></span>
</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li><li style="color: rgb(153, 153, 153);">52</li><li style="color: rgb(153, 153, 153);">53</li><li style="color: rgb(153, 153, 153);">54</li><li style="color: rgb(153, 153, 153);">55</li><li style="color: rgb(153, 153, 153);">56</li><li style="color: rgb(153, 153, 153);">57</li><li style="color: rgb(153, 153, 153);">58</li><li style="color: rgb(153, 153, 153);">59</li><li style="color: rgb(153, 153, 153);">60</li><li style="color: rgb(153, 153, 153);">61</li><li style="color: rgb(153, 153, 153);">62</li><li style="color: rgb(153, 153, 153);">63</li><li style="color: rgb(153, 153, 153);">64</li><li style="color: rgb(153, 153, 153);">65</li><li style="color: rgb(153, 153, 153);">66</li><li style="color: rgb(153, 153, 153);">67</li><li style="color: rgb(153, 153, 153);">68</li><li style="color: rgb(153, 153, 153);">69</li></ul></pre>
<p>附录2-我的mapred-site.xml:</p>
<pre class="prettyprint" name="code"><code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0"?></span>
<span class="hljs-pi"><?xml-stylesheet type="text/xsl" href="configuration.xsl"?></span>
<span class="hljs-comment"><!-- Put site-specific property overrides in this file.
--></span>
<span class="hljs-tag"><<span class="hljs-title">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.framework.name<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>yarn<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.jobhistory.address<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>Slave1:10020<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.jobhistory.webapp.address<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>Slave1:19888<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.map.cpu.vcores<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>2<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>每个MapTask容器申请的核心数;默认1<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.map.memory.mb<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>4096<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>每个Map task容器申请的内存大小;默认1G<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.map.java.opts<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>-Xmx3072m<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>map使用的JVM的堆大小heapsize;根据单个mapper/reducer容器内存进行调整,heapsize不能大于单个mapper/reducer容器内存值,一般设置为mapreduce.map.memory.mb的85%左右<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-comment"><!--reduce阶段的设置 --></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.reduce.cpu.vcores<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>2<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>每个ReduceTask容器申请的核心数;默认1<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.reduce.memory.mb<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>8192<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>Reduce task申请的内存大小<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">property</span>></span>
<span class="hljs-tag"><<span class="hljs-title">name</span>></span>mapreduce.reduce.java.opts<span class="hljs-tag"></<span class="hljs-title">name</span>></span>
<span class="hljs-tag"><<span class="hljs-title">value</span>></span>-Xmx6144m<span class="hljs-tag"></<span class="hljs-title">value</span>></span>
<span class="hljs-tag"><<span class="hljs-title">description</span>></span>Reduce阶段的JVM的堆大小;同上<span class="hljs-tag"></<span class="hljs-title">description</span>></span>
<span class="hljs-tag"></<span class="hljs-title">property</span>></span>
<span class="hljs-tag"></<span class="hljs-title">configuration</span>></span>
</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li></ul></pre> </div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7f770a53f2.css" rel="stylesheet">
</div>
<div class="hide-article-box text-center">
<a class="btn" id="btn-readmore" data-track-view="{"mod":"popu_376","con":",https://blog.csdn.net/z3935212/article/details/78637157,"}" data-track-click="{"mod":"popu_376","con":",https://blog.csdn.net/z3935212/article/details/78637157,"}">阅读更多</a>
</div>
<script>
(function(){
function setArticleH(btnReadmore,posi){
var winH = $(window).height();
var articleBox = $("div.article_content");
var artH = articleBox.height();
if(artH > winH*posi){
articleBox.css({
'height':winH*posi+'px',
'overflow':'hidden'
})
btnReadmore.click(function(){
articleBox.removeAttr("style");
$(this).parent().remove();
})
}else{
btnReadmore.parent().remove();
}
}
var btnReadmore = $("#btn-readmore");
if(btnReadmore.length>0){
if(currentUserName){
setArticleH(btnReadmore,3);
}else{
setArticleH(btnReadmore,1.2);
}
}
})()
</script>
</article>
推荐阅读
-
打印出 1 - 10000 之间的所有对称数,例如 121、1331 等
-
1
-
1
-
1
-
1
-
Refactoring Day 1 : Encapsulate Collection
-
java.sql.SQLException: Parameter index out of range (1 > number of parameters, w 博客分类: java细节
-
【杂文】开发者从工具更新到工具规划(1)-------MySQL5.7免安装版配置
-
1、MySQL安装,版本MySQL Community Server 8.0.22
-
Java自学之路-Java基础教程-1:第一行Java代码Hello World!