大数据集群基本调优总结01

2021-04-25 17:44:24 浏览数 (1)

一、背景

今天是2021年的4月25日,2015年参加工作,到现在有6年了,前段时间做了个决定,离职休息一段时间,趁着休息把以前学过的,用过的,以及涉及不深的好好学习总结下。(以下总结都是基于CDH集群

二、关于大数据集群物理机问题

大规模的数据分析存储才会用到hadoop集群,现在很多公司其实都是小打小闹,我在某大型通信运营商工作了4年,接触了很多大数据集群,由于公司本身业务量庞大,所以都是有自己的机房,物理机,网络设备。

在实际的生产中机房的机器有专门的机房IDC人员维护,其实到我这边基本就是操作系统层面以上的操作了,日常使用的我基本就总结如下:

1、硬件选择

主流机器基本都是x86类型的机器,系统盘建议做成raid1采用ssd类别的盘这样既保证稳定性,又可以提高速度。数据盘基本上就是采用4T或8T这种机械盘,10块或12块或者更多。

关于这种数据盘较多的机器我们就要进行一些规划,比如大数据集群中的datanode与nodemanager节点可以使用这种机械盘,我们可以把数据盘做成raid0,挂载到/mnt下,由于hadoop的特性,即使坏掉一块或者整个机器都挂掉都不会产生数据丢失,但是有时候由于业务的特殊性,比如hbase需要更快更高的查询能力,那么这种机械盘可以换成ssd加快数据读取与存储。

关于hadoop的组件中其他比较重要的节点呢,如namenode这种组件,其实很简单,给予足够的内存与CPU,根目录使用ssd即可,目前线上的生产经验来看,超线程56C内存512G根1T的机器完全可以支撑起1000台节点左右的集群正常工作了。这里需要说一下,前提是你的集群健康,文件数没有那么庞大的情况下。

2、操作系统优化

操作系统一般都是Center os 7 首先我们需要一个带有sudo权限的账号,进行部署或者维护工作。

代码语言:python代码运行次数:0复制
useradd hadoop
echo '密码' | passwd --stdin hadoop
chmod  x /etc/sudoers
echo "hadoop   ALL=(ALL)  ALL" >> /etc/sudoers
chmod -x /etc/sudoers

3、关闭swap空间

对于hadoop集群来说,如果使用系统默认设置,会导致swap分区被频繁使用,集群会不断发出警告。所以在搭建cloudera-manager的时候,会建议调整vm.swappiness参数

代码语言:javascript复制
echo 0 > /proc/sys/vm/swappiness
echo "echo 0 > /proc/sys/vm/swappiness" >>/etc/rc.d/rc.local
swapoff –a

4、关闭透明页面压缩

已启用透明大页面压缩,可能会导致重大性能问题。

以下是Cloudera官方文档

Most Linux platforms supported by CDH include a feature calledtransparent hugepages, which interacts poorly with Hadoop workloads and can seriously degrade performance.

代码语言:javascript复制
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >>/etc/rc.d/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled “>>/etc/rc.d/rc.local

5、配置时钟源

一般大型机房都有自己的时钟源,指定即可,在没有时钟源的机房可自行搭建。

代码语言:javascript复制
echo "server xx.xx.xx.xxx" > /etc/ntp.conf 
echo "server xx.xx.xx.xxx" >> /etc/ntp.conf
ntpdate xx.xx.xx.xxx service ntpd start 
echo "driftfile /var/lib/ntp/drift" >> /etc/ntp/conf 
echo "logfile /var/log/ntp" >> /etc/ntp/conf

6、优化最大文件打开数

代码语言:javascript复制
echo "* soft nofile 65535" >> /etc/security/limits.conf 
echo "* hard nofile 65535" >> /etc/security/limits/conf

7、其他配置说明

关于ssh免密:cdh集群可以不用配置ssh免密!!mha的mysql那台要注意需保留!

关于内存调拨:视情况而定,但是一定要给物理机5%以上的运行内存,建议10%留给物理机自己使用。

关于防火墙:可以启用防火墙,但是一定要设置好规则策略。

关于Selinux:关闭!!!

三、关于hdfs组件的调优

以下调优基于cdh的hadoop2.6版本进行,集群规模800台,集群接口机未纳管至cloudera manager。

打开Cloudera manager 管理页面,点击hdfs组件,点击配置,挨个说明。

1、zookeeper服务选择

因为这个集群同时纳管了Kafka所以当时独立了zookeeper服务。

2、hdfs块大小选择

默认是128M,但是生产集群规模较大,加上集群治理的文件数已经很低,所以就调整到了1GB,这里要注意的是hbase组件也在hdfs上则这个参数会对hlog也有作用,hlog的块大小也是相应的数值,所以要合理设置这个大小。

3、默认值Umask

强烈建议设置成默认的022,我也不清楚这个生产集群为啥设置成000,现在启用的acl搞得我也不敢改。。。。。

4、压缩编码解码器

这个就要看业务需求了,目前我安装了如下

5、平衡阈值

默认是10,建议调整到5,没有其他想要说明的地方。

6、平衡策略

一般都是基于datanode的平衡策略,如果你是联邦集群,就选下边的blockpool平衡策略。

7、提高block迁移速度

提高block迁移速度有三个参数第一个如下,增加DataNode上转移block的Xceiver的个数上限。

DataNode上同时用于balancer的Xceiver的个数受到了BlockBananceThrottler限制。可以适当调大如下的配置。这个参数还是需要谨慎调节,关系到rpc等待时间,其实50有点大了,可以调整至30.详细看这个网址说明的很清楚。https://blog.csdn.net/wisgood/article/details/47857549

8、平衡带宽

没啥说的,要看自己硬件网络设备能力了。

还有些高级代码段的调整,主要是针对不同集群做了相关的调整,这里就不详细说明了。

四、总结

做了好几年的大数据运维,感觉自己好像什么都不会,又好像什么都会一些,接下来的日子里要好好学习,找一份更适合自己的工作,期待下一份工作会称心如意,博客最近会更新的频繁些。

0 人点赞