转载自过往记忆(http://www.iteblog.com/)
本文链接地址:《操作系统级别对Hadoop性能优化》(http://www.iteblog.com/archives/1004)
由于Hadoop自身的一些特点,它只适合用于将Linux作为操作系统的生产环境。在实际应用场景中,管理员适当对Linux内核参数进行调优,可在一定程度上提高作业的运行效率,比较有用的调整选项如下。
一、增大同时打开的文件描述符和网络连接上限
在Hadoop集群中,由于涉及的作业和任务数目非常多,对于某个节点,由于操作系统内核在文件描述符和网络连接数目等方面的限制,大量的文件读写操作和网络连接可能导致作业运行失败,因此,管理员在启动Hadoop集群时,应使用ulimit命令将允许同时打开的文件描述符数目上限增大至一个合适的值,同时调整内核参数net.core.somaxconn至一个足够大的值。
此外,Hadoop RPC采用了epoll作为高并发库,如果你使用的Linux内核版本在2.6.28以上,你需要适当调整epoll的文件描述符上限。
二、关闭swap分区
在Linux中,如果一个进程的内存空间不足,那么,它会将内存中的部分数据暂时写到磁盘上,当需要时,再将磁盘上的数据动态置换到内存中,通常而言,这种行为会大大降低进程的执行效率。在MapReduce分布式计算环境中,用户完全可以通过控制每个作业处理的数据量和每个任务运行过程中用到的各种缓冲区大小,避免使用swap分区。
具体方法是调整/etc/sysctl.conf文件中的vm.swappiness参数。vm.swappiness有效范围是0~100,值越高表明内核应该更积极将应用程序的数据交换到磁盘,较低的值表示将延迟这种行为,而不是强制丢弃文件系统的缓冲区。
三、设置合理的预读取缓冲区大小
磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈。预读可以有效地减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一。管理员可使用Linux命令blockdev设置预读取缓冲区的大小,以提高Hadoop中大文件顺序读的性能。当然,也可以只为Hadoop系统本身增加预读缓冲区大小。
四、文件系统选择与配置
Hadoop的I/O性能很大程度上依赖于Linux本地文件系统的读写性能。Linux中有多种文件系统可供选择,比如ext3和ext4,不同的文件系统性能有一定的差别。如果公司内部有自主研发的更高效的文件系统,也鼓励使用。
在Linux文件系统中,当未启用noatime属性时,每个文件读操作会触发一个额外的文件写操作以记录文件最近访问时间。该日志操作可通过将其添加到mount属性中避免。
五、I/O调度器选择
主流的Linux发行版自带了很多可供选择的I/O调度器。在数据密集型应用中,不同的I/O调度器性能表现差别较大,管理员可根据自己的应用特点启用最合适的I/O调度器。
六、vm.overcommit_memory设置
进程通常调用malloc()函数来分配内存,内存决定是否有足够的可用内存,并允许或拒绝内存分配的请求。Linux支持超量分配内存,以允许分配比可用RAM加上交换内存的请求。
vm.overcommit_memory参数有三种可能的配置:
0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
1 表示根据vm.overcommit_ratio定义的值,允许分配超出物理内存加上交换内存的请求。vm.overcommit_ratio参数是一个百分比,加上内存量决定内存可以超量分配多少内存。例如,vm.overcommit_ratio值为50,而内存有1GB,那么这意味着在内存分配请求失败前,加上交换内存,内存将允许高达1.5GB的内存分配请求。
2 表示内核总是返回true。
除了以上几个常见的Linux内核调优方法外,还有一些其他的方法,管理员可根据需要进行适当调整。
分享到:
相关推荐
Hadoop平台的性能优化研究涉及了如何在大型分布式系统中提升任务处理速度和效率,这对于当前数据密集型应用的发展至关重要。本文将从以下几个关键点详细解读Hadoop平台性能优化的知识点。 首先,了解Hadoop平台的...
在Job级别,通过并行化作业来提高计算效率,而在Task层面,引入并发I/O操作,以充分利用硬件资源,减轻单个Task对计算和I/O的依赖,从而降低系统瓶颈的风险。这种方法旨在平衡磁盘I/O和网络带宽的使用,以达到整体...
在本项目中,我们主要探讨的是如何利用SpringBoot与Hadoop进行数据操作,以及如何解决在IE浏览器中通过Servlet访问Hadoop存储的图片时出现显示源码的问题。下面将详细阐述这两个关键知识点。 首先,SpringBoot是...
1. **Job级别的并发**:Hadoop通过MapReduce模型实现了作业级别的并行处理,但对于单个任务而言,计算和I/O操作仍然是串行进行的,这就意味着当某个任务对计算资源或I/O资源的需求较高时,可能会成为整个系统的瓶颈...
本文将深入探讨如何对这三个组件进行优化,以提高大数据处理的效率和性能。 首先,让我们从Hive开始。Hive是一个基于Hadoop的数据仓库工具,它允许用户通过SQL(HQL)来查询和管理大规模数据。优化Hive主要涉及以下...
然而,随着数据量的增加,系统性能优化、数据安全、以及如何提供个性化的服务等成为新的挑战。例如,通过优化HDFS的副本策略和MapReduce的调度算法,可以提高系统的整体性能;采用加密技术,保障用户数据隐私;引入...
4. 性能优化:通过缓存策略、负载均衡、数据预取等手段,提高系统响应速度和用户体验。 5. 监控与维护:监控Hadoop集群的运行状态,及时发现并解决潜在问题,确保服务的稳定运行。 四、实战案例与挑战 在实际部署...
`hadoop.dll`则是Hadoop在Windows系统中运行所需的动态链接库文件,它包含了Hadoop运行时的一些核心函数和API,使得Java代码能够调用到操作系统级别的功能,如打开、读取、写入文件等。 将这两个文件放置在`c/...
Hadoop-3.1.1是Hadoop的其中一个稳定版本,提供了一系列优化和改进,以提高性能和稳定性。本文将深入探讨Hadoop的bin目录以及其中的hadoop.dll和winutils.exe文件,这些文件对于在Windows环境下配置Hadoop生态系统至...
1. **环境准备**:选择合适的操作系统(如Linux),并确保所有节点的时间同步(通常使用NTP服务)。 2. **安装Java环境**:Hadoop依赖于Java运行,因此需要在所有节点上安装JDK。 3. **SSH无密码登录设置**:为了...
在Windows上运行Hadoop,可能需要针对操作系统的特性进行一些性能优化,例如调整内存分配、网络堆栈配置,以及处理与NTFS文件系统的兼容性问题。 总之,这个压缩包提供了在Windows系统上搭建和使用Hadoop HDFS...
Hadoop Native Libraries是Hadoop的一部分,它们是用C/C++编写的,提供了与操作系统更紧密的交互,包括性能优化和对硬件特性的支持。这些本地库在Java层面上不可用,但对Hadoop的功能至关重要,尤其是在处理数据压缩...
### Hadoop集群(第12期副刊)-HBase性能优化 #### 一、从配置角度优化HBase性能 **1.1 修改Linux配置** Linux系统默认的最大可打开文件数通常设定为1024个,这对于大多数应用场景来说可能足够,但在高并发环境下...
Hadoop 2.6是Hadoop的一个重要版本,它包含了多项改进和优化,以提高性能和稳定性。在Windows 7 64位操作系统上配置和运行Hadoop可能会遇到一些挑战,因为Hadoop最初是为Linux设计的。不过,通过一些特定的工具和...
8. **Hadoop优化**:包括配置参数调整、I/O优化、网络优化等,提升系统性能。 9. **实时处理与流处理**:例如使用Storm或Spark Streaming进行实时数据处理,适应现代大数据应用场景。 10. **Hadoop在实际业务中的...
标题“win32win64hadoop2.7.x.hadoop.dll.bin”暗示了这是一个与Hadoop 2.7.x版本相关的二进制文件,适用于32位和64位的Windows操作系统。描述中提到,这些文件是用于在Windows环境下部署Hadoop时必需的组件,并且在...
8. **性能优化**:Hadoop性能优化是重要的实践环节,包括数据分区策略、MapReduce参数调优、数据本地化等,这些都会影响到处理速度和资源利用率。 9. **故障恢复与容错**:Hadoop设计中内置了容错机制,了解如何...
- **性能提升**:可能对某些关键操作进行了优化,如文件读写速度、网络传输效率等。 - **兼容性增强**:可能增加了对新硬件或软件平台的支持,提升了与其他系统的集成能力。 - **错误修复**:针对0.23.7或其他早期...