分享

yarn参数设置的一些疑问

linguobao 发表于 2014-6-25 11:07:50 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 9331
系统环境:hadoop2.2+hbase0.98+hive0.12
yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB)。
如果我的节点总共只有4G的物理内存,此时我又不调整这个参数的默认值,这时候会出现什么情况???

yarn.scheduler.minimum-allocation-mb
表示单个任务可申请的最少物理内存量,默认是1024(MB)。
这里面的单个任务是不是可以指一个map任务,一个reduce任务等等;如果是,若该节点上的任务数超过8个,结合上一个参数,这时候yarn会自动调整还是会报错???

mapred.max.split.size
指的是数据的最大分割单元大小,默认是256(MB)。
这个是hive的一个配置参数。在yarn上启动一个hive查询,这时候如果有8个map,那这8个map是否可以等同于yarn的8个任务???这8个map占用的物理内存是按照mapred.max.split.size来算还是按照yarn.scheduler.minimum-allocation-mb来算????


hive和hbase整合之后,在hive中建了一个表关联hbase中已经存在的表,然后执行了一个count统计,发现map的数量是跟hbase中这个表的region个数一样的,不管我把mapred.max.split.size调整多大或多小,都是跟region个数一样,这个是为什么???


请各位大神指定迷津,谢谢!

已有(4)人评论

跳转到指定楼层
linguobao 发表于 2014-6-25 11:12:39
补充:
mapred.max.split.size指的是数据的最大分割单元大小
所以如果不做修改的话,就是1个map task处理256MB数据。
回复

使用道具 举报

xuanxufeng 发表于 2014-6-25 13:45:47


yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB)。
如果我的节点总共只有4G的物理内存,此时我又不调整这个参数的默认值,这时候会出现什么情况???
回答:
虽然默认是8192(MB),但是内存4G,应该不会报错,那最大也就是4G了




yarn.scheduler.minimum-allocation-mb
表示单个任务可申请的最少物理内存量,默认是1024(MB)。
这里面的单个任务是不是可以指一个map任务,一个reduce任务等等;如果是,若该节点上的任务数超过8个,结合上一个参数,这时候yarn会自动调整还是会报错???
回答:
首先对于task,分为两种,一种maptask,一种是reducetask。所以无论哪种task,申请的最少资源为1024(MB)。yarn有自己的调度,一般不会出错,否则健壮性就太差了。





mapred.max.split.size
指的是数据的最大分割单元大小,默认是256(MB)。
这个是hive的一个配置参数。在yarn上启动一个hive查询,这时候如果有8个map,那这8个map是否可以等同于yarn的8个任务???这8个map占用的物理内存是按照mapred.max.split.size来算还是按照yarn.scheduler.minimum-allocation-mb来算????

回答:
首先这里面有一个分割的问题,如同一个是容器,一个是水,yarn.scheduler.minimum-allocation-mb相当于容器,这里不只是包含mapred.max.split.size而且包括运行所需要的内存。





hive和hbase整合之后,在hive中建了一个表关联hbase中已经存在的表,然后执行了一个count统计,发现map的数量是跟hbase中这个表的region个数一样的,不管我把mapred.max.split.size调整多大或多小,都是跟region个数一样,这个是为什么???

回答:
首先这里面有一个分割的问题,如同一个是容器,一个是水,yarn.scheduler.minimum-allocation-mb相当于容器,这里不只是包含mapred.max.split.size而且包括运行所需要的内存。


这里引用下面一段内容。
1.    通常情况下,作业会通过input的目录产生一个或者多个map任务。
主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);

2.    举例:
a)    假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数
b)    假设input目录下有3个文件a,b,c,大小分别为10m,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数
即,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。

根据上面的内容,然后还需要明白region在hadoop中其实就是一个文件。
也就是说map的数量会大于等于region的数量,为什么你调正mapred.max.split.size会无效,是因为文件的数量已经存在了。如果你调的足够小的话,可能就会有更多的map了。

个人建议仅供参考,你也可以尝试一下。


回复

使用道具 举报

linguobao 发表于 2014-6-25 14:19:48
xuanxufeng 发表于 2014-6-25 13:45
yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB)。
如 ...

最后一个hbase和hive的整合,region的大小远远大于256M了,为什么不能产生更多的map呢?已经试验过了。
回复

使用道具 举报

xuanxufeng 发表于 2014-6-25 14:44:23
linguobao 发表于 2014-6-25 14:19
最后一个hbase和hive的整合,region的大小远远大于256M了,为什么不能产生更多的map呢?已经试验过了。

这里有两种可能
1.修改,但是没有生效
2.修改了,但是受到其他配置的影响,没有生效。
你在找找,是不是其他地方还需要修改。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条