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了。
个人建议仅供参考,你也可以尝试一下。
|