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

时间:2023-02-05 14:38:08

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的文件:

的<p​​roperty> 
   <NAME> mapreduce.jobtracker.inline.setup.cleanup </名称> 
   值<value>  </值>
   <DESCRIPTION>
   </说明>       
</财产>

内存设置

内存为MAPR服务

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

...
service.command.tt.heapsize.percent
2
service.command.tt.heapsize.max
325
service.command.tt.heapsize.min
64
...

内存使用的服务的百分比无需添加多达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必须节点上的插槽:

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

指定时隙的最大数目

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

 

图标

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

 

定义一个公式

你可以定义一个公式mapred.tasktracker.map.tasks.maximummapred.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.maximummapred.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