千家信息网

cdh 之 HDFS集群优化篇003

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,2019/3/21 星期四1、操作系统级别优化 选择Linux的文件系统为:XFS文件系统2、预读缓冲预读技术可以有效的减少磁盘寻道次数和应用的I/O等待时间,增加Linux文件系统预读缓冲区的大小(
千家信息网最后更新 2025年01月30日cdh 之 HDFS集群优化篇003

2019/3/21 星期四

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

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

服务 文件 配置 磁盘 集群 推荐 最大 线程 垃圾 大小 性能 数据 系统 规则 服务器 空间 链接 参考 管理 属性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机用户数据库 视频监控需要中心管理服务器 软件开发 蓝牙外设 架构 魔兽怀旧服什么服务器有卖的 工业软件开发技术前景 数据库软件开发需要考什么证 高中选修网络技术哪个学校好 企业软件开发主管职责 海康服务器开机没有raid管理 贵阳在哪里找软件开发公司 计算机网络技术主要干什么的 js实现增加表格连接到数据库 数据库如何批量修改某一天 企业开发服务器管理方案 服务器更新后不能上网 360网络安全研究报告 浙江网络技术服务保障 公安网络安全哈尔滨 宽带服务器哪个好 深圳微桥网络技术有限公司职友 山西农信服务器获取安装文件失败 qq群截流软件开发 网络安全2021知识竞赛答案 可视化手机软件开发 服务器与路由器交换 软件开发大会2019 冬奥会网络安全重保招聘 数据库导出第几条到第几条的数据 网络技术和大数据技术哪个更好 中国网络安全博会
0