大数据内容分享(十):Hadoop 性能优化与运维

目录

Hadoop 客户端的概念

Hadoop 性能调优

hdfs调优

yarn调优

mapreduce调优

Hbase 调优

Hive 调优

Hadoop运维


Hadoop 客户端的概念

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

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

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

Hadoop 性能调优

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

硬件

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

主节点

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

从节点

从节点负责计算和存储,所以要保证CPU和内存能够满足计算任务。磁盘能够满足存储数据。一般一个任务占用一个虚拟CPU(虚拟CPU的计算公式:CPU数X单个CPU核心数X单个CPU超线程数)。一般一个任务需要1G的内存。

规划磁盘是主要考虑副本的冗余情况,一般副本数为3。总的文件平摊到每一个节点,还需要至少20%~30%的磁盘空间用于存储临时文件。

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

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

操作系统

避免使用swap分区

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

调整内存分配策略

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

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

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

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

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

修改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

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

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

选择合适的文件系统

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

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

关闭THP(Transport Huge Pages)

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

JVM优化

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

Hadoop参数优化

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

hdfs-site.xml

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

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

<property>
<name>dfs.namenode.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值