Hadoop实践(四)---Hadoop性能优化

本文详细介绍了Hadoop性能优化的四个方面:硬件、操作系统、JVM及Hadoop参数。硬件优化涉及主从节点的资源配置;操作系统层面,建议避免使用swap分区,调整内存分配策略,增大文件描述符上限等;JVM优化通过调整FLAGS和GC提高效率;Hadoop参数优化包括文件块大小、副本数、心跳间隔等,以实现更高效的分布式计算。
摘要由CSDN通过智能技术生成

**Hadoop参数优化的3个原则:

(1)增大作业的并行程度,如增加Map任务的数量 (2)保证任务执行时有足够的资源
(3)满足前两个的情况下,尽可能为shuffle阶段提供资源

【以上适用于大部分分布式计算的框架】

1. Hadoop客户端的概念

Hadoop是主从架构,具体存储和计算由从节负责,主节点负责调度、元数据存储、资源管理。一般讲提交计算任务的工作放在主节点完成。实际上在集群中的任意一个节点都可以被用来提交任务。但是这样会增加运维难度,使得整个集群不“”“纯净”。

Hadoop客户端:独立于集群之外,不参与计算和存储,只是用来提交任务。

Hadoop客户端节点的部署:所有配置和集群中的任意节点完全相同,如此可以执行Hadoop的所有命令。但是在集群的配置文件slaves中没有配置Hadoop客户端的IP地址。所有在Hadoop客户端节点上不会启动集群的服务进程。
这个节点部署好之后,Hadoop客户端就接管了集群中所有与计算存储无关的任务,(例如HDFS中上传下载文件,提交计算任务等)。那么自然Hive和Sqoop等也应该安装在Hadoop客户端上。本质上如Hive之类的组件对于Hadoop来说都是一个客户端,通过提交任务来和集群进行交交互。一个规范的集群,用户应该通过Hadoop客户端来和Hadoop集群进行交互。

2. Hadoop性能优化

Hadoop性能优化需要全方位的考虑,其本身就不是一个独立的存在,它与Jvm、操作系统甚至硬件都有着紧密的联系。因此优化工作围绕四个部分展开。

2.1 硬件

Hadoop是主从模式,因此主节点需要比从节点好一些。主要从CPU、内存和磁盘三个部分分析。

- 2.1.1 主节点

主节点上运行着NameNode,在内存方面需要有特别的考虑。因为每当HDFS启动,NameNode会将元数据加载到内存中,所以HDFS能够存储的文件总数受到NameNode内存容量的限制。(一般secondaryNameNode和不安装在主节点上,它的硬件配置应该和NameNode一样,当主节点宕机,就需要它接替)。
作业运行的元数据信息也是保存在主节点上的,因此根据集群使用场景的不同来考虑主节点的内存大小。

- 2.1.2 从节点

从节点负责计算和存储,所以要保证CPU和内存能够满足计算任务。磁盘能够满足存储数据。一般一个任务占用一个虚拟CPU(虚拟CPU的计算公式:CPU数X单个CPU核心数X单个CPU超线程数)。一般一个任务需要1G的内存。
规划磁盘是主要考虑副本的冗余情况,一般副本数为3。总的文件平摊到每一个节点,还需要至少20%~30%的磁盘空间用于存储临时文件。

计算中的中间数据的存储和网络数据的传输也是需要考虑的。因此带宽和节点的本地磁盘根据具体的任务量进行规划。

【TIPS:对整个集群规模进行规划时,最常见的是根据存储空间来考虑集群大小,因为在得到存储能力的同时也得到了计算资源。】

2.2 操作系统

- 2.2.1 避免使用swap分区

swap分区是指在系统物理内存不够的时候,把磁盘中的一部分空间释放,以供当前运行的程序使用。(通过vm.swappiness参数进行控制,值域是0~100,值越高说明操作系统内核越积极地将应用程序的数据交换到磁盘)。将Hadoop守护进程的数据交换到磁盘是非常危险的,有可能导致操作超时,所以应该将它设置为0。

- 2.2.2 调整内存分配策略

操作系统内核根据vm.ovecommit_memory的值来决定分配策略,其值为0、1、2

0:内核检查是否有足够的内存供进程使用,如果够,允许申请,否则申请失败,并把错误返回给进程。

1:内核允许分配所以的内存,不论现在处于何种状态。

2:内核允许分配超过所以物理内存和交换空间总和的内存,(通过vm.overcommit_ratio的值来设置超过的比率,50表示超过物理内存50%)。

【TIPS:建议设置为2,并且调整vm.overcommit_ratio】

- 2.2.3 修改net.core.somaxconn参数

net.core.somaxconn是Linux的一个内核参数,表示套接字(socket)坚挺的backlog上限。backlog是套接字的监听队列,当一个请求尚未被处理或者建立时,会进入backlog。套接字服务器可以一次处理backlog中的所有请求,处理后的请求不在位于监听队列中。(当服务器处理请求较慢时,以至于监听队列会被填满,新来的请求会被拒绝)。

在core-default.xml文件中,参数ipc.server.listen.queue.size控制了服务器套接字监听队列的长度(即backlog的长度),默认值为128。Linux的参数net.core.somaxconn的默认值同样也是128。当服务器繁忙时这个值太小了,需要增大backlog。两个参数同时增大。

【TIPS:建议设置为32768】

- 2.2.4 增大同时打开文件描述符的上限

对于内核而言,所以打开的文件都通过文件描述符引用。(文件描述符是一个非负整数),当打开或新建一个文件的时候,内核像进程返回一个文件描述符。读写文件时,open(),create()函数都是返回文件描述符给read()或write()函数。Hadoop作业可以同时打开多个文件,所以需要增大同时打开文件描述符的上限。

- 2.2.5 选择合适的文件系统

Hadoop主要运行在Linux上,常见的文件系统有:ext3、ext4、xfs等。当文件系统被格式化之后,还需要进行一项优化操作:禁用文件的访问时间。

【TIPS:对于普通机器来书,文件访问时间可以让用户知道文件的近期查看和修改,但是对于HDFS没有意义,因为HDFS不支持修改,如果不禁用,在每次读取文件的时候还有伴随进行一次写操作,这些开销是浪费时间的,因此在挂在数据分区时,禁用文件的访问时间】

- 2.2.6 关闭THP(Transport Huge Pages)

Huge Pages就是大小我2MB~1GB的内存页,THP是一个使管理HugePages自动化的抽象层,在运行Hadoop时,THP会引起CPU占用率偏高。

2.3 JVM优化

主要调整JVM FLAGS和JVM GC,优化后效率提高4%。

2.4 Hadoop参数优化

不同版本Hadoop的参数名称可能不同。

- 2.4.1 hdfs-site.xml

<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>

【TIPS:Hadoop文件块大小通常设置为128MB(根据实际测试,128MB的性能表现优于64MB、256MB和384MB)】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值