当集群安装好后,即使你不常用,最少一个礼拜启动一回,长时间不启动它自检过不去就报废了,很麻烦。
正式安装之前,先说明一下CDH是基于Apache Hadoop及相关项目的发行版。CDH通过WEB界面管理,并提供了hadoop的两个核心功能:可扩展存储和分布式计算,以及企业级的重要功能。CDH遵循Apache-licensed,但是不开源,属于高定制化的解决方案,提供了基于hadoop的批处理、交互SQL、交互查询、基于角色的访问控制。
而Cloudera Manager是一个专属并管理CDH集群的工具。Cloudera Manager通过向CDH集群的每个部分提供细粒度的可见性及可控性,建立出一套企业部署标准,这可以提高性能、服务质量、遵从性并降低管理成本。使用Cloudera Manager,您可以轻松地部署和集中操作完整的CDH堆栈和其他托管服务。Cloudera Manager提供一个集群范围的实时的主机和服务运行视图;提供一个单独的中央控制台,用于在整个集群中执行配置更改,并整合了一整套报告和诊断工具,以便优化硬件性能和利用率。
在管理工具上和hdp不同,可以理解为hdp是低定制保留了大部分原生特色的集群解决方案,而cdh恰恰相反,甚至在使用组件时都需要使用特定的cdh版本。
安装环境
虚拟机 Workstation pro 15
操作系统 CentOS Linux 7.4
JDK 1.8.0_144
Cloudera Manager 6.3.1
CDH 6.3.2
服务器总计4台,三台做大数据集群,一台做CDH管理节点,每台资源5核数24G内存50G磁盘,本篇作为测试环境安装,如果大家正式使用建议酌情扩大
CDH安装包可从网盘下载链接:https://pan.baidu.com/s/1FfcwxyqB5QjPrkDEBB5gag?pwd=9lm1
提取码:9lm1
开始安装
1、关闭防火墙、selinux、ssh密码强制免密校验
防火墙一般情况下需要关闭,除非需要专业的防火墙环境,或者是阿里云这些云服务商有自己的运营能力
至于selinux,这个东西在国内一般都不用,它是美国安全局要求linux自带的一个安全控制功能,生效权重优先于所有权限相关的设置
vi /etc/sysconfig/selinux
SELINUX=disabled
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
检查ssh配置文件/etc/ssh/ssh_config
中的StrictHostKeyChecking
配置是否是no
2、配置域名映射,编辑/etc/hosts
3、配置SSH免密
4、集群之间同步时间
5、所有节点安装JDK
a)首先我们先看一下官方给出的jdk注意事项
The JDK must be 64-bit. Do not use a 32-bit JDK.
The installed JDK must be a supported version as documented in Java Requirements.
The same version of the Oracle JDK must be installed on each cluster host.
The JDK must be installed at /usr/java/jdk-version.
大致的意思就是说,JDK必须时64位1.8的,而且需要放在指定的目录下,且目录名必须是jdk+版本号组成,否则会因无法识别jdk而无法启动cloudera-scm-server。
要特别注意第三句话,提到所有的服务器必须安装相同版本的oraclejdk。网上有很多的安装文档,直接使用的是我们开发时用的开源Java jdk,经过博主实际测试也不是不能用,只是出现问题的概率高达80%。所以为了保险起见安装我在网盘中分享的oraclejdk。
b) 将jdk上传,并且运行RPM命令安装
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
在你安装完之后,你要确保在/usr/java这个路径下有安装好的文件,Oracle jdk安装完之后应该是有类似于下面的路/usr/java/jdk1.8.0_181-cloudera
,这个路径你不需要再变了,就保持这样。
c) 配置java环境变量,在/etc/profile中添加如下内容。
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=$PATH:$JAVA_HOME/bin
d)运行命令重新加载环境变量文件source /etc/profile
e) 将jdk推送给其它节点,命令例如如下
scp -r /usr/java/jdk1.8.0_181-cloudera node1:/usr/java/
f) 在各节点执行java -version测试java
6、所有节点关闭透明大页、关闭交换分区、限制单个进程能同时拥有的内存映射区域数量、删除虚拟路由、关闭CPU省电模式、网络连接溢出时自动重置新连接、文件权柄充足
a) 透明大页是linux的内存管理优化,但是它会带来性能波动和内存碎片问题,执行下面两句话,改变运行时参数,并将这两句话添加到/etc/rc.local
文件中,以便重启后生效,就可以永久关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
b) 交换分区swap,指的是系统内存和物理磁盘的交换分区,当内存紧张时调用部分物理磁盘做内存中转,但在中转时会严重影响服务器内存性能,我们这里直接关闭,有的地方通过修改内核参数sysctl vm.swappiness=10
,并将它写入/etc/sysctl.conf
文件,然后sysctl -p
生效,意思是只让系统内存使用率到达90%(vm.swappiness的取值是0-100)
时才可以采用物理磁盘转换
要直接关闭交换分区,需要先执行 swapoff -a
热关闭后,注释掉 /etc/fstab
文件中的 swap 分区,即可在往后永久关闭
# /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
# /dev/sda2 none swap defaults 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
c) 运行ifconfig查看你的路由信息,如果你发现信息中除了lo、ens33这两条信息之外,还有一条字母lb
开头,具体名字没截图,的网卡路由那么意味着你存在着虚拟路由,我们不需要它,不过一般是没有的
这个时候,yum安装下面的包
yum install -y qumu-kvm* libvirt* virt-install* bridge-utils
运行下面两条命令,删除虚拟路由
virsh net-destroy default
virsh net-undefine default
d) 限制单个进程能同时拥有的内存映射区域数量,对于HDP来讲一般不需要太高,系统默认的就够用,如果未来在使用时发生了Too many open files 或 vm.max_map_count [XXXX] is too low
的错误,就意味着可调用的内存映射不够了,可以通过下面的方式修改
vi /etc/sysctl.conf
vm.max_map_count = 2000000
sysctl -p
e) 避免由于 CPU 频率降低导致的性能波动、响应延迟和系统瓶颈,提高 服务的可靠性和吞吐量。如果 CPU 不支持 Scaling Governor,可以跳过此项配置。
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
f) 确保服务器在 TCP 连接的发送缓冲区溢出时,连接会被立即中断,以防止服务在高负载或高并发情况下出现缓冲区阻塞,避免连接被长时间挂起,从而提高系统的响应性和稳定性。
vi /etc/sysctl.conf
net.ipv4.tcp_abort_on_overflow=1
sysctl -p
g) linux会限制服务可操作的文件数,一般默认的够用,如果出现内核文件数的报错,可用下面的命令修改,修改后重启会话生效
vi /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
7、在cm节点配置本地yum源
a) 所有节点,进入 /etc/yum.repos.d/ 目录下,把里面系统自带的repo文件存放到一个备用目录下
b) 回到cm节点,创建/etc/yum.repos.d/base.repo文件,并增加如下内容源到repo文件中
[Local_ISO]
name=Loacal ISO
baseurl=file:///mnt
gpgcheck=0
enabled=