HDFS性能优化心得【转载】

随着Hadoop平台成为越来越多公司的数据存储和离线处理的平台,如何对Hadoop平台进行性能优化也成为一项重要的技能,那么我们应该如何Get这项技能呢?俗话说的好,工欲善其事必先利其器。下面我们看一下如何对HDFS进行性能优化。

1.了解HDFS的构成和运行原理

要对HDFS文件进行性能优化,必备条件是对HDFS的构成和运行原理要有一定的了解。下面我们首先分析一下HDFS的架构。

HDFS架构图如下所示:

我们通过HDFS的架构图可以看出影响HDFS文件系统性能的有:

1)操作系统方面

——集群内的网络通讯情况

——集群客户端和集群之间的网络通讯情况

——集群各个节点的磁盘读写速度

2)Hadoop软件方面

——NameNode对RPC调用的响应时间和处理速度

——DataNode对RPC调用的响应时间和处理速度

——JournalNode 对RPC调用的响应时间和处理速度

2.HDFS性能调优

通过上面分析,我们可以通过以下方式对HDFS性能进行调优:

1)从操作系统层面

在操作系统方面,集群内和客户端的网络通讯情况和磁盘IO很重要,所以我们很有必要对操作系统的网络和磁盘IO进行调优。

例如用noatime挂载磁盘、把vm.swappiness设置为0 用来减少对swap区的使用、调整socket的监听队列的上net.core.somaxconn提升网络处理能力等等。

2)从Hadoop软件层面

在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

3. 总结

通过上面的简短的性能优化过程,我们对性能优化有个比较理性的认识。如果我们要对一个平台或者一个程序进行优化、我们首先需要了解它的运行原理和构成,其次我们应该分析对它性能有影响的因素,然后我们通过不断的对其原理和构成的细化,分析出更多对程序性能有影响的因素,从而不断进行性能的优化。

参考文献

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值