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
参数。
此公式使用的语法评估和演示
,并采取下列变量:
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遗留下来的。
地图时隙计算
一旦减少的时隙数被计算,地图槽可以从剩余的内存分配。
- 减去的内存用于减少从插槽可在地图总,减少插槽的数量。然后由800MB(每map任务的默认内存大小)划分的结果。
举例:(4794MB-1500MB)/ 800MB = 3294MB/800MB = 4插槽,94MB遗留下来的。
MAPR允许JobTracker的过度时间表提前插槽的可用性TaskTracker必须节点上的任务,创造了管道。这种优化可以让TaskTracker必须尽快先前运行的map任务完成后启动每个map任务。任务的过度时间表的数量应约25-50%的地图插槽总数。你可以调整这个数字与参数mapreduce.tasktracker.prefetch.maptasks
。