Hadoop运维人员,负责为Hadoop提供一个高效和可靠的作业执行环境,很多时候,需要从全局出发,通过调整一些关键参数以提供系统的性能和吞吐量.
总体上看,Hadoop运维需要从硬件选择,操作系统参数调优,JVM参数调优,Hadoop参数调优四个方面着手进行调优
1.硬件选择
在硬件环境中,应着重提高Master机的物理性能(使用更好的CPU和更大的内存等等).
Hadoop自身是主从架构,其中的NameNode机负责全局的元数据存储,心跳以及访问入口等等,其重要性远远大于Slayer机
2.操作系统调优
2.1 增大同时打开的文件描述符和网络连接上限
在Hadoop集群中,由于涉及的作业和任务数非常多,对于某个节点,由于操作系统在文件描述符和网络连接的限制,大量的文件读写和网络请求可能导致任务失败.
因此Hadoop运维应该在启动Hadoop集群前,将文件描述符和网络连接设为一个合理的值
文件描述符ulimit -n
用户最大进程 nproc
2.2 关闭Swap分区
在Linux中,如果一个进程内存不足,那么它会将部分内存数据写到暂时写到磁盘上,当需要时,再将磁盘数据置换到内存中.
但在Hadoop中,用户是可以自主每个作业的数据量以及任务运行需要的各种缓冲区大小的,这时Swap分区,会大大降低进程执行效率的
/etc/sysctl.conf vm.swappiness属性
2.3 设置合理的预读缓冲区大小
磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈。预读可以有效地减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一。
管理员可使用Linux命令blockdev设置预读取缓冲区的大小,以提高Hadoop中大文件顺序读的性能。当然,也可以只为Hadoop系统本身增加预读缓冲区大小
2.4 文件系统选择与配置
Hadoop的IO性能,很大程度依赖HDFS,或者说本地文件的读写性能,Linux中有多种文件系统可供选择,比如ext3和ext4,不同的文件系统性能有一定的差别
2.5 110调度器选择
主流的Linux发行版自带了很多可供选择的I/O调度器。在数据密集型应用中,不同的I/O调度器性能表现差别较大,管理员可根据自己的应用特点启用最合适的I/O调度器
3.JVM调优
由于Hadoop中的每个服务和任务均会运行在一个单独的JVM中,因此,JVM的一些重要参数也会影响Hadoop性能。管理员可通过调整JVM FLAGS和JVM垃圾回收机制提高Hadoop性能