配置项 | 优化原理 | 推荐值 |
dfs.namenode.handler.count | NameNode中用于处理RPC调用的线程数,默认为10。对于较大的集群和配置较好的服务器,可适当增加这个数值来提升NameNode RPC服务的并发度。 | 64 |
dfs.datanode.handler.count | DataNode中用于处理RPC调用的线程数,默认为3。可适当增加这个数值来提升DataNode RPC服务的并发度。 | 10 |
dfs.replication | 数据块的备份数。默认值为3,对于一些热点数据,可适当增加备份数。 | 3 |
dfs.block.size | HDFS数据块的大小,默认为64M。数据库设置太小会增加NameNode的压力。数据块设置过大会增加定位数据的时间。 | 128 |
dfs.datanode.data.dir | HDFS数据存储目录。将数据存储分布在各个磁盘上可充分利用节点的I/O读写性能。 | 设置多个磁盘目录 |
hadoop.tmp.dir | Hadoop临时目录,默认为系统目录/tmp。在每个磁盘上都建立一个临时目录,可提高HDFS和MapReduce的I/O效率。 | 设置多个磁盘目录 |
io.file.buffer.size | HDFS文件缓冲区大小,默认为4096(即4K)。 | 131072(128K) |
fs.trash.interval | HDFS清理回收站的时间周期,单位为分钟。默认为0,表示不使用回收站特性。 | 为防止重要文件误删,可启用该特性 |
dfs.datanode.du.reserved | DataNode保留空间大小,单位为字节。默认情况下,DataNode会占用全部可用的磁盘空间,该配置项可以使DataNode保留部分磁盘空间工其他应用程序使用。 | 视具体应用而定 |
机架感应 | 对于较大的集群,建议启用HDFS的机架感应功能。启用机架感应功能可以使HDFS优化数据块备份的分布,增强HDFS的性能和可靠性。 | - |
dfs.datanode.du.reserved的单位为字节
预留空间可能遇到的问题:预留了10G,但是该节点磁盘空间去没有真正剩余,而是一直会放数据,原因可能是如下方面:
通过 df -h 查看容量显示如下:
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 243G 200G 31G 87% /data
注:说明总容量为243G,使用了200G,可用31G 这里有个问题,使用量+可用量!=总容量,少掉了12G,这就是问题所在。
dfs.datanode.du.reserved设置为10G的话
通过hadoop dfsadmin -report 查看显示如下
Configured Capacity: 228260941824 (232.58 GB)
DFS Used: 208414818078 (194.10 GB)
Non DFS Used: 0 (0 B)
DFS Remaining: 19846123746 (38.48 GB)
Configured Capacity显示的dfs.data.dir指定的目录空间总容量大小-dfs.datanode.du.reserved的容量,
如果像之前设置 dfs.datanode.du.reserved为10G的话,Configured Capacity为:232.58 GB,DFS Remaining则为38.48G,
但实际/dev/sda4 可用空间才只有31G,所以有数据的话会一直会存入该节点,直到放满。
解决方法:将dfs.datanode.du.reserved设置更大。目前设置为30G
这样,hadoop dfsadmin -report 查看
Configured Capacity: 228260941824 (212.58 GB)
DFS Used: 208414818078 (194.10 GB)
Non DFS Used: 0 (0 B)
DFS Remaining: 19846123746 (18.48 GB)
dfs可用空间18.48<31G,所以当dfs全部用完,磁盘/dev/sda4还是有13G空间空闲,达到要的效果!