您现在的位置是:首页 >学无止境 >Hadoop---10、生产调优手册网站首页学无止境
Hadoop---10、生产调优手册
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=10241024=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 (功能描述:等待安全模式状态)