HDFS性能优化心得
Posted 京东大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS性能优化心得相关的知识,希望对你有一定的参考价值。
随着Hadoop平台成为越来越多公司的数据存储和离线处理的平台,如何对Hadoop平台进行性能优化也成为一项重要的技能,那么我们应该如何Get这项技能呢?俗话说的好,工欲善其事必先利其器。下面我们看一下如何对HDFS进行性能优化。
要对HDFS文件进行性能优化,必备条件是对HDFS的构成和运行原理要有一定的了解。下面我们首先分析一下HDFS的架构。
我们通过HDFS的架构图可以看出影响HDFS文件系统性能的有:
——NameNode对RPC调用的响应时间和处理速度
——DataNode对RPC调用的响应时间和处理速度
——JournalNode 对RPC调用的响应时间和处理速度
通过上面分析,我们可以通过以下方式对HDFS性能
进行调优:
在操作系统方面,集群内和客户端的网络通讯情况和磁盘IO很重要,所以我们很有必要对操作系统的网络和磁盘IO进行调优。
例如用noatime挂载磁盘、把vm.swappiness设置为0 用来减少对swap区的使用、调整socket的监听队列的上net.core.somaxconn提升网络处理能力等等。
在HDFS方面,提升RPC的响应时间和处理速度显得尤其重要。
结合下面的NameNode的RPC调用图:
我们找出HDFS配置文件中看和RPC处理相关的参数有:
随着集群规模的不断扩大,NameNode 的Handler的需要调整,而根据我们的经验 handler的设置调整公式:python -c 'import math ; print int(math.log(N) * 20)' N为集群规模
为了进一步的提升NameNode的性能,我们查看一下NameNode处理RPC的源代码NameNodeRpcServer
从代码中我们可以看出如果我们采用默认配置的话,NameNodeRpcServer只会绑定一个端口处理NameNode和DataNode之间、NameNode和Client之间的通讯。
而如果我们如果设置了serviceRpcServer的配置,NameNodeRpcServer将会分离NameNode和DataNode之间、NameNode和Client之间的通讯端口。由于通讯端口的分离,相当于多了一个端口干活、Rpc的响应时间和处理速度都有相应的提升。
也许有人认为我们已经到了Rpc性能优化的尽头,但我们进一步分析一下NameNode Rpc的调用模式FIFO Call Queue环节还是可以进行优化的,Hadoop的JIRA社区已经有人进行FIFO Call Queue的改造,如果有兴趣的话,详情可看JIRA的issue
https://issues.apache.org/jira/browse/HADOOP-9640
通过上面的简短的性能优化过程,我们对性能优化有个比较理性的认识。如果我们要对一个平台或者一个程序进行优化、我们首先需要了解它的运行原理和构成,其次我们应该分析对它性能有影响的因素,然后我们通过不断的对其原理和构成的细化,分析出更多对程序性能有影响的因素,从而不断进行性能的优化。
http://www.cloudera.com/content/cloudera/zh-CN/documentation/core/v5-3-x/topics/cdh_admin_performance.html
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
以上是关于HDFS性能优化心得的主要内容,如果未能解决你的问题,请参考以下文章
eBay 大数据平台的 HDFS 性能优化实践
唯品会HDFS性能挑战和优化实践
hadoop进阶---hadoop性能优化---hdfs空间不足的管理优化
Vertx性能优化听会心得和QCon参会总结
Hive3 - 性能优化
Hive3 - 性能优化