文章目录

  • 1 HFDS核心参数
  • 1.1 NameNode 内存生产配置
  • 问题描述
  • hadoop-env.sh中配置
  • 1.2 NameNode 心跳并发配置
  • 修改hdfs-site.xml配置
  • 1.3 开启回收站配置
  • 回收站机制
  • 开启回收站功能参数说明
  • 启动回收站-修改core-site.xml
  • 查看回收站
  • 恢复回收站数据


1 HFDS核心参数

搭建HFDS集群时必须要参考的参数

1.1 NameNode 内存生产配置

问题描述

1) NameNode 内存计算

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

2) Hadoop3.x 系列,配置 NameNode 内存

/opt/module/hadoop-3.1.3/etc/hadoop路径下的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=

查看 NameNode 占用内存

[ranan@hadoop102 hadoop]$ jpsall
=============== hadoop102 ===============
15473 JobHistoryServer
15268 NodeManager
14933 DataNode
15560 Jps
14749 NameNode
=============== hadoop103 ===============
13969 Jps
13218 DataNode
13717 NodeManager
13479 ResourceManager
=============== hadoop104 ===============
13012 Jps
12869 NodeManager
12572 DataNode
12750 SecondaryNameNode

[ranan@hadoop102 hadoop]$ jmap -heap 14749
Heap Configuration:
MaxHeapSize  = 1023410176 (976.0MB)

设置hdfs目录默认权限_Hadoop

查看 DataNode 占用内存

[ranan@hadoop102 hadoop]$ jmap -heap 14749
MaxHeapSize  = 1023410176 (976.0MB)

设置hdfs目录默认权限_大数据_02

查看发现 hadoop102 上的 NameNode 和 DataNode 占用内存都是自动分配的,且相等。如果两者同时达到上限(系统也就是976M),明明内存不足了还显示有,就会抢占linux系统内存,不合理。所以需要手动配置。

hadoop-env.sh中配置

经验:

设置hdfs目录默认权限_hadoop_03

具体修改: hadoop-env.sh

[ranan@hadoop102 hadoop]$ vim hadoop-env.sh
[ranan@hadoop102 hadoop]$ vim hadoop-env.sh

//不修改默认配置信息,选择拼接。 - Xmx1024m进行拼接
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m" 
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"

[ranan@hadoop102 hadoop]$ xsync hadoop-env.sh

设置hdfs目录默认权限_大数据_04

重启集群

[ranan@hadoop102 hadoop]$ myhadoop.sh stop

[ranan@hadoop102 hadoop]$ myhadoop.sh start

查看NameNode内存

[ranan@hadoop103 hadoop]$ jpsall
=============== hadoop102 ===============
22292 NodeManager
22500 JobHistoryServer
21957 DataNode
21766 NameNode
22598 Jps
=============== hadoop103 ===============
19041 Jps
18531 ResourceManager
18824 NodeManager
18314 DataNode
=============== hadoop104 ===============
16787 SecondaryNameNode
16602 DataNode
16906 NodeManager
17069 Jps
[ranan@hadoop102 hadoop]$ jmap -heap 21766

设置hdfs目录默认权限_Hadoop_05

查看DataNode内存

[ranan@hadoop102 hadoop]$ jmap -heap 21957

设置hdfs目录默认权限_大数据_06

1.2 NameNode 心跳并发配置

设置hdfs目录默认权限_hdfs_07

DataNode工作机制

DataNode启动后告诉NameNode本机的块信息(块是否完好),并周期性(默认6个小时)上报所有块消息(块是否完好)。

如果DataNode数量很多,NameNode会准备线程来处理汇报,同时客户端也有可能向NameNode请求。

问题:NameNode准备多少线程合适?

修改hdfs-site.xml配置

NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。

参数dfs.namenode.hakdler.count,默认时10

设置hdfs目录默认权限_设置hdfs目录默认权限_08

[ranan@hadoop102 ~]$ sudo yum install -y python
[ranan@hadoop102 ~]$ python

Python 2.7.5 (default, Apr 11 2018, 07:36:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> import math
>>> print int(20*math.log(3))
21
>>> quit()

hdfs-site.xml新增

[ranan@hadoop102 hadoop]$ vim hdfs-site.xml 

<!-- 新增 -->
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>

1.3 开启回收站配置

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

回收站机制

设置hdfs目录默认权限_Hadoop_09

假设文件存活时间设置为fs.trash,interval = 6060min,每过10min检查回收站里的文件存活时间fs.trash,checkpoint.interval=10,如果不设置则和文件存活时间间隔一致,每60min检查一次

开启回收站功能参数说明

(1)默认值 fs.trash.interval = 0, 0 表示禁用回收站; 其他值表示设置文件的存活时间。
(2) 默认值 fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为 0,则该值设置和 fs.trash.interval 的参数值相等。
(3) 要求 fs.trash.checkpoint.interval <= fs.trash.interval。

启动回收站-修改core-site.xml

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

<!--新增-->
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>

查看回收站

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

注意:通过网页上直接删除是不走回收站的

通过程序删除的文件不会经过回收站,需要调用 moveToTrash()才进入回收站

Trash trash = New Trash(conf);
trash.moveToTrash(path); //删除之后添加到回收站

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

[ranan@hadoop102 hadoop]$ hadoop fs -rm /test.txt
2021-11-04 16:25:53,705 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop102:8020/test.txt' to trash at: hdfs://hadoop102:8020/user/ranan/.Trash/Current/test.txt

设置hdfs目录默认权限_hdfs_10

恢复回收站数据

[ranan@hadoop102 hadoop-3.1.3]$ hadoop fs -mv /user/ranan/.Trash/Current/test.txt /

设置hdfs目录默认权限_hadoop_11