cdh之HDFS集群优化篇003

2019/3/21 星期四

1、操作系统级别优化 选择Linux的文件系统为:XFS文件系统

创新互联公司长期为上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为利辛企业提供专业的网站设计制作、网站制作,利辛网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

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的性能,多个目录用逗号进行分隔。

6、io.file.buffer.size 在yarn中修改
HDFS文件缓冲区大小,默认为4096(即4K)。 推荐值:131072(128K)。这个得编辑core-site.xml配置文件,如果你用的CDH的话,直接在YARN服务里修改即可。

7、fs.trash.interval 文件系统垃圾间隔
HDFS清理回收站的时间周期,单位为分钟。默认为0,表示不使用回收站特性。推荐开启它,时间你自己定义,推荐4~7天均可。

8、dfs.datanode.du.reserved 适用于非分布式文件系统 (DFS) 使用的保留空间(字节/卷)。
DataNode保留空间大小,单位为字节。默认情况下,DataNode会占用全部可用的磁盘空间,该配置项可以使DataNode保留部分磁盘空间工其他应用程序使用。这个得视具体应用而定,推荐稍微空出点空间,5G~10G均可。
默认为5G

9、机架感知 懂的

10、
dfs.datanode.max.xcievers 最大传输线程数 指定在 DataNode 内外传输数据使用的最大线程数。
这个值是指定 datanode 可同時处理的最大文件数量,推荐将这个值调大,默认是256,最大值可以配置为65535。

11 避免脏读写操作 //开启
dfs.namenode.avoid.read.stale.datanode
dfs.namenode.avoid.write.stale.datanode

12、 增大Service Monitor 将使用配置属性列表,搜索:“dfs.datanode.socket”,默认都是3秒,我这里把“dfs.socket.timeout” “dfs.datanode.socket.write.timeout”改成了30000s。

13、
DataNode 平衡带宽
dfs.balance.bandwidthPerSec, dfs.datanode.balance.bandwidthPerSec 每个 DataNode 可用于平衡的最大带宽。单位为字节/秒
//更具每个公司的集群网络来判断,datanode之间的互相传输

14、
依据迭代设置复制工作乘数器
dfs.namenode.replication.work.multiplier.per.iteration
提高依据迭代设置复制工作乘数器的数值(默认值是2,然而推荐值是10)

15.
DataNode 上的最大复制线程数
dfs.namenode.replication.max-streams 推荐值 50
Datanode 上复制线程数的硬限制
dfs.namenode.replication.max-streams-hard-limit 推荐值100
推荐值为 50/100

16、
fs.trash.checkpoint.interval
以分钟为单位的垃圾回收检查间隔。应该小于或等于fs.trash.interval。如果是0,值等同于fs.trash.interval。每次检查器运行,会创建新的检查点。
建议值为1小时
//指定Filesystem Trash Interval属性,该属性控制删除垃圾检查点目录的分钟数以及垃圾检查点之间的分钟数。 例如,要启用垃圾桶以便在24小时后删除已删除的文件,请将Filesystem Trash Interval属性的值设置为1440。
     注意:垃圾箱间隔是从文件移动到垃圾箱的位置开始计算的,而不是从上次修改文件的位置开始计算的。

17、
HDFS High Availability 防御方法 不变
dfs.ha.fencing.methods
解释:用于服务防御的防御方法列表。shell(./cloudera_manager_agent_fencer.py) 是一种设计为使用 Cloudera Manager Agent 的防御机制。sshfence 方法使用 SSH。如果使用自定义防御程序(可能与共享存储、电源装置或网络交换机通信),则使用 shell 调用它们。
[root@NewCDH-0--141 ~]# ls -l /run/cloudera-scm-agent/process/2428-hdfs-NAMENODE/cloudera_manager_agent_fencer.py
-rwxr----- 1 hdfs hdfs 2149 Mar 21 15:51 /run/cloudera-scm-agent/process/2428-hdfs-NAMENODE/cloudera_manager_agent_fencer.py
参考链接为:
https://blog.csdn.net/fromthewind/article/details/84106341

18、
dfs.datanode.hdfs-blocks-metadata.enabled - 对于每个HDFS服务,如果群集中有Impala服务,则设置为true。这条规则是无规则的;即使HDFS服务不在范围内,它也可以触发。

19、 dfs.client.read.shortcircuit - 对于每个HDFS服务,如果群集中有Impala服务,则设置为true。这条规则是无规则的;即使HDFS服务不在范围内,它也可以触发。
//也就是hdfs的文件在本机的话,就不走网络 直接在本地读取 提高了hbase 或者impala的效率 并有助于改善HBase随机读取配置文件和Impala性能。

20、dfs.datanode.data.dir.perm - 对于每个DataNode,如果群集中有Impala服务且群集未进行Kerberized,则设置为755。这条规则是无规则的;即使HDFS服务不在范围内,它也可以触发。
   
21 fs.trash.interval - 对于每个HDFS服务,设置为1 天 (文件系统垃圾间隔 1天)。

22 设置服务的最大文件符
最低要求角色:配置程序(也由群集管理员,完全管理员提供)
您可以为所有守护程序角色设置最大文件描述符参数。 未指定时,角色将使用从主管继承的任何值。 指定后,将软限制和硬限制配置为配置的值。

     去服务。
     单击“配置”选项卡。
     在“搜索”框中,键入rlimit_fds。
     为一个或多个角色设置“最大进程文件描述符”属性。
     单击“保存更改”以提交更改。
     重启受影响的角色实例。
//这个很重要 ,不光是针对hdfs 是针对cloudera 上的所有服务,都可以,或者说都需要去设置这个最大文件描述符 我们设置为 65535

参考链接:
HDFS集群优化篇 https://www.cnblogs.com/yinzhengjie/p/10006880.html
【配置CDH和管理服务】关闭DataNode前HDFS的调优:https://blog.csdn.net/a118170653/article/details/42774599
参考链接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_autoconfig.html
参考链接:https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cm_mc_max_fd.html


本文标题:cdh之HDFS集群优化篇003
文章出自:http://myzitong.com/article/ihspos.html