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

news/2024/5/20 2:31:39 标签: hadoop, 大数据, hdfs

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 (功能描述:等待安全模式状态)


http://www.niftyadmin.cn/n/368165.html

相关文章

Unity之效应器

主要作用&#xff1a;在一个区域内让游戏对象受到力和扭矩力的作用 1、创建一个精灵&#xff08;绿色区域&#xff09; 2、为其添加碰撞器&#xff08;要将Used By Effector和is Trigger打钩&#xff09; 3、添加效应器组件 4、区域效应器参数 Use Collider Mask&#xff1a;…

Pyside6-第一篇-创建第一个窗口

Hi&#xff0c;今天起开始更新Pyside6教程了&#xff0c;从0-1开始更新&#xff0c;过程比较的久&#xff0c;一点点来。 今天&#xff0c;我们先来搭建环境。 我的环境&#xff1a; ❝ pycharm 2021.3.3(版本随意&#xff0c;只要不是很低就行)Python版本3.95Pyside版本6.50 ❞…

统计学_贾俊平——思考题第9章 分类数据分析

1&#xff0e;简述列联表的构造与列联表的分布。 答&#xff1a;列联表是将两个以上的变量进行交叉分类的频数分布表。 列联表的分布可以从两个方面看&#xff0c;一个是观察值的分布&#xff0c;又称为条件分布&#xff0c;每个具体的观察值就是条件频数&#xff1b;一个是期望…

如何在华为OD机试中获得满分?Java实现【输入n个整数,输出其中最小的k个】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

NCI架构-1

1、NFCC和DH通过物理连线相连&#xff0c;物理连线对应为Transport Layer&#xff08;传输层&#xff09;&#xff0c;支持SPI、I2C、UART、USB等&#xff1b; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment)&#xff0c;图左的NFCEE模块可运行一些…

学习WiFi,怎么入手?

欢迎大家一起学习探讨通信之WLAN。在工作和平时与朋友交流中&#xff0c;时不时有人问到&#xff0c;“想学WiFi&#xff0c;不知道如何入手&#xff1f;”&#xff0c;“搞了一两年WiFi&#xff0c;但感觉还是一头雾水&#xff0c;啥都没掌握&#xff0c;怎么办&#xff1f;”…

tomcat what

tomcat是什么 对于tomcat是什么有什么作用。曾经看到一个大神是这样解释tomcat的&#xff0c;现在分享给大家 内容大体是&#xff1a; 我家有一台机器&#xff0c;可以把石头变成金子。你快递给我一箱石头&#xff0c;让我把它们变成一箱金子再快递给你。 这个机器就是web项…

【Servlet】

目录 &#x1f382;1. 第一个 Servlet 程序&#xff1a;使用 Servlet 写 hello world &#x1f95e;1.1 创建项目 &#x1f373;1.2 引入依赖 &#x1f383;1.3 创建目录 &#x1f358;1.4 开始写代码 &#x1f30d;1.5 打包代码 &#x1f364;1.6 部署 &#x1f451;1…