一、背景
今天是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、平衡带宽
没啥说的,要看自己硬件网络设备能力了。
还有些高级代码段的调整,主要是针对不同集群做了相关的调整,这里就不详细说明了。
四、总结
做了好几年的大数据运维,感觉自己好像什么都不会,又好像什么都会一些,接下来的日子里要好好学习,找一份更适合自己的工作,期待下一份工作会称心如意,博客最近会更新的频繁些。