5K字带你看懂Hadoop生态下的生产调优方式(一)

注:本系列主要对Hadoop生态下的组件,如HDFS、MR、Yarn等在生产条件下的调优做了总结与论述,如有错误欢迎读者提出并补充

本系列将持续更新,希望大家一键三连支持!!!♥♥♥

本系列将持续更新,希望大家一键三连支持!!!♥♥♥

本系列将持续更新,希望大家一键三连支持!!!♥♥♥

一. HDFS—核心参数

1.1 NameNode 内存生产配置

1.1.1 NameNode内存计算

每个文件块大概占用150byte,一台服务器 128G 内存为例,能存储多少文件块呢?

答:128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿

1.1.2 Hadoop2.x系列配置NameNode内存

NameNode 内存默认2000M,如果服务器内存 4G,NameNode 内存可以配置 3G。在hadoop-env.sh文件中配置如下。

HADOOP_NAMENODE_OPTS=-Xmx3072m

1.1.3 Hadoop3.x系列配置NameNode内存

(1) hadoop-env.sh中描述Hadoop的内存是如何动态分配的

3.x系列开始,内存开始动态分配,在hadoop-env.sh配置文件中,可以找到分配的相关描述:

请添加图片描述

(2)查看NameNode占用内存

请添加图片描述

(3) 查看DataNode占用内存
请添加图片描述

注:jmap -heap 进程号 得到的是相应进程占用内存信息,通过jps查看NNDN进程号即可获取相应内存信息.

查看发现hadoop102上的NN和DN占用内存都是自动分配的,不够合理,生产环境中通常如下调整:

请添加图片描述

具体通过修改hadoop-env.sh配置文件中的参数:

请添加图片描述

上述调整把hadoop102上的NN和DN节点的最大占用内存均调整为了1GB,此时再次查看内存信息:

请添加图片描述

同样DN被分配的最大内存也变成了1024MB=1GB


1.2 NameNode 心跳并发配置

请添加图片描述

作为Hadoop Cluster中的NN,它的主要任务主要有:

(1)处理来自Client的请求并响应
(2)存储hdfs文件的元数据信息
(3)与DN保持心跳,了解DN节点的存活状态,保证数据传输的可靠性

生产环境中同一时刻可能有来自多个DN的心跳和client请求,因此并发线程的数量是极为重要的。

查看hdfs-site.xml文件:

NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是 10。
<property>
 <name>dfs.namenode.handler.count</name>
 <value>21</value>
</property>

企业经验:dfs.namenode.handler.count=20 × 𝑙𝑜𝑔𝑒(𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒),比如集群规模(DataNode 台
数)为3台时,此参数设置为21。可通过简单的 python 代码计算该值,代码如下。

请添加图片描述


1.3 开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。

(1) 回收站工作机制
请添加图片描述

2)开启回收站功能参数说明

(1)默认值fs.trash.interval = 00 表示禁用回收站其他值表示设置文件的存活时间

(2)默认值 fs.trash.checkpoint.interval = 0检查回收站的间隔时间。如果该值为 0,则该值设置fs.trash.interval参数值相等

(3)要求 fs.trash.checkpoint.interval <= fs.trash.interval

3)启用回收站

修改core-site.xml,配置垃圾回收时间1分钟.

<property>
 <name>fs.trash.interval</name>
 <value>1</value>
</property>

注:以下两种情况删除的文件不会进入回收站:
(1)通过网页上直接删除的文件
(2)通过程序删除的文件不会经过回收站,需要调用 moveToTrash()才进入回收站:
Trash trash = New Trash(conf); trash.moveToTrash(path);

4)只有在命令行利用 hadoop fs -rm 命令删除的文件才会走回收站。

请添加图片描述

查看HDFS web端数据:

请添加图片描述

发现原本在根目录下的fusir.txt已被转移到回收站/user/root/.Trash/Current/目录下。

5)恢复回收站数据

请添加图片描述

这里由于我们设置的回收站自动回收时间只有1分钟,所以还没来得及通过mv指令恢复就已经被回收了,如果设置的自动回收时间长一些,就能通过该命令进行恢复.

二. HDFS—集群压测

企业中非常关心每天从 Java 后台拉取过来的数据,需要多久能上传到集群?消费者关心多久能从 HDFS 上拉取需要的数据?

为搞清楚 HDFS 的读写性能,生产环境上非常需要对集群进行压测

请添加图片描述

HDFS 的读写性能主要受网络和磁盘影响比较大。为了方便测试,将 hadoop102、hadoop103、hadoop104 虚拟机网络都设置为 100Mbps

请添加图片描述

100Mbps 单位是 bit;10M/s 单位是 byte ; 1byte=8bit,100Mbps/8=12.5M/s。

测试网速:来到 hadoop102 的/opt/module 目录,开启一个端口使得外部能访问下载该目录下的文件:

请添加图片描述

通过外部网页访问hadoop102:8000页面下载指定文件:
请添加图片描述

改变带宽为不受限

请添加图片描述

再次查看网络下载速度:

请添加图片描述


2.1 测试HDFS写性能

(1)写测试底层原理

请添加图片描述

(2) 测试内容:向 HDFS 集群写 10 个 128M 的文件

请添加图片描述
请添加图片描述

注意:nrFiles n 为生成 mapTask的数量,生产环境一般可通过 hadoop103:8088 查看 CPU核数,设置为(CPU 核数 - 1)

Number of files:生成 mapTask 数量,一般是集群中==(CPU 核数-1==),我们测试虚拟机就按照实际的物理内存-1 分配即可

Total MBytes processed:单个 map 处理的文件大小

Throughput mb/sec:单个 mapTak 的吞吐量

计算方式:处理的总文件大小/每一个 mapTask 写数据的时间累加
集群整体吞吐量:生成 mapTask 数量*单个 mapTak 的吞吐量

Average IO rate mb/sec::平均 mapTak 的吞吐量

计算方式:每个 mapTask 处理文件大小/每一个 mapTask 写数据的时间全部相加除以 task 数量

IO rate std deviation:方差、反映各个 mapTask 处理的差值,越小越均衡

如果测试过程中,出现异常:(由于虚拟内存不够导致)

1)可以在 yarn-site.xml 中设置虚拟内存检测为 false,然后分发该配置文件并重启 Yarn 集群==

<property>  
 <name>yarn.nodemanager.vmem-check-enabled</name> 
 <value>false</value> 
</property> 

(3)测试结果分析

由于副本 1 就在本地,所以该副本不参与测试请添加图片描述

一共参与测试的文件:10 个文件 * 2 个副本 = 20 个
压测后的速度:1.52
实测速度:1.61M/s * 20 个文件 ≈ 30M/s
三台服务器的带宽:12.5 + 12.5 + 12.5 ≈ 30m/s
所有网络资源都已经用满。

如果实测速度远远小于网络,并且实测速度不能满足工作需求,可以考虑采用固态硬盘或者增加磁盘个数

如果客户端不在集群节点,那就三个副本都参与计算:
请添加图片描述


2.2 测试HDFS读性能

1)测试内容:读取 HDFS 集群 10 个 128M 的文件

请添加图片描述
请添加图片描述

2)删除测试生成数据

请添加图片描述

3)测试结果分析:为什么读取文件速度大于网络带宽?由于目前只有三台服务器,且有三个副本,数据读取就近原则,相当于都是读取的本地磁盘数据,没有走网络。

请添加图片描述

总结:HDFS读写性能主要受网络与磁盘影响很大,根据情况不同,如果是网络原因适当调整网络带宽,如果是磁盘原因则选用读写速度更快的硬盘

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

丷江南南

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

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

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

打赏作者

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

抵扣说明:

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

余额充值