您的位置:首页 > 其它

Mapr与Mapreduce配合工作(六)——调整您的MAPR安装

2013-12-31 00:35 375 查看
MAPR自动调谐集群对于大多数的目的。一个服务叫监狱长决定了配置为运行TaskTracker必须服务节点机资源,并设置相应的MapReduce参数。
在具有多个CPU节点,MAPR使用taskset的预留的CPU MAPR服务:

在五到八个CPU的节点,CPU的0是保留给MAPR服务
在九或更多CPU的节点,CPU 0和CPU1的是保留给MAPR服务

在某些情况下,你可能需要手动调MAPR提供更高的性能。例如,运行组成的异常大的任务的工作时,这是有用的,以减少时隙的每个TaskTracker分别数量和调整Java堆大小。以下部分提供了MapReduce的优化技巧。如果您更改任何设置mapred-site.xml中,重新启动TaskTracker必须。


NFS的写入性能

内核可调参数值
sunrpc.tcp_slot_table_entries
代表同时远程过程调用(RPC)请求数。该可调参数的默认值是16。增加该值到128可以提高写入速度。使用命令
的sysctl-W sunrpc.tcp_slot_table_entries = 128
设置的值。一个条目添加到您的
sysctl.conf的
文件,以在重新启动设置仍然存在。
不同的Linux发行版之间的NFS写性能会有所不同。这种建议的变更可能没有或特定群集上的负面影响。


内嵌设置

当内嵌设置被启用,每个作业的设置任务运行时直接作为一个线程,而不是分叉出来作为一个单独的任务由一个TaskTracker必须的JobTracker的内部。当内嵌设置被启用,需要一个安装任务的工作可以显示更高的性能,因为这些工作不等待的TaskTracker来获得计划,然后执行安装任务。
从而能够执行用户定义的代码作为特权JT用户的JobTracker的是有风险的。如果群集的原始MAPR安装了1.2.7或更早版本,内嵌设置是默认启用的。由的值设置禁用内嵌安装在生产集群
mapreduce.jobtracker.inline.setup.cleanup
为false
mapred-site.xml中
。添加以下部分的
mapred-site.xml的
文件:


内存设置


内存为MAPR服务

分配给每个MAPR服务的内存中指定
的/ opt / MAPR / conf /中warden.conf
文件,该文件MAPR自动配置的基础上,节点上可用的物理内存。例如,您可以调整用于TaskTracker必须的最小和最大内存,以及堆的TaskTracker必须尝试使用百分比,通过设置适当的
百分比
最大
最小
参数的
warden.conf
文件:

内存使用的服务的百分比无需添加多达100个,事实上,你可以通过设置使用小于全堆
heapsize.percent
参数对于所有的服务加起来堆的大小小于100%。一般情况下,你不应该需要调整个别服务的内存设置,除非你看到特定的内存相关的问题发生。


MapReduce的记忆

分配的MapReduce任务的内存通常等于系统总内存减去分配给MAPR服务的总内存。如果有必要,你可以使用参数mapreduce.tasktracker.reserved.physicalmemory.mb设置由MapReduce的任务保留的最大物理内存,也可以将其设置为
-1
来禁用物理内存的会计和任务管理。
如果节点内存用完,MapReduce的任务是由杀死OOM杀手来释放内存。您可以使用
mapred.child.oom_adj
(从复制
mapred-default.xml中
调整
oom_adj
为MapReduce的任务参数。可能的值
oom_adj
范围从-17到+15的分数越高,越有可能相关联的过程是由OOM杀手杀死。


招聘配置


地图任务

地图任务使用的内存主要有两种方式:

MapReduce框架使用一个中间缓冲区来存放序列化(键,值)对。
该应用程序使用的内存来运行map函数。

MapReduce框架的内存是由控制
io.sort.mb
。如果
io.sort.mb
小于从映射器发射的数据,该任务结束了溢出数据到磁盘上。如果
io.sort.mb
过大,任务可运行内存不足或浪费分配的内存。默认情况下,
io.sort.mb
设置为380MB。的值设置
io.sort.mb
到来自映射器发射的数据字节约1.5倍的数量。如果您无法通过调整价值解决内存问题
io.sort.mb
,然后尝试重新编写应用程序在其地图功能使用较少的内存。

压缩

要关闭MAPR压缩在地图输出,设置
mapreduce.maprfs.use.compression =假

要打开LZO或任何其他压缩,设置
mapreduce.maprfs.use.compression =虚假
mapred.compress.map.output =真


有关选择压缩算法的详细信息,请参阅压缩


reduce任务

如果因为任务的堆空间不足错误而失败,增加堆空间(
-Xmx的
选件
mapred.reduce.child.java.opts
)向工作给予更多的内存。如果map任务失败了,你也可以尝试减少的价值
io.sort.mb


(见mapred.map.child.java.opts在mapred-site.xml中)


TaskTracker必须配置

理想情况下,地图的数量和减少时隙应当基于应用的需要决定。地图槽应根据多少地图任务可以适合在存储器中,并减少时隙应该基于CPU的数量。如果在一个MapReduce作业的每个任务需要3 GB,并且每个节点有9GB预留的MapReduce任务,然后地图插槽的总数应为3。数据每个map任务必须处理量也影响多少地图插槽应配置。如果每个map任务处理256 MB(在MAPR默认块大小),然后每个map任务应该有800 MB的内存。如果有4个GB的保留在地图的任务,然后地图时隙的数目应该是4000MB/800MB,或5个时隙。
有三种方法来调整计算在地图的数量,减少每个TaskTracker必须节点上的插槽:

指定映射的最大数量,并降低每个TaskTracker必须节点上的插槽。
定义一个公式来计算图的最大数目,并减少时隙。
使用默认值。


指定时隙的最大数目

您可以直接设置这些参数在一个整数
mapred-site.xml的
文件:

mapred.tasktracker.map.tasks.maximum

mapred.tasktracker.reduce.tasks.maximum


图标

当你改变一个TaskTracker必须节点上的插槽数,它可能需要长达十分钟的集群范围内的槽总容量准确反映变化。这种延迟是由控制mapred.tasktracker.expiry.interval参数,它决定了一个TaskTracker必须多久可以失败,被宣告丢失前心跳。


定义一个公式

你可以定义一个公式
mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum
参数。
此公式使用的语法
评估和演示
,并采取下列变量:

CPUS
-节点上CPU的数量存在
DISKS
-磁盘数量目前的节点上
MEM
-内存预留的MapReduce任务

这些一般的语法是
有条件?TRUE:FALSE
。对于一个假设的4芯,12盘节点,有条件的形式
(2 * CPUS <磁盘)?2 *的CPU:DISKS
计算结果为8,生成8地图或减少插槽。上一个6芯,12磁盘的节点,这个条件的计算结果为12,产生12 map或reduce插槽。


使用默认值

离开这些变量(
mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum
)设置为默认值-1。

默认显示该地图的最大数量,降低槽是由这些公式计算:


减少时隙计算

减少的时隙的数目是第一计算的,因为剩余的内存可能是不够的另一地图槽。

可用于MapReduce的RAM总量的60%分配给reduce任务,

例如:内存4994MB可用于MapReduce的,其中200MB分配给小型作业。这使得4794MB的map和reduce插槽。

60%(4794MB)= 2876MB。
划分的内存总量为1500MB由reduce任务(每个reduce任务的默认内存大小)。

举例:2876MB/1500MB = 1插槽,1376MB遗留下来的。

图标

您可以为reduce任务的默认通过改变的值赋给一个不同的内存大小
mapred.reducetask.memory.default
参数。

地图时隙计算

一旦减少的时隙数被计算,地图槽可以从剩余的内存分配。

减去的内存用于减少从插槽可在地图总,减少插槽的数量。然后由800MB(每map任务的默认内存大小)划分的结果。

举例:(4794MB-1500MB)/ 800MB = 3294MB/800MB = 4插槽,94MB遗留下来的。

图标

您可以为map任务默认通过改变的值赋给一个不同的内存大小
mapred.maptask.memory.default
参数。

MAPR允许JobTracker的过度时间表提前插槽的可用性TaskTracker必须节点上的任务,创造了管道。这种优化可以让TaskTracker必须尽快先前运行的map任务完成后启动每个map任务。任务的过度时间表的数量应约25-50%的地图插槽总数。你可以调整这个数字与参数
mapreduce.tasktracker.prefetch.maptasks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: