hadoop之调优简介

本文详细介绍了HadoopHDFS的调优方法,包括NameNode内存配置、心跳并发配置、回收站功能、多目录配置、集群扩容缩容、存储优化(纠删码和异构存储)、故障排除(NameNode故障处理、集群安全模式、慢磁盘监控、小文件归档)以及MapReduce生产经验。此外,还涉及到了HDFS集群迁移和常用核心参数的调优策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HDFS核心参数

HDFS一般由NameNode(NN)、DataNode(DN)、SecondaryNameNode(2NN)等组成,NameNode是HDFS的核心管理者,DataNode是HDFS每个节点的管理者。

1、NameNode内存配置

通过以下命令可以查看NameNode的占用内存

jmap -heap 进程号

通过以下命令可以查看节点运行的进程:

$ jps
3088 NodeManager
2611 NameNode
3271 JobHistoryServer
2744 DataNode
3579 Jps
# 查看NameNode占用内存
jmap -heap 2611
# 查看DataNode占用内存
jmap -head 2744

NameNode的默认内存是2000M,在hadoop-env.sh文件中配置如下:

HADOOP_NAMENODE_OPTS=-Xmx3072m

如果想将其修改为1G,则可以通过以下文件,添加内容如下:
etc/hadoop/hadoop-env.sh

export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"

按照一般的经验值:
NameNode最小值为1G,且每增加百万个Block,增加1G内存;
DataNode最小值为4G,副本数低于四百万时为4G,超过4百分每增加100万个副本,增加1G内存。

2、NameNode心跳并发配置

NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。默认值在 hdfs-site.xml 中配置为10.

<property>
    <name>dfs.namenode.handler.count</name>
    <value>10</value>
</property>

一般的经验是根据DataNode的台数来配置,配置公式为:
dfs.namenode.handler.count = 20 x loge为底台数的对数
比如DataNode的台数为3,则为 201.0986 = 21线程;DataNode的台数为200,则为205.298 = 106线程。

3、开启回收站配置

回收功能配置:
我们默认在HDFS删除文件时,是不可以恢复的,但可以开启HDFS的回收站功能,在删除文件不超时的情况下,可以恢复数据,起到防止误删的效果。
回收站的配置在 core-site.xml 中配置,fs.trash.interval 的默认值是0,表示不开启回收功能,如果为其他数字,表示垃圾回收的保存时间,单位是分钟,下面是垃圾回收保存1分钟:

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

参数值 fs.trash.checkpoint.interval 表示检查回收站的间隔时间,如果该值为0,则该值设置和fs.trash.interval 的参数值相等。要求是 fs.trash.checkpoint.interval <= fs.trash.interval 。

回收功能路径:
回收站目录在HDFS集群中的路径:/user/mrlin/.Trash/….

回收功能注意事项:
通过Web端删除的文件,不会进入回收站;
通过程序端,需要调用 moveToTrash() 接口才会进入回收站;
只有通过命令行利用hadoop fs -rm命令删除的文件才会走回收站。

恢复回收站数据:
hadoop fs -mv /user/mrlin/.Trash/Current/user/mrlin/input /user/mrlin/input
需要手动将会在站里面的文件移动或者复制出来HDFS的政策目录。

二、HDFS集群压测

一个集群搭建完成后,不能立刻投入使用,必须对集群做一定的压测,了解集群大概能承受多大的访问量和集群的大概性能。HDFS的读写性能主要受磁盘和网络的影响,测试可以使用hadoop自带的测试程序。

测试网络性能:

# 可以在 /opt/module/sortware 中测试:
python -m SimpleHTTPServer

测试集群写性能:

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 128MB

其中 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处理的差值,越小越均衡

由于副本在hadoop102本地,因此不参与测试,上面每个服务器写10个文件,共2个服务器,压测速度大概是Throughput mb/sec:1.61,因此实际为1021.61 = 32M/s 左右,而服务器的带宽为 30M/s,表示所有的网络资源都已经用满,因为瓶颈就在网络或者磁盘的最小值。
如果实测速度远远小于网络,并且实测速度不能满足工作需求,可以考虑采用固态硬盘或者增加磁盘个数。

测试集群的读性能:

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -read -nrFiles 10 -fileSize 128MB

读取的结果为:Throughput mb/sec: 200.28
这里读取的结果远大于写入的结果,是因为每个数据都是存3个副本,且只有3台服务器,所以所有的数据都是本地读取的,也就是没有用到网络,瓶颈就是网络磁盘的读取速度。

删除测试生成数据:

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.3-tests.jar TestDFSIO -clean

三、HDFS多目录

1、NameNode多目录配置

NameNode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了系统的可靠性。
在 hdfs-site.xml 文件中添加如下内容:

<property>
     <name>dfs.namenode.name.dir</name>
     <value>file://${hadoop.tmp.dir}/dfs/name1,file://${hadoop.tmp.dir}/dfs/name2</value>
</property>

配置 NameNode 必须重新初始化集群,或者在集群创建开始就要设置多目录的配置,重新初始化集群的话,必须先删除所有节点的 data 和 logs 中所有数据。

rm -rf data/ logs/
rm -rf data/ logs/
rm -rf data/ logs/
bin/hdfs namenode -format
sbin/start-dfs.sh

2、DataNode多目录配置

不同于 NameNode 的多目录,DataNode 设置多目录是每个目录存储的数据是不一样的,它是防止单块硬盘的空间不够用,给 NameNode 配多一个目录。
具体配置在 hdfs-site.xml 文件中添加如下内容:

<property>
     <name>dfs.datanode.data.dir</name>
     <value>file://${hadoop.tmp.dir}/dfs/data1,file://${hadoop.tmp.dir}/dfs/data2</value>
</property>

3、集群数据均衡之磁盘间数据均衡

当集群新增磁盘时,可以使用磁盘均衡命令,将各个磁盘的负载均衡配置。
(1)生成均衡计划

hdfs diskbalancer -plan hadoop103

(2)执行均衡计划

hdfs diskbalancer -execute hadoop103.plan.json

(3)查看当前均衡任务的执行情况

hdfs diskbalancer -query hadoop103

(4)取消均衡计划任务

hdfs diskbalancer -cancel hadoop103.plan.json

四、HDFS集群扩容及缩容

1、配置白名单

白名单:表示在白名单的主机IP地址可以用来存储数据。
黑名单:表示在黑名单的主机IP地址不可以用来存储数据,常用来缩容服务器的数量。
(1)在NameNode节点的/opt/module/hadoop-3.1.3/etc/hadoop目录下分别创建whitelist 和blacklist文件
创建白名单:并写入白名单服务器

vim whiltelist
# 并写入以下内容:
hadoop102
hadoop103
touch blacklist

(2)在 hdfs-site.xml 里面增加白名单和黑名单的文件路径

<!-- 白名单 -->
<property>
	 <name>dfs.hosts</name>
	 <value>/opt/module/hadoop-3.1.3/etc/hadoop/whitelist</value>
</property>

<!-- 黑名单 -->
<property>
	 <name>dfs.hosts.exclude</name>
	 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值