生产调优HDFS—核心参数
NameNode 内存生产配置
1)NameNode 内存计算 每个文件块大概占用 150byte,一台服务器 128G 内存为例,能存储多少文件块呢? 128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1 亿 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 的内存是动态分配的 (2)查看 NameNode 占用内存 jmap -heap NameNodePid (3)查看 DataNode 占用内存 jmap -heap DataNodePid 查看发现 NameNode 和 DataNode 占用内存都是自动分配的,且相等。不是很合理。 经验参考: https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_hardware_requirements.html#concept_fzz_dq4_gbb 具体修改:hadoop-env.sh
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
NameNode 心跳并发配置
1)hdfs-site.xml NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发的元数据操作。 对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是 10。
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>
企业经验:dfs.namenode.handler.count=20 × 𝑙𝑜𝑔𝑒𝐶𝑙𝑢𝑠𝑡𝑒𝑟 𝑆𝑖𝑧𝑒,比如集群规模(DataNode 台数)为 3 台时,此参数设置为 21。 可通过简单的 python 代码计算该值,代码如下。 sudo yum install -y python python import math print int(20*math.log(3)) quit()
开启回收站配置
开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 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/hadoop/.Trash/… 5)注意:通过网页上直接删除的文件也不会走回收站。 6)通过程序删除的文件不会经过回收站,需要调用 moveToTrash()才进入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path);
7)只有在命令行利用 hadoop fs -rm 命令删除的文件才会走回收站。
|