第9章 Hadoop性能调优
在前几章中,我们深入介绍了Hadoop MapReduce内部实现原理,包括JobTracker、TaskTracker、Task等组件的实现细节。基于对这些组件的深入理解,用户可以很容易通过调整一些关键参数使作业运行效率达到最优。本章将分别从Hadoop管理员和用户角度介绍如何对Hadoop进行性能调优以满足各自的需求。本章中的大部分内容在前几章中已经有所涉及,如果你对Hadoop优化方法已经非常熟悉,可以跳过本章。
9.1 概述
Hadoop性能调优是一项工程浩大的工作,它不仅涉及Hadoop本身的性能调优,还涉及更底层的硬件、操作系统和Java虚拟机等系统的调优,具体如图9-1所示。对这几个系统适当地进行调优均有可能给Hadoop带来性能提升。
对于非Hadoop自身方面的性能调优,比如硬件(如CPU类型、内存大小的选择等)、操作系统(比如文件系统选择、IO Scheduler选择、启用预读取机制、关闭swap等)、Java虚拟机(比如调整JVM参数)等,市面上有很多书籍和技术文档已经进行了详细介绍,本章只是进行简单介绍[1]。本章将重点讲解如何通过调整Hadoop自带的一些参数使作业运行效率达到最优。总体来说,提高作业运行效率需要Hadoop管理员和作业拥有者共同的努力,其中,管理员负责为用户提供一个高效的作业运行环境,而用户则负责根据自己作业的特点让它尽可能快地运行完成。
图 9-1 Hadoop层次结构图
在本书编写时,Apache Hadoop主要分为0.20.X(包括1.X)、0.21.X、0.22.X和0.23.X(包括2.0以上版本)四个系列,Cloudera Hadoop主要分为CDH 3和CDH 4两个系列,其中0.23.X(包括2.0以上版本)和CDH 4属于下一代MapReduce,本书不予讨论。这里重点介绍如何对Apache和Cloudera版本的第一代MapReduce进行性能调优。
[1]参考AMD的技术文档“Hadoop Performance Tuning Guide”和Eric Sammer的书籍《Hadoop Operations》。