1、操作系统级别优化 选择Linux的文件系统为:XFS文件系统
2、预读缓冲
预读技术可以有效的减少磁盘寻道次数和应用的I/O等待时间,增加Linux文件系统预读缓冲区的大小(默认为256 sectors,128KB),可以明显提高顺序文件的读性能,建议调整到1024或2048 sectors。预读缓冲区的设置可以通过blockdev命令来完成。
[root@NewCDH-0--141 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 50G 45G 5.7G 89% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 49M 7.8G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/centos-home xfs 46G 342M 46G 1% /home
/dev/sda1 xfs 497M 121M 377M 25% /boot
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
cm_processes tmpfs 7.8G 58M 7.7G 1% /run/cloudera-scm-agent/process
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/997
[root@NewCDH-0--141 ~]# blockdev --getra /dev/mapper/centos-root
8192
[root@NewCDH-0--141 ~]# blockdev --getra /dev/mapper/centos-home
8192
修改的命令为:
blockdev --setra 2048 /dev/mapper/centos-home
3、放弃RAID和LVM磁盘管理方式,选用JBOD
JBOD
JBOD是在一个底板上安装的带有多个磁盘驱动器的存储设备,JBOD没有使用前端逻辑来管理磁盘数据,每个磁盘可实现独立并行的寻址。将DataNode部署在配置JBOD设备的服务器上可提高DataNode性能。
4、内存调优 swap
5、调整内存分配策略
6、.网络参数调优
二.HDFS集群性能优化
归档
查看归档文件 //适合管理hdfs的大量小文件
[root@NewCDH-0--141 ~]# sudo -u hdfs hadoop fs -ls har:///newdata.har
Found 1 items
drwxr-xr-x - hdfs supergroup 0 2018-03-19 18:37 har:///newdata.har/mjh
[root@NewCDH-0--141 ~]# sudo -u hdfs hadoop fs -ls har:///newdata.har/mjh
Found 3 items
drwxr-xr-x - hdfs supergroup 0 2018-03-19 18:37 har:///newdata.har/mjh/shiyanshuju
-rw-r--r-- 3 hdfs supergroup 17 2018-03-19 18:37 har:///newdata.har/mjh/test.txt
-rw-r--r-- 3 hdfs supergroup 12 2018-03-19 18:37 har:///newdata.har/mjh/test2.txt
压缩
三.HDFS集群配置优化
1、dfs.namenode.handler.count NameNode 的服务器线程的数量。
NameNode中用于处理RPC调用的线程数,默认为32。对于较大的集群和配置较好的服务器,可适当增加这个数值来提升NameNode RPC服务的并发度。
服务线程个数,调大一些,一般原则是将其设置为集群大小的自然对数乘以20,即20logN,N为集群大小 N 集群服务器数量
(我的HDFS集群配置是:128T硬盘,32core,128G内存空间。) 此值设置为:20 log12=120
4个节点话 就是20 log4 =40
//这个部分在cdh官方网站中有新的解释
在hdfs中
dfs.namenode.service.handler.count和dfs.namenode.handler.count - 对于每个NameNode,设置为ln(此HDFS服务中的DataNode数) 20。
//我们datanode 4个节点 ,那么
NameNode 服务处理程序计数
原文为:dfs.namenode.service.handler.count and dfs.namenode.handler.count - For each NameNode, set to ln(number of DataNodes in this HDFS service) 20.
参考链接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_autoconfig.html
中的 hdfs通用规则 General Rules
参考链接:论dfs.namenode.handler.count配置参数的总要性
https://blog.csdn.net/turk/article/details/79723963
公式为:
python -c 'import math ; print int(math.log(N) 20)'
#N 集群服务器数量
//4个节点为 27 计算过程为
[root@cdh-master-130-201 conf]# python -c 'import math ; print int(math.log(4) 20)'
27
我们线上 44个HDFS节点
[root@cdh-master-130-201 conf]# python -c 'import math ; print int(math.log(44) 20)'
75
2、dfs.datanode.handler.count:3 DataNode 服务器线程数。
DataNode中用于处理RPC调用的线程数,默认为3。可适当增加这个数值来提升DataNode RPC服务的并发度(推荐值:20)。 注意:线程数的提高将增加DataNode的内存需求,
3、dfs.replication 复制因子 默认为3 不变
4、dfs.block.size HDFS 块大小 默认128M
数据块设置太小会增加NameNode的压力。数据块设置过大会增加定位数据的时间。这个值跟你的磁盘转速有关,我之前在的博客里有解释为什么是128M,其实这个跟磁盘的转速有关。我们可以自定义这个块大小,考虑2个因素,第一,查看你的集群文件大致范围都是多大?如果文件基本上都是64M~128M左右的话,建议你不要修改。如果大部分文件都在200M~256M之间的话,你可以将配置块大小改为256,当然你也得考虑你的磁盘读写性能。
5、dfs.datanode.data.dir 不变
HDFS数据存储目录。将数据存储分布在各个磁盘上可充分利用节点的I/O读写性能。因此在实际生产环境中,这就是为什么我们将磁盘不选择RAID和LVM,而非要选择JBOD的原因。推荐设置多个磁盘目录,以增加磁盘IO的性能,多个目录用逗号进行分隔。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。