问题描述
操作系统(os)1.禁用Linux逻辑管理卷(LVM)2.挂载数据分区时禁用文件atime和目录atime3.Linux内核参数调整(/etc/sysctl.conf)vm.swappiness=0;HDFS参数优化无特别标识均为:hdfs-site.xml属性。1.fs.default.name(core-site.xml)定义客户端所使用的默认文件系统的URL2.dfs.name.dir(重要)定义了一个用逗号(中间不加空格)分割的不同的本地文件路径,NameNode要在这些路径上保存一个HDFS文件数据的备份。3.dfs.data.dir定义了DataNode在哪里存放HDFS数据块4.Io.file.buffer.size(core-site.xml)用来设置hadoop访问文件IO的缓存大小。默认值为:4kb。参考值:64mb(65536byte)5.dfs.balance.bandwidthPerSec定义了HDFS平衡器(balancer)平衡每个DataNode平衡操作所允许的最大带宽,单位是byte6.dfs.block.size定义了所有新建文件的默认数据块大小。默认值:64MB参考值:128MB(134217728)7.dfs.DataNode.du.reserved定义了每个dfs.data.dir所定义的硬盘空间需要保留的大小。以byte为大小默认值为0,参考值:107374182408.dfs.NameNode.handler.count定义NameNode工作线程池(用来处理客户端的远程过程调用及集群守护进程调用)工作线程大小。该值一般原则是将值设为集群的自然对数乘以20即:20logNN为集群大小。9.dfs.DataNode.failed.volumes.tolerated定义整个DataNode声明失败前,允许多少个硬盘出现故障。默认值为:0参考值:110.fs.trash.interval(core-site.xml)定义.Trash目录文件下文件被永久删除前保留的时间。默认值:0(不保存)推荐值:1440(24小时)注意:垃圾回收功能只是针对命令式。对javaApi调用的删除无效。MapReduce无特别声明均为mapred-site.xml属性。1.mapred.job.tracker定义了主机名和端口信息,jobtracker在该端口监听远程过程调用(RPC)。2.mapred.local.dir定义了map端中间结果文件存储路径。如果设置路径为专有硬盘,那么就没必要配置hdfs-site.xml中的dfs.DataNode.du.reserved属性了3.mapred.java.child.optsTasktracker是在一个独立的JVM进程里启动子任务的,启动时可以把一些参数传递给它。比较常见的是设置内存的使用。默认值为:200MB参考值为:-Xms2g.4.mapred.child.ulimit可以对JVM子任务最大堆栈大小进行补充(即它规定一个进程在它运行结束前可以使用的最大虚拟内存)该值一般大致可设为JVM最大堆栈大小的1.5倍。5.mapred.tasktracker.map(和reduce).tasks.maximum6.hadoopmapreduce任务并发数可能等于mapred.tasktracker.map.tasks.7.maximum和mapred.tasktracker.reduce.tasks.maximum之和每个任务都在一个独立的JVM上运行。根据mapred.java.child.opts设置的内存,如果mapred.java.child.opts设置为2g,mapred.tasktracker.map.tasks.maximum设置为12则map任务就消耗24g内存。该值一般情况下为每个物理CPU配置1.5个任务,cup*1.5=mapreduce并发任务总个数,然后将三分之二处理时间分片给map任务三分之一留给reduce任务8.io.sort.mbmap任务的一些输出会写在循环缓冲区内,该缓冲区大小是由该属性指定的,当该缓冲区使用率达到80%时,就会启动一个后台进程将溢出数据写到mapred.local.dir指定的路径下。默认值为:100MB同时注意该数据所指定的内存是包含在子任务的JVM堆栈空间中的。9.io.sort.factor它定义了一次性能合并的文件数目,以下两种情况会触发MapReduce的文件合并操作:第一种是map任务执行完毕spill文件需要合并,第二种是在reduces获取了所有map任务输出文件后以及用户调用reduce代码之前。增大每一轮打开文件个数进行合并可以减少数据读取和写入硬盘的时间,也减少了硬盘IO的操作。但合并更多的文件意味着需要更多的内存。10.mapred.compress.map.output启用map端的压缩参考值:true11.mapred.map.output.compression.codec定义了在MapReduce任务中使用的map输出压缩码,如果该值为空则org.apache.hadoop.io.compress.defaultCodec会被调用参考值:org.apache.hadoop.io.compress.SnappyCodec12.mapred.output.compression.type如果MapReduce任务的输出需要写成SequenceFile格式,那么该参数会确定所使用的压缩类型。可配值有三个:第一种是记录(RECORD),该值会使得SequenceFile的每个数据都被单独压缩。第二种值是块(BLOCK)该值会使得所有关键数据按固定大小分块压缩。第三种是无(NONE)设置该值就不会为数据进行压缩。参考值:BLOCK。13.mapred.job.tracker.handler.countjobtracker会维护一个工作线程池来处理远程过程调用,该值用来控制线程池大小。参考值20logNN为集群大小。14.mapred.reduce.parallel.copies在MapReduce作业洗牌(shuffle)过程中,每个reducer任务需要从各个tasktrackers中获取同一作业运行map任务产生的中间数据。该参数可以设置reducer可以并行获取数据个数。一般可以设置为4*logNN为集群大小。15.mapred.reduce.tasks该参数规定了作业要产生的reduce个数。16.Tasktracker.http.threads控制每个tasktracker用于处理请求的并行工作线程数。HTTP线程的个数与集群reduce槽的数量,和被许可并行处理的数据份数是成正比的。17.Mapred.reduce.slowstart.completed.maps一旦一些map任务生成了中间结果,就可以提前让reducer对这些数据进行洗牌(shuffle),尽可能早的拷贝数据,可以使reduce任务在最后一个map任务完成时就可以直接运行。该属性定义允许启动reduce进程时map任务完成的百分比。参考值:0.8即80%