您的位置:首页 > 大数据 > Hadoop

hdfs+yarn 参数调优

2017-01-16 17:01 232 查看
1.系统参数调整
中文名称英文名称默认值推荐值或推荐策略修改命令作用备注
socket的监听队列最大值net.core.somaxconn1281024或更大echo 1024 >/proc/sys/net/core/somaxconn增大打开文件数据和网络连接上限,调整内核参数net.core.somaxconn,提高读写速度和网络带宽使用率如果是hadoop使用,需重启hadoop才能有效,并且要配合hadoop集群参数ipc.server.listen.queue.size使用才有效
读取不更新文件atime属性noatime noatimevi /etc/fstab

#/dev/data1 / ext4 defaults,noatime 0 0

mount -o remount /dev/data1
当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。 
磁盘预读缓存区大小blockdev --getra /dev/sda2562048或更大blockdev --setra 2048 /dev/sda预读可以减少磁盘寻道次数和I/O等待时间执行命令只对一块磁盘有效,需执行多次,且重启系统后失效
系统IO调度器IO Schedulercfqdeadlineecho deadline > /sys/block/sda/queue/schedulerDEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:

FIFO(Read) > FIFO(Write) > CFQ
查看命令:

cat /sys/block/sda/queue/scheduler
epoll文件描述符上限fs.epoll.max_user_watches27054714270547140echo /proc/sys/fs/epoll/max_user_watches单个用户使用epoll进行watch的文件描述符上限。 note(dirlt):对于服务器应该特别有用,可以限制内存使用量查看命令:

sysctl -a |grep epoll
设置openfileulimit -a |grep 'open files'102465535或更大即时生效:

ulimit -n 65535

永久生效:

在/ect/security/limits.conf中添加

* - nofile 65535

* - nproc 65535 
打开文件描述上限太小,会出现打不开文件的问题 
系统交换分区swap开启关闭swapoff -a如果进程内存不足,系统会将内存中的部分数据暂时写入磁盘,当需要时再将磁盘上的数据动态换置到内存中,这样会降低进程执行效率重新挂载swap分区:

swapon -a
2.hdfs的参数
数据块的副本数dfs.replication32页面修改减少副本块可以节约存储空间 
SequenceFile I/O 缓存区大小 io.file.buffer.size 131072(可以更大)core-site.xml 的群集范围高级配置代码段(安全阀)hadoop访问文件的IO操作都需要通过代码库,在很多情况下io.file.buffer.size都被用来设置缓存的大小。不论是对硬盘或者是网络操作来讲,较大的缓存都可以提供更高的数据传输,但这也就意味着更大的内存消耗和延迟。这个参数要设置为系统页面大小的倍数,以byte为单位。 
.Trash目录下文件被永久删除前保留的时间fs.trash.interval 1440(24小时)core-site.xml 的群集范围高级配置代码段(安全阀)  
垃圾回收的检查间隔fs.trash.checkpoint.interval 1440core-site.xml 的群集范围高级配置代码段(安全阀)  
是否启动Hadoop的本地库io.native.lib.available truecore-site.xml 的群集范围高级配置代码段(安全阀)本地库可以加快基本操作,例如IO,压缩等。 
NameNode 处理程序计数dfs.namenode.handler.count40400页面修改设定 namenode server threads 的数量,这些 threads 會用 RPC 跟其他的 datanodes 沟通。当 datanodes 数量太多时会发現很容易出現 RPC timeout,解決方法是提升网络速度或提高这个值,但要注意的是 thread 数量多也表示 namenode 消耗的内存也随着增加。扩展性相关参数
NameNode 服务处理程序计数dfs.namenode.service.handler.count 400页面修改  
NameNode的java堆栈大小NameNode Java heap size 90G页面修改  
DataNode的java堆栈大小DataNode maximum Java heap size 16G页面修改  
DataNode 处理程序计数dfs.datanode.handler.count350   
提前读取的字节数dfs.datanode.readahead.bytes4M64M页面修改读取块文件时,DataNode 可以使用 posix_fadvise 系统呼叫将数据显式放入操作系统缓冲区缓存中当前读取器位置之前。这样可以提高性能,尤其是在磁盘高度占用的情况下。该配置指定 DataNode 尝试提前读取的位置比当前读取位置提前的字节数。 
ipc服务监听队列长度ipc.server.listen.queue.size1024与系统参数net.core.somaxconn保持一致core-site.xml 的群集范围高级配置代码段(安全阀)增大打开文件数据和网络连接上限,提高hadoop集群读写速度和网络带宽使用率 
3.yarn的参数
日志聚合保留期yarn.log-aggregation.retain-seconds72页面修改删除聚合日志前要保留它们多久 
Mapreduce 提交复制mapreduce.client.submit.file.replication101页面修改mapreduce任务数据的副本数,默认是10,比普通HDFS文件的默认幅本数大很多,可能也是考虑到把输入数据放到更多的DN上,尽可能实现本地数据计算,但会增大数据量,更改为1个副本 
MapReduce产生的中间数据存放目录mapred.local.dir /data/cache1/dfs/mapred/local,/data/cache2/dfs/mapred/local,/data/cache3/dfs/mapred/local,/data/cache4/dfs/mapred/local页面修改  
Map 任务 Java 选项库mapreduce.map.java.opts -Xmx1024M页面修改jvm启动时的参数,只对java,scala程序有效(相比mapreduce.map.memory.mb要小一点是因为java程序占用内存较少) 
Map 任务内存mapreduce.map.memory.mb 1.5G页面修改map任务申请的内存 
Reduce 任务 Java 选项库mapreduce.reduce.java.opts -Xmx2560M页面修改同map 
Reduce 任务内存mapreduce.reduce.memory.mb 3G页面修改同map 
I/O 排序因子mapreduce.task.io.sort.factor10100页面修改排序文件时要合并的流的数量。也就是说,在 reducer 端合并排序期间要使用的排序头数量。此设置决定打开文件句柄数。并行合并更多文件可减少合并排序迭代次数并通过消除磁盘 I/O 提高运行时间。注意:并行合并更多文件会使用更多的内存。如 'io.sort.factor' 设置太高或最大 JVM 堆栈设置太低,会产生过多地垃圾回收。Hadoop 默认值为 10,建议使用更高值。 
I/O 排序内存缓冲 (MiB)mapreduce.task.io.sort.mb 512M页面修改当排序文件时要使用的内存缓冲总量。注意:此内存由 JVM 堆栈大小产生(也就是:总用户 JVM 堆栈 - 这些内存 = 总用户可用堆栈空间)。注意:Cloudera 的默认值不同于 Hadoop 的默认值;默认情况下,Cloudera 使用更大的缓冲,因为现代机器通常有更多的 RAM。 
洗牌期间并行传输的默认数量mapreduce.reduce.shuffle.parallelcopies1050页面修改复制(洗牌)阶段期间 reduce 运行的并行传输的默认数量。此数量应在(节点数 * 每节点 map 时隙数)的平方根与节点数 * 每节点 map 时隙数/2 之间 
JobHistory Server 的 Java 堆栈大小(字节)  10G页面修改  
ResourceManager 的 Java 堆栈大小(字节)  10G页面修改  
容器内存yarn.nodemanager.resource.memory-mb 20G页面修改每个节点分配给yarn跑任务的内存 
容器虚拟 CPU 内核yarn.nodemanager.resource.cpu-vcores 12页面修改每个节点分配给yarn跑任务的cpu 
root队列的所有子队列yarn.scheduler.capacity.root.queues default容量调度程序配置高级配置代码段(安全阀)目前只配置了default,同时跑的任务多了可以配置不同队列,每个队列占用的的资源可以在这里调控 
队列的资源容量占比(百分比)。yarn.scheduler.capacity.root.capacity 100容量调度程序配置高级配置代码段(安全阀)系统繁忙时,每个队列都应该得到设置的量的资源;当系统空闲时,该队列的资源则可以被其他的队列使用。同一层的所有队列加起来必须是100%。参考http://www.360doc.com/content/14/0117/15/834950_345972005.shtml,配置集群同时运行的任务数量
 yarn.nodemanager.aux-services mapreduce_shuffleyarn-site.xml 的 YARN 服务高级配置代码段(安全阀)跑mapreduce的必要参数 
 yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandleryarn-site.xml 的 YARN 服务高级配置代码段(安全阀)跑mapreduce的必要参数 
 yarn.log-aggregation.retain-check-interval-seconds 86400yarn-site.xml 的 YARN 服务高级配置代码段(安全阀)多长时间检查一次日志,并将满足条件的删除(yarn程序的日志可以保存到hdfs,设置存储期限) 
 yarn.nodemanager.remote-app-log-dir /data/logs/hadoop-yarn/appsyarn-site.xml 的 YARN 服务高级配置代码段(安全阀)yarn执行程序的日志存放目录 
JobTracker可以启动的线程数mapreduce.jobtracker.handler.count10100页面修改JobTracker可以启动的线程数暂时不考虑增大,任务增多的时候需要调整此参数
压缩 Map 输出 mapreduce.map.output.compressFALSETRUE页面修改如已启用,将在将 map 输出发送到网络前对其进行压缩。将是生成的客户端配置的一部分。 
MapReduce Map 输出的压缩编码解码器mapreduce.map.output.compress.codecorg.apache.hadoop.io.compress.DefaultCodecorg.apache.hadoop.io.compress.SnappyCodec页面修改采用snappy压缩 
默认启动的reduce数mapreduce.job.reduces100.95 or 1.75 multiplied by (<no. of nodes> * <no. of maximum containers per node>)

本次测试使用25
页面修改提升reduce并发度reduce数量最好自己设置
单个shuffle可以占用Java 堆栈的百分比上限mapreduce.reduce.shuffle.memory.limit.percent0.250.45yarn-site.xml 的 YARN 服务高级配置代码段(安全阀)每个fetch取到的输出的大小能够占的内存比的大小 
触发merge的内存百分比mapreduce.reduce.shuffle.merge.percent0.660.9yarn-site.xml 的 YARN 服务高级配置代码段(安全阀)在shuffle阶段期间用于触发merge的Java堆栈百分比 
传输的并行线程数mapreduce.tasktracker.http.threads40100yarn-site.xml 的 YARN 服务高级配置代码段(安全阀)map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数 
JobTracker MetaInfo Maxsize mapreduce.job.split.metainfo.maxsize10000000-1页面修改分割 metainfo 文件的大小上限。JobTracker 将不会尝试读取大于已配置值的分割 metainfo 文件。大量小文件时有效
最大shuffle连接 mapreduce.shuffle.max.connections0暂不调整页面修改  
客户端线程计数yarn.resourcemanager.client.thread-count50100页面修改用于处理应用程序管理请求的线程数量。优先级低

扩展性相关参数
调度程序线程计数yarn.resourcemanager.scheduler.client.thread-count50100页面修改用于通过调度器接口处理请求的线程数量。优先级低

扩展性相关参数
管理客户端线程计数 yarn.resourcemanager.admin.client.thread-count110页面修改用于处理 ResourceManager 管理接口的线程数量。优先级低

扩展性相关参数
容器管理器线程计数 yarn.nodemanager.container-manager.thread-count20建议调整为(no. of maximum containers per node)的整数倍

本次调整为50
页面修改容器管理器使用的线程数,主要用于AM与NM通信。优先级低
清理线程计数yarn.nodemanager.delete.thread-count416页面修改用于清理临时结果的线程数。优先级低
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: