Hadoop---10、生产调优手册

文章详细介绍了HDFS的NameNode内存配置,包括计算公式和推荐配置,强调了NameNode和DataNode的心跳并发处理参数调整。此外,讨论了开启回收站功能以防止误删除,以及多目录配置提高可靠性。还涉及了HDFS集群的扩容、缩容方法,如添加和退役DataNode,以及纠删码和异构存储的优化策略,旨在提升存储效率。最后,提到了NameNode故障处理和集群安全模式的管理。
摘要由CSDN通过智能技术生成

1、HDFS—核心参数

1.1 NameNode 内存生产配置

1、NameNode内存计算
每个文件块大概占用150byte,一台服务器128G内存为例,能储存多少文件块呢?
12810241024*1024/150Byte ≈ 9.1 亿
G M KB Byte
2、Hadoop2.x系列,配置 NameNode 内存
NameNode 内存默认 2000m,如果服务器内存 4G,NameNode 内存可以配置 3g。在hadoop-env.sh 文件中配置如下。

HADOOP_NAMENODE_OPTS=-Xmx3072m

3、Hadoop3.x 系列,配置 NameNode 内存
(1)hadoop-env.sh 中描述 Hadoop 的内存是动态分配的

# The maximum amount of heap to use (Java -Xmx). If no unit
# is provided, it will be converted to MB. Daemons will
# prefer any Xmx setting in their respective _OPT variable.
# There is no default; the JVM will autoscale based upon machine
# memory size.
# export HADOOP_HEAPSIZE_MAX=
# The minimum amount of heap to use (Java -Xms). If no unit
# is provided, it will be converted to MB. Daemons will
# prefer any Xms setting in their respective _OPT variable.
# There is no default; the JVM will autoscale based upon machine
# memory size.
# export HADOOP_HEAPSIZE_MIN=
HADOOP_NAMENODE_OPTS=-Xmx102400m

(2)查看NameNode占用内存
提示:要先启动(查看NameNode的进程号)jps
在这里插入图片描述

 jmap -heap 2611

在这里插入图片描述
(3)查看DataNode占用内存
在这里插入图片描述
注意:查看发现 hadoop102 上的 NameNode 和 DataNode 占用内存都是自动分配的,且相等。不是很合理。

合理分配:
NameNode最小值是1G,每增加1000000个block,增加1G内存。
一个DataNode上额副本总数低于4000000,调为4G,超过4000000,每增加1000000,增加1G。

具体修改:hadoop-env.sh

export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -
Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS
-Xmx1024m"
1.2 NameNode 心跳并发装置

在这里插入图片描述
1、hdfs-site.xml

The number of Namenode RPC server threads that listen to requests 
from clients. If dfs.namenode.servicerpc-address is not 
configured then Namenode RPC server threads listen to requests 
from all nodes.
NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发
的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是 10<property>
 <name>dfs.namenode.handler.count</name>
 <value>21</value>
</property

企业经验:dfs.namenode.handler.count=20 × 𝑙𝑜𝑔𝑒
𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒,比如集群规模(DataNode 台
数)为 3 台时,此参数设置为 21。

1.3 开启回收站配置

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

1、回收站机制
在这里插入图片描述
2、开启回收站功能参数说明
(1)默认值 fs.trash.interval = 0,0 表示禁用回收站;其他值表示设置文件的存活时间。
(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>

4、查看回收站
回收站目录在 HDFS 集群中的路径:/user/atguigu/.Trash/….
5、注意:通过网页直接删除的文件也不会走回收站
6、通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站。

Trash trash = New Trash(conf);
trash.moveToTrash(path);

7、只有在命令行利用 hadoop fs -rm 命令删除的文件才会走回收站。
8、恢复回收站数据(利用hadoop fs -mv)

2、HDFS—多目录

2.1 NameNode 多目录配置

1、NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。
在这里插入图片描述
2、具体配置如下:
1、在 hdfs-site.xml 文件中添加如下内容

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

注意:因为每台服务器节点的磁盘情况不一样,所以这个配置配完之后,可以选择不分发。
2、停止集群,删除三台节点的 data 和 logs 中所有数据。
3、格式化集群并启动。

2.2 DataNode多目录配置

1、DataNode 可以配置成多个目录,每个目录存储的数据不一样(数据不是副本)
在这里插入图片描述
2、具体配置如下:
在 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>
2.3 集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x 新特性)
在这里插入图片描述
1、生产均衡计划(一个磁盘,不会生成计划)

hdfs diskbalancer -plan hadoop103

2、执行均衡计划

hdfs diskbalancer -execute hadoop103.plan.json

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

hdfs diskbalancer -query hadoop103

4、取消均衡任务

hdfs diskbalancer -cancel hadoop103.plan.json

3、HDFS—集群扩容及缩容

3.1 添加白名单

白名单:表示在白名单的主机IP地址可以用来储存数据。
在这里插入图片描述
配置白名单步骤如下:
1、在 NameNode 节点的/opt/module/hadoop3.1.3/etc/hadoop 目录下分别创建whitelist 和blacklist 文件。
(1)创建白名单

vim whitelist

在 whitelist 中添加如下主机名称,假如集群正常工作的节点为 102 103。
在这里插入图片描述
(2)创建黑名单

 touch blacklist

保持空就行

2、在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

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

3、分发配置文件whitelist,hdfs-site.xml
4、第一次添加白名单必须重启集群,不是第一次,只需要刷新NameNode节点即可。
5、在 web 浏览器上查看 DN,http://hadoop102:9870/dfshealth.html#tab-datanode

3.2 服役新服务器

1、随着公司业务的增长,数据量越来越大,原有的数据节点的容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的数据节点。
2、环境准备
(1)在 hadoop100 主机上再克隆一台 hadoop105 主机
(2)修改 IP 地址和主机名称
(3)拷贝 hadoop102 的/opt/module 目录和/etc/profile.d/my_env.sh 到 hadoop105
(4)删除 hadoop105 上 Hadoop 的历史数据,data 和 log 数据
(5)配置 hadoop102 和 hadoop103 到 hadoop105 的 ssh 无密登录

3、服役新节点的具体步骤
(1)直接启动 DataNode,即可关联到集群

 hdfs --daemon start datanode
 yarn --daemon start nodemanager

4、在白名单中增加新服役的服务器
(1)在白名单 whitelist 中增加 hadoop104、hadoop105,并重启集群
(2)分发白名单whitelist
(3)刷新NameNode

hdfs dfsadmin -refreshNodes

5、在 hadoop105 上上传文件

3.3 黑名单退役服务器

黑名单:表示在黑名单的主机 IP 地址不可以用来存储数据。
1、编辑/opt/module/hadoop-3.1.3/etc/hadoop 目录下的 blacklist 文件。添加如下主机名称(要退役的节点)
注意:如果白名单中没有配置,需要在 hdfs-site.xml 配置文件中增加 dfs.hosts 配置参数

<!-- 黑名单 -->
<property>
 <name>dfs.hosts.exclude</name>
 <value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value>
</property>

2、分发配置文件 blacklist,hdfs-site.xml
3、第一次添加黑名单必须重启集群,不是第一次,只需要刷新 NameNode 节点即可。

 hdfs dfsadmin -refreshNodes

4、检查 Web 浏览器,退役节点的状态为 decommission in progress(退役中),说明数据节点正在复制块到其他节点。
5、等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是 3,服役的节点小于等于 3,是不能退役成功的,需要修改副本数后才能退役。
6、如果数据不均衡,可以用命令实现集群的再平衡。

4、HDFS—存储优化

注:演示纠删码和异构存储需要一共 5 台虚拟机。尽量拿另外一套集群。提前准备 5 台服务器的集群。

4.1 纠删码
4.1.1 纠删原理

HDFS 默认情况下,一个文件有 3 个副本,这样提高了数据的可靠性,但也带来了 2 倍的冗余开销。Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约 50%左右的存储空间。
在这里插入图片描述
1、纠删码操作相关的命令

Usage: bin/hdfs ec [COMMAND]
 [-listPolicies]
 [-addPolicies -policyFile <file>]
 [-getPolicy -path <path>]
 [-removePolicy -policy <policy>]
 [-setPolicy -path <path> [-policy <policy>] [-replicate]]
 [-unsetPolicy -path <path>]
 [-listCodecs]
 [-enablePolicy -policy <policy>]
 [-disablePolicy -policy <policy>]
 [-help <command-name>].

2、查看当前支持的纠删码策略

Erasure Coding Policies:
ErasureCodingPolicy=[Name=RS-10-4-1024k, Schema=[ECSchema=[Codec=rs, 
numDataUnits=10, numParityUnits=4]], CellSize=1048576, Id=5], 
State=DISABLED
ErasureCodingPolicy=[Name=RS-3-2-1024k, Schema=[ECSchema=[Codec=rs, 
numDataUnits=3, numParityUnits=2]], CellSize=1048576, Id=2], 
State=DISABLED
ErasureCodingPolicy=[Name=RS-6-3-1024k, Schema=[ECSchema=[Codec=rs, 
numDataUnits=6, numParityUnits=3]], CellSize=1048576, Id=1], 
State=ENABLED
ErasureCodingPolicy=[Name=RS-LEGACY-6-3-1024k, 
Schema=[ECSchema=[Codec=rs-legacy, numDataUnits=6, numParityUnits=3]], 
CellSize=1048576, Id=3], State=DISABLED
ErasureCodingPolicy=[Name=XOR-2-1-1024k, Schema=[ECSchema=[Codec=xor, 
numDataUnits=2, numParityUnits=1]], CellSize=1048576, Id=4], 
State=DISABLED

3、纠删码策略解释
RS-3-2-1024k:使用 RS 编码,每 3 个数据单元,生成 2 个校验单元,共 5 个单元,也就是说:这 5 个单元中,只要有任意的 3 个单元存在(不管是数据单元还是校验单元,只要
总数=3),就可以得到原始数据。每个单元的大小是1024k=10241024=1048576。
在这里插入图片描述
RS-10-4-1024k:使用 RS 编码,每 10 个数据单元(cell),生成 4 个校验单元,共 14个单元,也就是说:这 14 个单元中,只要有任意的 10 个单元存在(不管是数据单元还是校
验单元,只要总数=10),就可以得到原始数据。每个单元的大小是 1024k=1024
1024=1048576。

RS-6-3-1024k:使用 RS 编码,每 6 个数据单元,生成 3 个校验单元,共 9 个单元,也就是说:这 9 个单元中,只要有任意的 6 个单元存在(不管是数据单元还是校验单元,只要
总数=6),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

RS-LEGACY-6-3-1024k:策略和上面的 RS-6-3-1024k 一样,只是编码的算法用的是 rslegacy。

XOR-2-1-1024k:使用 XOR 编码(速度比 RS 编码快),每 2 个数据单元,生成 1 个校验单元,共 3 个单元,也就是说:这 3 个单元中,只要有任意的 2 个单元存在(不管是数据单元还是校验单元,只要总数= 2),就可以得到原始数据。每个单元的大小是1024k=1024*1024=1048576。

4.1.2 纠删码案例实操

在这里插入图片描述
纠删码策略是给具体一个路径设置。所有往此路径下储存的文件,都会执行此策略。默认只开启对RS-6-3-1024k 策略的支持,如要使用别的策略需要提前启用。

1、需求:将/input 目录设置为 RS-3-2-1024k 策略
2、具体步骤
(1)开启对 RS-3-2-1024k 策略的支持

hdfs ec -enablePolicy -policy RS-3-2-1024k

(2)在 HDFS 创建目录,并设置 RS-3-2-1024k 策略

hdfs ec -setPolicy -path /input -policy RS-3-2-1024k

(3)上传文件,并查看文件编码后的存储情况

 hdfs dfs -put web.log /input

注:你所上传的文件需要大于 2M 才能看出效果。(低于 2M,只有一个数据单元和两个校验单元)

4.2 异构存储(冷热数据分离)

异构存储主要解决不同的数据储存在不同类型的硬盘中,达到最佳性能的问题。
1、关于储存类型
RAM_DISK:(内存镜像文件系统)
SSD:(固态硬盘)
DISK:(普通磁盘,在HDFS中,如果没有主动声明数据目录储存类型默认都是DISK)
ARCHIVE:(没有特指哪种存储介质,主要的指的是计算能力比较弱而存储密度比较高的存储介质,用来解决数据量的
容量扩增的问题,一般用于归档)
2、关于储存策略
在这里插入图片描述

5、HDFS—故障排除

5.1 NameNode故障处理

1、NameNode 进程挂了并且存储的数据也丢失了,如何恢复 NameNode。
2、故障模拟
(1)kill -9 NameNode进程
(2)删除NameNode储存的数据(/opt/module/hadoop-3.1.3/data/tmp/dfs/name)
3、问题解决
(1)拷贝 SecondaryNameNode 中数据到原 NameNode 存储数据目录
(2)重新启动 NameNode

5.2 集群安全模式和磁盘修复

1、安全模式:文件系统之接受读数据请求,而不接受删除、修改等变更请求
2、进入安全模式场景
(1)NameNode在加载镜像文件和编辑日志期间处于安全模式;
(2)NameNode在接受DataNode注册时,处于安全模式
在这里插入图片描述
3、退出安全模式
dfs.namenode.safemode.min.datanodes:最小可用 datanode 数量,默认 0
dfs.namenode.safemode.threshold-pct:副本数达到最小要求的 block 占系统总 block 数的
百分比,默认 0.999f。(只允许丢一个块)
dfs.namenode.safemode.extension:稳定时间,默认值 30000 毫秒,即 30 秒

4、基本语法
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成之后,自动退出安全模式。
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave(功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星光下的赶路人star

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

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

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

打赏作者

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

抵扣说明:

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

余额充值