MAPR自动调谐集群对于大多数的目的。一个服务叫监狱长决定了配置为运行TaskTracker必须服务节点机资源,并设置相应的MapReduce参数。
在具有多个CPU节点,MAPR使用taskset的预留的CPU MAPR服务:
在某些情况下,你可能需要手动调MAPR提供更高的性能。例如,运行组成的异常大的任务的工作时,这是有用的,以减少时隙的每个TaskTracker分别数量和调整Java堆大小。以下部分提供了MapReduce的优化技巧。如果您更改任何设置mapred-site.xml中,重新启动TaskTracker必须。
内核可调参数值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的
文件:
的/ opt / MAPR / conf /中warden.conf
文件,该文件MAPR自动配置的基础上,节点上可用的物理内存。例如,您可以调整用于TaskTracker必须的最小和最大内存,以及堆的TaskTracker必须尝试使用百分比,通过设置适当的
百分比
,
最大
和
最小
参数的
warden.conf
文件:
内存使用的服务的百分比无需添加多达100个,事实上,你可以通过设置使用小于全堆heapsize.percent
参数对于所有的服务加起来堆的大小小于100%。一般情况下,你不应该需要调整个别服务的内存设置,除非你看到特定的内存相关的问题发生。
分配的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框架的内存是由控制io.sort.mb
。如果io.sort.mb
小于从映射器发射的数据,该任务结束了溢出数据到磁盘上。如果io.sort.mb
过大,任务可运行内存不足或浪费分配的内存。默认情况下,io.sort.mb
设置为380MB。的值设置io.sort.mb
到来自映射器发射的数据字节约1.5倍的数量。如果您无法通过调整价值解决内存问题io.sort.mb
,然后尝试重新编写应用程序在其地图功能使用较少的内存。
mapreduce.maprfs.use.compression =假
mapreduce.maprfs.use.compression =虚假
和mapred.compress.map.output =真
有关选择压缩算法的详细信息,请参阅压缩。
如果因为任务的堆空间不足错误而失败,增加堆空间(-Xmx的
选件mapred.reduce.child.java.opts
)向工作给予更多的内存。如果map任务失败了,你也可以尝试减少的价值io.sort.mb
。
(见mapred.map.child.java.opts在mapred-site.xml中)
理想情况下,地图的数量和减少时隙应当基于应用的需要决定。地图槽应根据多少地图任务可以适合在存储器中,并减少时隙应该基于CPU的数量。如果在一个MapReduce作业的每个任务需要3 GB,并且每个节点有9GB预留的MapReduce任务,然后地图插槽的总数应为3。数据每个map任务必须处理量也影响多少地图插槽应配置。如果每个map任务处理256 MB(在MAPR默认块大小),然后每个map任务应该有800 MB的内存。如果有4个GB的保留在地图的任务,然后地图时隙的数目应该是4000MB/800MB,或5个时隙。
有三种方法来调整计算在地图的数量,减少每个TaskTracker必须节点上的插槽:
您可以直接设置这些参数在一个整数mapred-site.xml的
文件:
mapred.tasktracker.map.tasks.maximum
mapred.tasktracker.reduce.tasks.maximum
。
你可以定义一个公式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。
默认显示该地图的最大数量,降低槽是由这些公式计算:
减少的时隙的数目是第一计算的,因为剩余的内存可能是不够的另一地图槽。
一旦减少的时隙数被计算,地图槽可以从剩余的内存分配。
MAPR允许JobTracker的过度时间表提前插槽的可用性TaskTracker必须节点上的任务,创造了管道。这种优化可以让TaskTracker必须尽快先前运行的map任务完成后启动每个map任务。任务的过度时间表的数量应约25-50%的地图插槽总数。你可以调整这个数字与参数mapreduce.tasktracker.prefetch.maptasks
。