文章目录

  • Hadoop生产调优之HDFS-核心参数
  • 1. NameNode 内存生产环境配置
  • 2. NameNode心跳并发配置
  • 3. 开启回收站配置


Hadoop生产调优之HDFS-核心参数

1. NameNode 内存生产环境配置

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

HADOOP_NAMENODE_OPTS=-Xmx3072m

2. Hadoop3.x 配置NameNode内存
  (a) 要知道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

  (b) 查看NameNode占用内存

[user@hadoop100 ~]$ jps
1697 NameNode
1858 DataNode
2325 JobHistoryServer
2151 NodeManager
2426 Jps
[user@hadoop100 ~]$ jmap -heap 1697
...
MaxHeapSize              = 989855744 (944.0MB)

  (b) 查看DataNode占用内存

[user@hadoop100 ~]$ jmap -heap 1858
...
MaxHeapSize              = 989855744 (944.0MB)

  查看发现hadoop100上的NameNode和DataNode占用内存都是自动分配且相等。详细信息参考该文档

hadoop spark 内存 hadoop内存配置_hdfs


  具体修改:hadoop-env.sh

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

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

2. NameNode心跳并发配置

  这里的心跳指的是DataNode与NameNode间维持节点可用的通信,不是DataNode向NameNode报告块信息的通信

hadoop spark 内存 hadoop内存配置_hdfs_02


  那么为了维持NameNode的心跳并发,应准备多少线程呢?是根据DataNode决定的吗?

hadoop spark 内存 hadoop内存配置_linux_03


  在hdfs-site.xml中配置如下:

<!-- NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是10。 -->
<property>
  <name>dfs.namenode.handler.count</name>
  <value>10</value>
  <description>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.
  </description>
</property>

hadoop spark 内存 hadoop内存配置_hadoop spark 内存_04

[user@hadoop100 hadoop]$ python
Python 2.7.5 (default, Jun 28 2022, 15:30:04) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print int(20*math.log(3))
21
>>>

  

3. 开启回收站配置

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

1. 回收站工作机制

hadoop spark 内存 hadoop内存配置_linux_05


2. 开启回收站功能参数说明

 (a) 默认值 fs.trash.interval = 0,0 表示禁用回收站;其他值表示设置文件的存活时间。

 (b) 默认值 fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval 的参数值相等。

 (c ) 要求 fs.trash.checkpoint.interval <= fs.trash.interval。

3. 启用回收站

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

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

4. 查看回收站
  回收站目录在HDFS集群中的路径:

/user/${username}/.Trash/{timestamp_of_checkpoint_creation}

  注意:通过网页上直接删除的文件也不会走回收站
  通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站:

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

  只有在命令行利用 hadoop fs -rm {path}命令删除的文件才会走回收站。
  恢复回收站数据:hadoop fs -mv {path}