CDH体系结构
从数据量、计算性能要求、可靠稳定性、容错性等方面考虑。
从上面几方面确定集群规模,节点数、每个节点的物理配置(CPU、Memery、磁盘空间)、集群网络等
软件版本
需要注意的是CDH版本和mysql的对应关系,6.3.2最高对应mariadb10.1,不能兼容更高的版本,否则会出错。通过官网查看,目前cdh6不支持mariadb10.4版本,后来改为10.1版本后正常启动
参考文档: https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_database_requirements.html#cdh_cm_supported_db
https://blog.51cto.com/jinkcloud/2482685?source=drt
CDH官方的网站已经无法直接下载安装包了(需要账号密码),需要找一些之前下载过的人索取。
链接:https://pan.baidu.com/s/1dpyhF6TRXaqryab6ZVVXfw 提取码:1cuo
注意分区参考:
/boot 1G /swap 8G / 剩余全部给根目录
注意:
如果没有在装机的时候分割出来,可以考虑添加8G的swap分区,参考下面方法:
https://www.cnblogs.com/CandiceW/p/10317918.html
使用dd命令创建名为swapfile 的swap交换文件(文件名和目录任意):
dd if=/dev/zero of=/var/swapfile bs=1024 count=8192k
对交换文件格式化并转换为swap分区:
mkswap /var/swapfile
挂载并激活分区:
swapon /var/swapfile
听从系统的建议修改下权限:
chmod -R 0600 /var/swapfile
修改 fstab 配置,设置开机自动挂载该分区:
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
[root@master1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="static" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="enp0s3" UUID="9c969854-3983-40d0-998b-31659eb363a8" DEVICE="enp0s3" ONBOOT="yes" IPV6_PRIVACY="no" IPADDR=192.168.50.189 NETMASK=255.255.255.0 GATEWAY=192.168.50.1 DNS1=192.168.50.1 DNS2=192.168.50.1 ##########重启network#################
[root@master1 ~]# systemctl restart network
下载新的阿里云yum源
wget http://mirrors.aliyun.com/repo/Centos-7.repo
清除缓存
yum clean all # 清除系统所有的yum缓存 yum makecache # 生成yum缓存
[root@master1 ~]# cat /etc/hosts 192.168.50.189 master1.cluster master1 192.168.50.190 worker1.cluster worker1 192.168.50.191 worker2.cluster worker2 192.168.50.192 worker3.cluster worker3
###安装Cloudera Manager本身并不需要ssh无密码登陆,这里做配置主要是为了后续配置集群方便。实现多个机器的ssh免密码登录的核心思想是把每一个机器的rsa公钥集中到一个文件中,并且把这个文件分发到所有的机器上面去。
详细配置链接:https://blog.csdn.net/wjzholmes/article/details/100415396
mkdir -p /root/.ssh 进入/root/.ssh/目录下执行命令生成id_rsa.pub文件 ssh-keygen -t rsa ###之后一路回车,产生秘钥 并将秘钥追加至authorized_keys文件中 cat id_rsa.pub >> authorized_keys ###在.ssh文件下运行此命令 将此节点authorized_keys文件传至下一台机器 scp authorized_keys root@worker1:/root/.ssh
以此类推,将每台机器文件追加并传至下一台机器,然后将最后一台机器的秘钥再分发到每台机器中。
在所有节点上关闭防火墙
systemctl status firewalld 检查防火前状态 systemctl stop firewalld 关闭防火墙 systemctl disable firewalld 主机重启自动关闭防火墙
在命令行运行: sed -i 's/^SELINUX=.∗/SELINUX=disabled/g' /etc/selinux/config setenforce 0,使其立即生效 修改/etc/selinux/config文件(在某些系统中,可能是/etc/sysconfig/selinux文件),将SELINUX=enforcing修改为SELINUX=disabled 更新配置之后要重启服务器生效。
1.swap空间设置
swappiness=0:表示最大限度使用物理內存,之后才是swap空间;
swappiness=100:表示积极使用swap分区,並且把內存上的数据及时转移到swap空间;
如果是混合服务器,不建议完全禁用swap,可以尝试降低swappiness。
Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10(也有说改为0的,Cloudera建议将交换空间设置为0,过多的交换空间会引起GC耗时的激增。)。当前设置为 60。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
echo 10 > /proc/sys/vm/swappiness
这样操作重启机器还是还原,要永久改变:
echo "vm.swappiness = 10" >> /etc/sysctl.conf
2.已启用透明大页面压缩,可能会导致重大性能问题,建议禁用此設置。
调整:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
加入启动生效配置中 [root@master1 ~]# cat /etc/rc.local echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
vi /etc/security/limits.conf * soft nofile 32728 * hard nofile 1024999 * soft nproc 65535 * hard noroc unlimited * soft memlock unlimited * hard memlock unlimited
Hadoop对集群中各个机器的时间同步要求比较高,要求各个机器的系统时间不能相差太多,不然会造成很多问题。可以配置集群中各个机器和互联网的时间服务器进行时间同步,但是在实际生产环境中,集群中大部分服务器是不能连接外网的,这时候可以在内网搭建一个自己的时间服务器(NTP服务器),集群的各个机器与这个时间服务器进行时间同步。我们选择其中一个节点cdh01机器作为NTP服务器,其他机器和它自动同步。
安装NTP(所有节点) yum -y install ntp 添加以下NTP服务器 server http://ntp.aliyun.com 重新启动 ntp 服务和设置开机自启(所有节点): service ntpd restart systemctl enable ntpd.service
查看和测试:
ntpdc -c loopinfo #查看与时间同步服务器的时间偏差 ntpq -p #查看当前同步的时间服务器 ntpstat #查看状态定时同步crontab crontab -e #可以不用设置 10 * * * * /usr/sbin/ntpdate master1
注意:操作系统可以先配置本地yum。CDH的安装包都是rpm包。如果使用rpm安装方式安装起来是比较复杂的,会有很多依赖问题需要解决,就需要使用yum帮助我们解决依赖问题。(也可以是在线的阿里yum源,之前在按照好操作系统之后已经设置了aliyun的yum,所有这里省略centos yum源)
配置CM源:
在cdh01节点上安装并启动httpd
#安装 yum install httpd #启动 service httpd start #开机自启 systemctl enable httpd 或者chkconfig httpd on
cd /var/www/html/进入到这个目录下 mkdir cm6; mkdir cdh6 #将cdh的安装包和cm的包拷贝到创建的目录 #拷贝cm安装包和jdk到cm6 cp cloudera-manager-* /var/www/html/cm6/ cp enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm /var/www/html/cm6 cp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm /var/www/html/cm6 #拷贝cdh安装包和元数据文件 cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel /var/www/html/cdh6/ cp manifest.json /var/www/html/cdh6/ 安装createrepo命令,然后进入到cm6目录创建yum源 yum install -y createrepo #下载createrepo cd /var/www/html/cm6 #命令进入到cm6安装包的httpd资源位置 createrepo . #创建yum源的描述meta 配置yum源(每个节点) cat >> /etc/yum.repos.d/cm.repo << EOF [CM] name=cm6 baseurl=http://cdh01/cm6/ gpgcheck=0 EOF 查看yum配置源是否生效 yum clean all yum repolist
#设置yum源
[root@master1 ~]# cat /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
#安装 yum install -y MariaDB-server MariaDB-client MariaDB-compat MariaDB-devel MariaDB-common MariaDB-shared #启动和开机自启 systemctl start mariadb && systemctl enable mariadb #配置Mariadb数据库 mysql_secure_installation #可以在遇[Y/n]输入y设置密码 [账号/密码:root/root]
mkdir -p /usr/share/java cp /mnt/lb/mysql-connector-java-5.1.34.jar /usr/share/java/mysql-connector-java.jar(这里需要分发到所有节点)
#创建CDH各服务使用的数据库
-- 1. scm DROP DATABASE IF EXISTS scm; CREATE DATABASE IF NOT EXISTS scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'scm'@'%'; CREATE USER IF NOT EXISTS 'scm'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON scm.* TO 'scm'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 2. amon DROP DATABASE IF EXISTS amon; CREATE DATABASE IF NOT EXISTS amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'amon'@'%'; CREATE USER IF NOT EXISTS 'amon'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON amon.* TO 'amon'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 3. rman DROP DATABASE IF EXISTS rman; CREATE DATABASE IF NOT EXISTS rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'rman'@'%'; CREATE USER IF NOT EXISTS 'rman'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON rman.* TO 'rman'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 4. hue DROP DATABASE IF EXISTS hue; CREATE DATABASE IF NOT EXISTS hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'hue'@'%'; CREATE USER IF NOT EXISTS 'hue'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON hue.* TO 'hue'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 5. hive DROP DATABASE IF EXISTS hive; CREATE DATABASE IF NOT EXISTS hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'hive'@'%'; CREATE USER IF NOT EXISTS 'hive'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 6. sentry DROP DATABASE IF EXISTS sentry; CREATE DATABASE IF NOT EXISTS sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'sentry'@'%'; CREATE USER IF NOT EXISTS 'sentry'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON sentry.* TO 'sentry'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 7. nav DROP DATABASE IF EXISTS nav; CREATE DATABASE IF NOT EXISTS nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'nav'@'%'; CREATE USER IF NOT EXISTS 'nav'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON nav.* TO 'nav'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 8. navms DROP DATABASE IF EXISTS navms; CREATE DATABASE IF NOT EXISTS navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'navms'@'%'; CREATE USER IF NOT EXISTS 'navms'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON navms.* TO 'navms'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 9. oozie DROP DATABASE IF EXISTS oozie; CREATE DATABASE IF NOT EXISTS oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; DROP USER IF EXISTS 'oozie'@'%'; CREATE USER IF NOT EXISTS 'oozie'@'%' IDENTIFIED BY 'Bdpp1234!'; GRANT ALL PRIVILEGES ON oozie.* TO 'oozie'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
#执行数据库初始脚本 /opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h localhost -uroot -pshdata --scm-host localhost scm root root 注意:初始化完成之后,登录的root账号的密码变成了root,可以根据scm_prepare_database.sh脚本分析出来
#安装 yum install -y oracle-j2sdk1.8.x86_64 #安装agent yum install cloudera-manager-daemons cloudera-manager-agent -y
修改Cloudera Agent配置文件/etc/cloudera-scm-agent/config.ini,配置server_host为主节点cdh01 #通过vi命令修改 vi /etc/cloudera-scm-agent/config.ini server_host=cdh01 #也可以通过sed命令修改(推荐) sed -i "s/server_host=localhost/server_host=cdh01/g" /etc/cloudera-scm-agent/config.ini
vi /etc/profile #add for JAVA_HOME export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/ export PATH=PATH:PATH:PATH:JAVA_HOME/bin
1.启动Cloudera Manager(cdh01) #启动 service cloudera-scm-server start //systemctl start cloudera-scm-server #设置开机自启??? chkconfig cloudera-scm-server on //systemctl enable cloudera-scm-server 2.启动Cloudera Agent(所有节点) #启动 service cloudera-scm-agent start //systemctl start cloudera-scm-agent #开机自启 //systemctl enable cloudera-scm-agent
可以访问http://192.168.100.10:7180 进行组件服务的安装操作了
用户名/密码: admin/admin
大部分按照常规的设置即可。
以下是特别的地方做下记录。
Cluster_shdata
点击这里之后,设置远程库特别注意一下(根据知乎同学的反馈,借用截图。于20210604修改)
借用的截图说明下,下面这个远程Parcel储存库URL就保留一个,用本地的那个parcel,修改成http://cdh01/cdh6就可以了,不要连CDH官网的了地址。
选择之前建立好的mysql中的数据库,并测试数据库连接:
这里参考《大数据平台架构与实现》只安装Zookeeper、HDFS、Yarn、Hive、HBase、Spark、Oozie、Kafka、Hue。
安装完成后界面如下:
1 安装CDH时候出现主机运行状态不良情况
问题:通过Cloudera WEB界面安装Hadoop过程中,在安装Parcel步骤时,一个节点分配激活失败,报错信息显示”主机运行状况不良
分析:
CM的集群是Server-Agent模式的,那么必须有一个唯一的id来标识Server和Agent属于同一个集群,在Agent端就是使用cm_guid文件来记录id的。
假设server端重新安装了一遍,重新构建集群,而agent没有重新安装,那么他们的id是一定不同的,就会造成主机运行状况不良的异常。
解决方法:
删除agent目录下面的cm_guid文件,并重启失败节点的agent服务恢复
find / -name cm_guid
rm -rf /var/lib/cloudera-scm-agent/cm_guid
systemctl restart cloudera-scm-agent
解决方案参考以下链接:
https://blog.csdn.net/holdbelief/article/details/80287471
2 Required List parameter 'hosts[]' is not present
问题:安装cdh的parcel包下一步时显示 Required List parameter 'hosts[]' is not present的报错
解决方法:
查看日志,跟manifest.json文件有关,删除/opt/cloudera/parcel-repo/目录下的manifest.json文件,重新上传。
重启cloudera-scm-server,报错解决。
参考: https://blog.csdn.net/wjzholmes/article/details/106079673
3.safemode: Access denied for user root. Superuser privilege is required
因磁盘空间不足,内存不足,系统掉电等其他原因导致dataNode datablock丢失。
原因分析(Cause Analysis)*
由于系统断电,内存不足等原因导致dataNode丢失超过设置的丢失百分比,系统自动进入安全模式
解决办法(Solution)*
安装HDFS客户端,并执行如下命令:
步骤 1 执行命令退出安全模式:hadoop dfsadmin -safemode leave
步骤 2 执行健康检查,删除损坏掉的block。
hdfs fsck -list-corruptfileblocks
hdfs fsck / -delete
参考:https://blog.csdn.net/czp11210/article/details/76695745
4.Hue: Thrift Server role must be configured in HBase service to use the Hue HBase Browser application
解决办法:
重启hue之后,还有红色感叹号!,看下图解决
参考: https://blog.csdn.net/weixin_43970277/article/details/116226464
其余问题参考:https://blog.csdn.net/weixin_39338423/article/details/108402582
参考:
https://zhuanlan.zhihu.com/p/366308900
https://blog.csdn.net/qq_40856560/article/details/109007683
https://www.cnblogs.com/swordfall/p/10816797.html
https://www.cnblogs.com/dengbangpang/p/13224244.html
https://blog.csdn.net/wsdc0521/article/details/108366867