[大牛翻译系列]Hadoop(12)MapReduce 性能调优:诊断硬件性能瓶颈
6.2.5 硬件性能问题
尽管单独的硬件的MTTF(平均失效前时间)都数以年记,然而在集群中就完全不是这么一回事了。整个集群的MTTF就要小得多。这一节要介绍如何确定CPU,内存,磁盘和网络是否过度利用了,以及如何将它们的利用率调节到一个合理的水平。
技术39 查找硬件的失效
节点失效可能有如下原因:磁盘控制器失效,磁盘空间事故,其他硬件事故,以及Hadoop自身的缺陷(可能性较低)。节点失效将会导致MapReduce作业执行时间变长。在较小的集群上的影响要更为明显。接下来就要介绍如何确定集群中的节点是否失效。
问题
需要确定是否是由于硬件故障导致作业运行缓慢,并查看节点的黑名单和灰名单。
方案
使用JobTracker UI来检查黑名单或灰名单中的节点。
讨论
图6.24介绍了在哪里可以看到黑名单和灰名单。
小结
在集群中,特别是较小的集群是不希望看到有节点在黑名单或灰名单里的。灰名单中的节点会时不时地失效。这些节点会导致部分任务失败,拉长作业执行时间。黑名单中的节点根本不会有任何作用,这样使作业的性能远远小于预期。
如果需要了解节点进入黑名单或灰名单的原因,则需要查看任务,任务跟踪器(TaskTracker),或数据节点的日志。一旦出现了这种情况,则需要调查那些失效的节点。
比较好的一个方法是设置对黑名单和灰名单中节点的监控,这样就可以在它们失效时快速反应。通过Nagios监视器(http://goo.gl/R6deM)可以达到这个目的。它的原理是使用curl从JobTracker上通过http://127.0.0.1:50030/machines.jsp?type=blacklisted下载黑名单网页,并检查其中是否有节点。
技术40 CPU竞争
如果节点过度利用了CPU,那么会导致大量的时间被消耗在上下文切换,进而减少作业获得的计算能力。
问题
需要确定是否由于CPU过度利用导致了作业运行缓慢。
方案
使用Linux工具vmstat来观测CPU的上下文切换。
讨论
从vmstat中可以得到CPU利用率,IO等待,上下文切换等信息。通过这些信息可以快速评估主机的繁忙程度。图6.25说明了vmstat的执行方法和执行选项。(图的对齐有问题,这个暂时没有修正。请谅解。)
图6.26指出了需要观察的项目
小结
Linux的运行队列越长,Linux内核的进程间上下文切换的时间就越多。上写文切换是昂贵的。它需要CPU保存当前进程的状态,读入下一个进程的状态。也就是说,只要观察到了过度的上下文切换,很可能的原因就是主机上运行的任务太多了。有两个配置项mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum。它们的总和应当大约在主机的逻辑内核个数的120%左右。
有时候任务跟踪器会和CPU挂钩,并导致CPU利用率过高。这需要用top查看任务跟踪器是否是CPU绑定的,并考虑是否解绑。
还有如下工具可以参考:
- procinfo。查看是否有设备导致了过高的中断数量。
- sar。采集并将系统数据保存到文件。
- mpstat。给出基于单个CPU的统计数据,而不是所有CPU的。
技术41 内存交换
当内存使用量超过了物理内存上限,操作系统机会根据内存溢出机制使用磁盘作为。(我们一般叫这个虚拟内存。)这样就会产生内存交换。
磁盘的读写速度是远远小于内存的。内存交换也就会使节点的性能大为降低。
问题
需要是否由于内存交换导致作业运行缓慢。
方案
使用Linux工具vmstat来观察是否存在内存和磁盘间的交换。
讨论
图6.27介绍如何使用执行vmstat和它的执行选项。(图的对齐有问题,这个暂时没有修正。请谅解。)
图6.28标注了需要观察的项目。(图的对齐有问题,这个暂时没有修正。请谅解。)
小结
如果存在内存交换,就需要考虑增加这个节点上的内存或减少这个节点上的map和reduce任务的并发数了(mapred.tasktracker.map.tasks.maximum and mapred.tasktracker.reduce.tasks.maximum)。
技术42 磁盘健康
即便是不过载的集群也对磁盘和磁盘控制器有很大的压力。这一节中将介绍如何评估磁盘的健康程度。此外,还将介绍如何诊断由磁盘只读装载所带来的IO错误。
问题
需要确定磁盘是否在降级运行或只读状态。
方案
使用Linux工具iostat得到磁盘的请求队列和IO等待时间。使用Linux工具dmesg得到磁盘的只读状态。
讨论
在Linux工具中,iostat是非常复杂的一个。图6.29介绍了如何执行iostat和它的执行选项。(图的对齐有问题,这个暂时没有修正。请谅解。)
图6.30标注了iostat的输出中需要注意的项目。(图的对齐有问题,这个暂时没有修正。请谅解。)
另外一个需要观察的重要事项是:文件系统是否处于只读状态。这会由Linux的磁盘或RAID控制器的缺陷引发,并可能使节点出问题。在这种情况下任务追踪器和数据节点日志中会记录:无法向磁盘写入数据。另外,可以用dmesg检查/var/log/messages中的消息。查看其中是否标识:文件系统被转换成只读状态。命令如下。
$ dmesg | grep read-only
小结
磁盘过载导致的读写缓慢以及文件系统只读带来的IO错误都会导致节点变残(cripple)。
You can use hdparm to measure the sequential read rate of your hard disk. Replace
/dev/md1 with the name of your disk device (consult /etc/fstab for device names):
可以使用hdparm来测量硬盘的序列读取速率。使用下面的命令,需要将/dev/md1换成真实的磁盘设备。
$ cat /etc/fstab
...
/dev/md1 /usr ext3 defaults 1 2
... $ sudo /sbin/hdparm -t /dev/md1
/dev/md1:
Timing cached reads: 30656 MB in 1.99 seconds = 15405.72 MB/sec
Timing buffered disk reads: 108 MB in 3.03 seconds = 35.63 MB/sec
如果数据节点有IO等待问题,可以通过在各个节点上加装硬盘,并配置dfs.data.dir使用它们,来提高读写速率。
技术43 网络
由于MapReduce和HDFS对网络重度依赖,如数据传输等,如果网络问题,将会产生重大影响。这个技术将介绍如何正确配置节点,以及如何测试节点间的网络吞吐量。
问题
需要诊断是否是由于网络原因导致作业运行缓慢。
方案
使用Linux工具ethtool和sar的输出可以帮助诊断网络的配置问题。
讨论
首先检查以太网卡是否在正确的速度上以全双工运行。图6.31介绍了如何用ethtool获得相应信息。
Linux工具etchtool命令可以提供各项目的小计,如已传输的字节数等。
通过sar工具可以比较网卡性能指标之间的不同,如图6.32。
图6.33介绍sar的输出,并标记出其中指示了网络问题的指标。
使用iperf(http://openmaniak.com/iperf.php)可以测试主机间的网络带宽,如图6.34所示。
小结
这个技术中介绍了如何检查网卡的配置,如何使用工具获得网络性能指标,以及如何测量网卡和交换器之间的带宽。
[大牛翻译系列]Hadoop(12)MapReduce 性能调优:诊断硬件性能瓶颈的更多相关文章
- [大牛翻译系列]Hadoop(9)MapReduce 性能调优:理解性能瓶颈,诊断map性能瓶颈
6.2 诊断性能瓶颈 有的时候作业的执行时间会长得惊人.想靠猜也是很难猜对问题在哪.这一章中将介绍如何界定问题,找到根源.涉及的工具中有的是Hadoop自带的,有的是本书提供的. 系统监控和Hadoo ...
- [大牛翻译系列]Hadoop 翻译文章索引
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...
- 【Xamarin挖墙脚系列:应用的性能调优】
原文:[Xamarin挖墙脚系列:应用的性能调优] 官方提供的工具:网盘地址:http://pan.baidu.com/s/1pKgrsrp 官方下载地址:https://download.xamar ...
- [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...
- [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)
6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...
- 盘点linux系统中的12条性能调优命令。
导读 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长期处于耗尽的状 ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- [大牛翻译系列]Hadoop(11)MapReduce 性能调优:诊断一般性能瓶颈
6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因 ...
- MapReduce性能调优记录
MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默 ...
随机推荐
- CALayer实现点击屏幕放大或者缩小的一个圆
#import "ViewController.h" #define WIDTH 50 @interface ViewController () @end @implementat ...
- iOS- 自定义UIView (测试block和代理)
#import <UIKit/UIKit.h> typedef void(^compeletionHandler) (NSInteger selectButtonIndex); @clas ...
- Web Api2 用户认证模板解析---本地用户
本文我们将把关注Visual Studio用户认证模板中的 本地用户名/密码帐号特性.他们将其分为了两部分:帐户控制器具备如创建帐号和修改密码等功能:另一部分是在OAuth2认证服务器中进行的认证.我 ...
- 【Linux/Ubuntu学习 14】Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- unity中UI界面显示FPS
直接上代码 using UnityEngine; using System.Collections; public class HUDFPS : MonoBehaviour { ...
- Java Script基础(十二) 正则表达式
一.正则表达式中常用的符号 虽然可以使用string函数来完成验证,但是这种验证方式不够严谨,而且编写比较麻烦.而正则表达式是一种描述字符模式的对象,由一些特殊的符号组成,其组成的字母模式用来匹配各种 ...
- POJ 1797 Heavy Transportation (最短路)
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 22440 Accepted: ...
- hdu 4081 最小生成树+树形dp
思路:直接先求一下最小生成树,然后用树形dp来求最优值.也就是两遍dfs. #include<iostream> #include<algorithm> #include< ...
- Android Https相关完全解析 当OkHttp遇到Https
一.概述 其实这篇文章理论上不限于okhttp去访问自签名的网站,不过接上篇博文了,就叫这个了.首先要了解的事,okhttp默认情况下是支持https协议的网站的,比如https://www.baid ...
- Javascript中对象类型的参数传递
function setName(obj){ obj.name = 'Niccholas'; console.log(obj.name); //Niccholas obj = new Object() ...