CDH6.3.1安装遇到很多问题,我想主要是由于条件有限,毕竟自己的电脑内存不如专业集群的内存大(如果是内存和硬盘充足,有些是可以避免的,甚至不会出现报错的情况),这里就介绍一下我用VMware安装的虚机中搭建CDH集群的辛酸历程。为了避免多次、重复安装不成功,所以需要具备以下条件:
1. 内存要足够大
我的电脑内存是8G:
使用虚拟机安装
Cloudare server:4G
Cloudare agent:分别为1G
电脑最后很卡,而且内存98%。
官方推荐最小内存为10G,所以最好还是听从官方的建议。
2. 安装的系统Centos7.7,这里我就不写VMware安装centos的操作步骤了。
3. ClouderaManager介绍:
3.1 ClouderaManager的概念
简单来说,Cloudera Manager是一个拥有集群自动化安装、中心化管理、集群监控、报警功能的一个工具(软件),使得安装集群从几天的时间缩短在几个小时内,运维人员从数十人降低到几人以内,极大的提高集群管理的效率。
3.2 ClouderaManager的功能
1) 管理:对集群进行管理,如添加、删除节点等操作。
2) 监控:监控集群的健康情况,对设置的各种指标和系统运行情况进行全面监控。
3) 诊断:对集群出现的问题进行诊断,对出现的问题给出建议解决方案。
4) 集成:多组件进行整合。
3.3 ClouderaManager的架构
1) Server:负责软件安装、配置,启动和停止服务,管理服务运行的群集。
2) Agent:安装在每台主机上。负责启动和停止的过程,配置,监控主机。
3) Management Service:由一组执行各种监控,警报和报告功能角色的服务。
4) Database:存储配置和监视信息。
5) Cloudera Repository:软件由Cloudera 管理分布存储库。(有点类似Maven的中心仓库)
6) Clients:是用于与服务器进行交互的接口(API和Admin Console)
1.1 安装前准备
1.1.1 网络配置【所有节点】
修改hostname
在每个节点上执行hostname [主机名]
配置网络
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=manager #【每个节点改成相应的hostname】
NETWORKING_IPV6=no
PEERNTP=no
保存退出
重启网络服务
service network restart
配置hosts(可用ifconfig查看ip)
vim /etc/hosts
192.168.102.131 manager
192.168.102.132 node1
192.168.102.133 node2
1.1.2 设置ssh免密登陆【所有节点】
生成无密码的密钥对
ssh-keygen -t rsa
一路回车
将公钥添加到本地认证文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
设置authorized_keys的访问权限
chmod 600 /root/.ssh/authorized_keys
**以上步骤先在每个节点上先执行一遍,然后执行下面操作
将每个节点上生成的id_rsa.pub复制到其他所有节点并添加到它们的认证文件中
比如:manager上生成的id_rsa.pub,复制到node1和node2上
scp /root/.ssh/id_rsa.pub node1:/root/(manager上执行)
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys(在node1上执行)
scp /root/.ssh/id_rsa.pub node2:/root/(manager上执行)
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys(在node2上执行)
其余节点类似操作
验证是否配置免密登录成功:
ssh root@node2
看是否需要输入密码
1.1.3 安装Oracle的JDK【所有节点】
如果CentOS装有OpenJDK,卸载之,CDH6需要使用Oracle的JDK,我这里使用jdk 1.8。
卸载自带的OpenJDK
使用rpm -qa | grep java查询java相关的包
使用rpm -qa | grep openjdk | xargs rpm -e --nodeps卸载之
安装oracle jdk
采用的tar.gz包安装,解压压缩包jre-8u181-linux-x64.tar.gz,并且将解压的到的文件夹jre1.8.0_181复制到/usr/java/jdk1.8(该目录是Cloudera Manager查找JAVA_HOME的一个路径)
tar zxvf jre-8u181-linux-x64.tar.gz
mkdir -p /usr/java/jdk1.8
mv jre1.8.0_181/* /usr/java/jdk1.8
rmdir jre1.8.0_181
chown -R root:root /usr/java/jdk1.8
配置环境变量
vi /etc/profile
将以下内容添加到profile
export JAVA_HOME=/usr/java/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
然后刷新
source /etc/profile
1.1.4 关闭防火墙和SELinux 【所有节点】
注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld
禁止firewall开机启动
systemctl disable firewalld
关闭SELINUX
setenforce 0 (临时生效)
修改 /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)
1.1.5 安装配置MySQL5.7【主节点】
卸载已有的mysql-libs
rpm -qa | grep mysql
rpm -qa | grep maria
rpm -e --nodeps 【包名】
安装mysql
创建/usr/mysql
mkdir /usr/mysql
上传tar.gz包到/usr/mysql
rz或者使用winscp工具
解压:
tar -zxvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz
移动并重命名:
mv mysql-5.7.11-linux-glibc2.5-x86_64 mysql-5.7.11
创建mysql用户组和用户并修改权限
groupadd mysql
useradd -r -g mysql mysql
创建数据目录并赋予权限
mkdir -p /home/data/mysql #创建目录
chown mysql:mysql -R /home/data/mysql #赋予权限
配置my.cnf
vim /etc/my.cnf
内容如下
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/mysql/mysql-5.7.11
datadir=/home/data/mysql
socket=/tmp/mysql.sock
log-error=/home/data/mysql/mysql.err
pid-file=/home/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
初始化数据库
进入mysql的bin目录
cd /usr/mysql/mysql-5.7.11/bin/
初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/mysql/mysql-5.7.11/ --datadir=/home/data/mysql/ --user=mysql --initialize
查看密码
cat /home/data/mysql/mysql.err | more | grep password
启动mysql,并更改root 密码
先将mysql.server放置到/etc/init.d/mysql中
cp /usr/mysql/mysql-5.7.11/support-files/mysql.server /etc/init.d/mysql
#启动!!!
service mysql start
ps -ef|grep mysql
到这里说明mysql已经安装成功了!!
下面修改密码
首先登录mysql,前面的那个是随机生成的。
./mysql -u root -p #bin目录下
再执行下面三步操作,然后重新登录。
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
这时候你如果使用远程连接……你会发现你无法连接。(防火墙要关闭)
这里主要执行下面三个命令(先登录数据库)
use mysql #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES; #刷新
如果不希望每次都到bin目录下使用mysql命令则执行以下命令
ln -s /usr/mysql/mysql-5.7.11/bin/mysql /usr/bin
mysql创建数据库cmf、amon
create database amon DEFAULT CHARACTER set utf8;
create database cmf DEFAULT CHARACTER set utf8;
grant all privileges on cmf.* to 'cmf'@'%' identified by '123456';
grant all privileges on amon.* to 'amon'@'%' identified by '123456';
flush privileges;
创建/usr/share/java目录
mkdir -p /usr/share/java
把mysql-connector-java的jar拷贝到该目录下:
cp mysql-connector-java-5.1.47.jar /usr/share/java/mysql-connector-java.jar
设置开机启动
先将/usr/mysql/mysql-5.7.11/support-files/ 文件夹下的mysql.server文件复制到 /etc/rc.d/init.d/ 目录下mysqld
命令: cp /usr/mysql/mysql-5.7.11/support-files/mysql.server /etc/rc.d/init.d/mysqld
赋予可执行权限:chmod +x /etc/rc.d/init.d/mysqld
开机启动:chkconfig mysqld on
查看服务列表: chkconfig --list
看到3、4、5状态为开或者为 on 则表示成功。如果是 关或者 off 则执行一下:chkconfig --level 345 mysqld on
1.1.6 配置NTP(Network Time Protocol)服务【所有节点】
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体思路如下: master节点作为ntp服务器与外界对时中心同步时间,随后对所有slave节点提供时间同步服务。所有slave节点以master节点为基础同步时间。
修改时区【所有节点】
时区的信息存在/usr/share/zoneinfo/下面,本机的时区信息存在/etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
查看一下当前时区:
timedatectl
查看一共有哪些时区:
timedatectl list-timezones
如果不是shanghai时区,设置成shanghai时区:
timedatectl set-timezone Asia/Shanghai
所有节点安装相关组件
yum install -y ntp
开机启动:systemctl enable ntpd.service
【主节点ntpserver配置】
vim /etc/ntp.conf
server 127.127.1.0 iburst local clock
restrict 192.168.102.0 mask 255.255.255.0 nomodify notrap
开启ntp:systemctl start ntpd
查看状态:systemctl status ntpd
校验一下:ntpq –p
【slave节点ntp客户端配置】
关闭ntp:systemctl stop ntpd
禁用ntp:systemctl disable ntpd
与主节点同步时间:ntpdate manager
在slaver节点上创建定时任务:
crontab –e
* * * * * /usr/sbin/ntpdate manager
1.2 安装Cloudera Manager
1.2.1 解压cloudera manager
tar -zxvf cm6.3.1-redhat7.tar.gz
目录:/usr/cdh/cm6.3.1/RPMS/x86_64的文件:
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm(这个是官方postgresql,不要这个)
enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
其中manager节点(既有server又有agent):
Server需要安装的:
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
安装rpm包,不安装依赖:
rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm --nodeps --force
rpm -ivh cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm --nodeps --force
rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm --nodeps --force
修改文件:
cd /etc/cloudera-scm-server/
vim db.properties
注意:com.cloudera.cmf.db.setupType一定要改成EXTERNAL,这是一个坑。
查看日志:cd /var/log/cloudera-scm-server/
启动cloudera-scm-server:
service cloudera-scm-server start
查看日志:cd /var/log/cloudera-scm-server/
tai –F cloudera-scm-server.log
初始化数据,大概需要1~2分钟,出现7180端口皆大欢喜:
访问7180的web界面:到这里,先不要动!!!!!!!!!!
修改/etc/cloudera-scm-agent/config.ini
vim config.ini
启动cloudera-scm-agent:
service cloudera-scm-agent start
node1、node2节点:
Agent需要安装的:
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
安装rpm包,不安装依赖:
rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm --nodeps --force
rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm --nodeps --force
修改/etc/cloudera-scm-agent/config.ini
vim config.ini
启动cloudera-scm-agent:
service cloudera-scm-agent start
查看cloudera-scm-agent状态:
service cloudera-scm-agent status
现在可以登录7180界面了:
输入用户名和密码都是:admin
我们选择免费版本的。
为CDH集群安装指定主机
选择存储库:parcel
这里我们使用http的方式:
[root@manager cdh]# yum install -y httpd
[root@manager cdh]# mkdir /var/www/html/cdh6_parcel
把CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel、CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha1(注意,这里一定要重命名为CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha,因为不这样重命名,它会认为我们的parcel包不完成,会重新下载)、manifest.json移动到/var/www/html/cdh6_parcel目录下。
[root@manager cdh]# ll
[root@manager cdh]# mv CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel /var/www/html/cdh6_parcel/
[root@manager cdh]# mv CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha1 /var/www/html/cdh6_parcel/CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha
[root@manager cdh]# mv manifest.json /var/www/html/cdh6_parcel/
[root@manager cdh]# service httpd start
访问:http://manager/cdh6_parcel/
点击“更多选项”,远程parcel存储库URL这里删除的只剩一条,把刚才我们创建的http地址添加进去
这里注意:http://manager/cdh6_parcel/不是https://manager/cdh6_parcel/,
然后点击右下角的保存更改,刚才的页面就会自动刷新,如下图:
勾选CDH-6.3.1-1.cdh6.3.1.p0.1470567,然后继续
等待安装parcels,成功后的界面:
Inspect Network Performance(检查网络性能)
出现了感叹号,点击“显示检查器结果”,如下:
1. Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10。当前设置为 30。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。您可以继续进行安装,但可能会遇到问题,Cloudera Manager 报告您的主机由于交换运行状况不佳。以下主机受到影响:
解决办法:
三台节点上运行:echo 'vm.swappiness=10'>> /etc/sysctl.conf
立即生效:sysctl –p
2. 已启用透明大页面压缩,可能会导致重大性能问题
三台节点分别执行:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
然后,点击重新运行:
再次查看“显示检查器结果”,如下图:这里的这个先不用管,忽略即可
我们选择下图红色框内的(我已经了解了,让我继续安装吧),继续安装
点击继续,选择要安装的服务,自定义服务:自己决定安装什么,比如安装:HDFS,勾选上就行
自定义服务分配
数据库设置:
1. 因为内存少,所以会遇到下面问题:
command aborted because of exception:Command timed-out after 90 seconds
hdfs/hdfs.sh ["mkdir","/tmp","hdfs","superfgroup","1777"]
上面的命令超时。
解决办法:
再次重试,就可以通过了。
假如遇到其他问题,可以通过角色日志查看问题原因。
2. CDH部署集群报错:fail to format namenode
手动格式化namenode
问题原因
是由于之前初始化 namenode 在 /dfs/nn 留下了残留数据(失效数据),从而影响再次初始化
解决方法
清空残留数据后,重新初始化
namenode节点:
rm -rf /dfs/nn
datanode节点:
rm -rf /dfs/dn
由于我的只是namenode节点有问题,所以只需:rm -rf /dfs/nn
最终运行全部通过(注意这里的时间5月28日1:43凌晨,lz是下班后边安装边写的文档)
点击完成即可。
CloudareManager界面:
安装完CDH就可以安装其他组件了,比如impala、kudu、Kafka等,以后会更新其他组件相关内容,敬请期待!