前言
概述
在公司的服务器上搭建了5遍,
第一遍看别人的文章自己搭,
第二遍全部铲了重新搭边搭边写文章,安装完后发现CM使用的是默认的内嵌数据库
第三遍把Cloudera Manager卸载重新安装,使用Mysql作为CM的数据库
第四遍全部铲了重新搭验证
第五遍全部铲了把内存增加到32G重新搭验证
Cloudera Manager版本选择
Cloudera公司一般都是3个月发布一次版本,
但是如果发布之后发现此版本存在重大Bug,
下一个版本会提前发布
笔者写这篇文章的时候Cloudera Manager已经出到了5.13.0
5.11、5.12版本可能存在Bug,不敢用,
5.13版本从发布到现在刚刚一个月,不敢用,
5.10版从5.10.0到5.10.1中间只隔了2个月
保守起见这里选择5.9.3
当然你选择5.10.x版本的应该也没有问题
系统配置
IP地址 | 主机名 | 内存 | 所安装的服务 |
---|---|---|---|
192.168.60.54 | cm01.spark.com | 20G | cloudera-scm-agent |
192.168.60.55 | cm02.spark.com | 20G | mysql,cloudera-scm-server,cloudera-scm-agent |
192.168.60.56 | cm03.spark.com | 20G | cloudera-scm-agent |
- 后面添加大数据的服务这里不显示
- 我这里是直接在服务器上的虚拟机上安装的,内存比较充足,如果你是在自己本地的虚拟机上安装的话步骤也是梊的,只不过是安装好以后,很多地方会以为内存的原因而报错
安装包准备
- 开始部署之前先下载安装包,等准备工作做完了,安装包也下载好了。
Cloudera Manager
cm5.9.3-centos6.tar.gz
其他版本的点这里Parcel服务组件包
CDH-5.9.3-1.cdh5.9.3.p0.4-el6.parcel(这个最大有1G多)
CDH-5.9.3-1.cdh5.9.3.p0.4-el6.parcel.sha1
其他版本的点这里manifest文件
mainfest安装文件
cloudera-manager-installer.bin
其他版本点这里
- 其他还需要准备的安装包:
- JDK1.8安装包——我这里用的是jdk1.8.0_65,rpm包
- Mysql5.6.x——也是rpm包
- Mysql驱动包——没有的话可以点这里下载
- 安装包先上传到Linux
只需要上传到主节点(cloudera-scm-server所在的服务器)就行,上传目录随意,后面会再进行操作
一、 大数据平台集群环境准备
文章主要包括以下部分:
- 集群环境准备
- 配置ssh无密钥访问
- 开启NTP服务
- 配置yum源
- 安装Mysql
- 安装Cloudera Manager
- 添加大数据服务组件
- 注意
- 以下所有步骤如无特别说明都是要在所有服务器上都执行一遍
- 亲测,以下所有的准备工作都要做,没有的话的话后面出现各种问题还得再补上
1. 配置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
内容如下:
DEVICE=eth0
HWADDR=00:50:56:93:24:7E
TYPE=Ethernet
UUID=8ca9d801-a91a-4365-8b08-d54c6c3050d0
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.60.56
NETMASK=255.255.255.0
GATEWAY=192.168.60.1
DNS1=202.96.209.5
DNS2=202.96.209.133
重启网卡
service network restart
2. 修改主机名
3台服务器分别修改为
cm01.spark.com
cm02.spark.com
cm03.spark.com
vim /etc/sysconfig/network
## 修改为以下内容
NETWORKING=yes
HOSTNAME=cm01.spark.com
3. hosts文件主机名与IP地址映射
另外你的电脑最好也添加一下,路径是:
C:\Windows\System32\drivers\etc\hosts
vim /etc/hosts
## 添加以下内容
192.168.60.54 cm01.spark.com cm01
192.168.60.55 cm02.spark.com cm02
192.168.60.56 cm03.spark.com cm03
4. 禁用IPV6
命令行执行以下命令
## 禁用IPv6
echo " " >> /etc/modprobe.d/dist.conf
echo "alias net-pf-10 off" >> /etc/modprobe.d/dist.conf
echo "alias ipv6 off" >> /etc/modprobe.d/dist.conf
## 查看是否追加成功
tail /etc/modprobe.d/dist.conf
5. 关闭防火墙
# 关闭防火墙
service iptables stop
# 永久性关闭防火墙
chkconfig iptables off
# 查看防火墙状态:
service iptables status
生产上根据实际情况进行设置
6. 禁用Selinux
重启机器才会生效,这里先不重启
vim /etc/sysconfig/selinux
## 修改配置项:
SELINUX=disabled
7. 卸载系统自带的JDK
rpm -qa|grep java
# xxx yyy zzz为你要卸载的插件,插件之间以空格隔开
rpm -e --nodeps xxx yyy zzz
8. 设置文件打开数目和用户最大进程数
## 查看文件打开数目
ulimit -a
## 查看用户最大进程数
ulimit -u
## 设置用户最大进程数
vim /etc/security/limits.conf
## 结尾添加以下内容
* soft nofile 32768
* hard nofile 1048576
* soft nproc 65536
* hard nproc unlimited
* soft memlock unlimited
* hard memlock unlimited
9. 统一时区为东八区(GMT+0800)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
10. Linux操作系统系统语言采用英文版
# 查看操作系统系统语言
echo $LANG
# 修改操作系统系统语言
vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
用中文的话后面使用Oozie的时候会发生乱码
11. 关闭透明大页面
执行命令
# 临时关闭透明大页面(立即生效)
echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag
echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
# 永久关闭透明大页面(重启生效)
echo ' ' >> /etc/rc.local
echo '# 关闭大透明页面' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled' >> /etc/rc.local
# 查看是否已经关闭
cat /sys/kernel/mm/redhat_transparent_hugepage/defrag
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
12. 修改swappiness
# 临时修改
sysctl -w vm.swappiness=1
# 永久修改
echo "vm.swappiness=1" >> /etc/sysctl.conf
13. 安装JDK1.8
rpm -ivh jdk-8u65-linux-x64.rpm
- 配置JAVA_HOME
#修改环境变量
vim /etc/profile
# 末尾追加以下内容
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 查看是否安装成功
java -version
- 重新加载环境变量使配置生效
source /etc/profile
# 查看是否配置成功
echo $JAVA_HOME
14. 重启服务器
reboot
二、配置ssh无密钥访问
1. 生成密钥
# 生成密钥
ssh-keygen -t rsa
# 执行后一路回车
2. 复制公钥
cd ~/.ssh/
cp id_rsa.pub authorized_keys
# 下面的命令是把其他主机的公钥复制到本机
ssh-copy-id -i cm01
ssh-copy-id -i cm02
ssh-copy-id -i cm03
3. 测试连接
ssh cm01
ssh cm02
ssh cm03
- 注意
此步执行完以后最好三个服务器的客户端连接全部关了重新连接,
因为ssh cm0x
命令执行完后如果没有返回来的话会造成不同客户端连接窗口混乱
三、开启NTP服务
Centos6默认安装ntp服务
1. 所有服务器屏蔽默认server
# 修改ntp配置文件
vim /etc/ntp.conf
# 屏蔽默认server 将配置文件里下面的内容注释掉
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
2. 配置ntp主服务器
我这里是cm02.spark.com服务器
# 修改ntp配置文件
vim /etc/ntp.conf
#添加如下内容
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3. 配置ntp从服务器
# 修改ntp配置文件
vim /etc/ntp.conf
# 同步cm02.spark.com的时间
server cm02.spark.com
4. 启动所有服务器上的服务
# 启动ntp服务器
service ntpd start
# 设置开机启动ntp服务器
chkconfig ntpd on
5. 验证ntp服务器是否开启
# 验证ntp服务器是否开启
ntpq -p
主服务器:
从服务器:
- 注意
NTP服务器默认是5到10分钟从主服务器更新一次时间
四、配置yum源
- 绝大部分安装都都从本地yum源安装,少部分从网络装,当然你也可以配置全部从本地安装
1. 配置网络yum源为阿里云源
三台服务器都需要配置
- 备份原来的配置
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
- 下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
- 生成缓存
yum makecache
2. 搭建本地yum源
- 只在cm02.spark.com服务器上配置就行
- 开启HTTP服务
# 安装httpd服务(如果已安装跳过)
yum install httpd
# 启动httpd服务
service httpd start
# 设置开机启动
chkconfig httpd on
-
浏览器验证是否启动成功
输入地址: http://cm02.spark.com/
httpd服务默认80端口,浏览器访问如果是80端口的话可以不输入端口号
将Cloudera Manager安装包和Parcel包放在指定的目录并解压
## 所有安装包都放在/opt/software/cloudera目录下
mkdir -p /opt/software/cloudera/CDH-5.9.3
mv CDH-5.9.3-1.cdh5.9.3.p0.4-el6.parcel /opt/software/cloudera/CDH-5.9.3
mv CDH-5.9.3-1.cdh5.9.3.p0.4-el6.parcel.sha1 /opt/software/cloudera/CDH-5.9.3
mv manifest.json /opt/software/cloudera/CDH-5.9.3
tar -zxf cm5.9.3-centos6.tar.gz -C /opt/software/cloudera
## 其实这个放哪儿都行
mv cloudera-manager-installer.bin /opt/software/cloudera
- httpd服务添加安装包的软链接
ln -s /opt/software/cloudera/cm /var/www/html/cm
ln -s /opt/software/cloudera/CDH-5.9.3/ /var/www/html/cdh
- 添加ClouderaManager和parcel源
vim /etc/yum.repos.d/cloudera-manager.repo
# 添加如下内容
[cloudera-manager]
name=Cloudera Manager, Version 5.9.3
baseurl=http://cm02.spark.com/cm/5
gpgcheck=0
vim /etc/yum.repos.d/cm.repo
# 添加如下内容
[cm]
name=cm
baseurl=http://cm02.spark.com/cm/5
enabled=1
gpgcheck=0
五、安装Mysql数据库
这里Mysql安装在cm02.spark.com服务器
Mysql版本这里是5.6.x。5.7.x的安装与此不一样,如果你是5.7的话这部分看其他的教程
1. 安装Mysql
附上Mysql的下载地址:
https://dev.mysql.com/downloads/mysql/
- 解压tar包,并添加执行权限
# 解压tar包
tar xvf MySQL-5.6.38-1.el6.x86_64.rpm-bundle.tar -C /opt/software/mysql/
cd /opt/software/mysql/
# 添加执行权限
chmod u+x *.rpm
- 安装MySQL-shared-compat替换系统自带的mysql-libs
# 先查看一下是否有系统自带的mysql插件,我这里是有的
rpm -qa | grep -i mysql
# 先安装MySQL-shared-compat
rpm -ivh MySQL-shared-compat-5.6.38-1.el6.x86_64.rpm
# 再卸载mysql-libs
yum remove mysql-libs
- 安装mysql
# 安装MySQL-server
rpm -ivh MySQL-server-5.6.38-1.el6.x86_64.rpm
# 安装MySQL-client
rpm -ivh MySQL-client-5.6.38-1.el6.x86_64.rpm
2. 配置Mysql
安装完以后Mysql生成一个随机密码保存在/root/.mysql_secret
# 启动Mysql
service mysql start
# 不用再配置开机启动了,安装包已经设置Mysql开机启动
# 查看Mysql密码
more ~/.mysql_secret
# 进行Mysql的基本配置
/usr/bin/mysql_secure_installation --user=mysql
3.开启远程登陆
# 命令行登陆Mysql
mysql -uroot -p123123
# 添加远程登陆权限
Grant all privileges on *.* to 'root'@'%' identified by '123123' with grant option;
# 重新加载权限
flush privileges;
本地通过Navicat远程连接Mysql:
4. 将Mysql驱动包放入Java 共享目录
三台服务器都要做
#重命令Mysql驱动包,把版本号去掉
mv mysql-connector-java-5.1.44-bin.jar mysql-connector-java.jar
# 将jar包移到java共享目录下
mv mysql-connector-java.jar /usr/share/java/
# 将Mysql驱动包分发到另外两台服务器
scp /usr/share/java/mysql-connector-java.jar root@cm01:/usr/share/java
scp /usr/share/java/mysql-connector-java.jar root@cm03:/usr/share/java
- 没有这一步的话后面Cloudera Manager连接Mysql的时候找不到Mysql驱动包
5. 创建数据库及用户并添加权限
create database if not exists amon default charset utf8 collate utf8_general_ci;
create database if not exists rman default charset utf8 collate utf8_general_ci;
create database if not exists nav default charset utf8 collate utf8_general_ci;
create database if not exists navms default charset utf8 collate utf8_general_ci;
create database if not exists sentry default charset utf8 collate utf8_general_ci;
create database if not exists hue default charset utf8 collate utf8_general_ci;
create database if not exists hive;
create database if not exists oozie;
grant all on amon.* to 'amon'@'%' identified by 'amon' with grant option;
grant all on rman.* to 'rman'@'%' identified by 'rman' with grant option;
grant all on nav.* to 'nav'@'%' identified by 'nav' with grant option;
grant all on navms.* to 'navms'@'%' identified by 'navms' with grant option;
grant all on sentry.* to 'sentry'@'%' identified by 'sentry' with grant option;
grant all on hue.* to 'hue'@'%' identified by 'hue' with grant option;
grant all on hive.* to 'hive'@'%' identified by 'hive' with grant option;
grant all on oozie.* to 'oozie'@'%' identified by 'oozie' with grant option;
flush privileges;
- 创建的数据库具体哪个是做什么用的,在对Cloudera Manager配置外部数据库的时候会有说明
- hive和oozie数据库使用默认的latin1编码, 否则会报错:创建索引时超长度限制。
六、安装Cloudera Manager
- 注意
此部分只在cm02.spark.com上执行
1. 安装Cloudera Manager
# cloudera-manager-installer.bin可以在任意目录下,它会去yum上查找相应的安装文件
# 给cloudera-manager-installer.bin添加执行权限
chmod u+x cloudera-manager-installer.bin
# 安装
./cloudera-manager-installer.bin --skip_repo_package=1
正常情况下Next、Next、Yes、Next、Yes即安装成功,会有如下提示信息表示安装成功了,比较简单这里就不再给过多的截图了(我每一步都截图了),如果中间有什么问题的话可以去看下日志,日志的位置是/var/log//var/log/cloudera-*/
这个安装包主要做以下的工作:
- 安装cloudera-scm-server服务
- 安装cloudera-scm-server-db服务这个是CM内置的数据库
- 创建cloudera-scm用户
- 安装CM内置的JDK(1.7)
- 下载一些依赖的插件比如说gcc
-
其他教程里说还需要创建cloudera-scm用户这里是不用的,执行这个安装程序的时候会自动创建
安装成功界面
此时会在系统会添加两个服务:
- cloudera-scm-server
这个是Cloudera Manager的服务 - cloudera-scm-server-db
这个是Cloudera Manager内嵌的数据库服务
# 查看添加的Cloudera服务
rpm -qa | grep cloudera
# 查看服务运行状态
service cloudera-scm-server status
service cloudera-scm-server-db status
2. 配置Mysql数据库
- Cloudera Manager配置外部的数据库需要对外部数据库进行一些配置
- ClouderaManager官网对Mysql配置
Cloudera官网配置Mysql数据库链接
上面的链接是英文的,我这边仔细阅读过了,
它的大致意思是:
- 需要配置Mysql的搜索引擎为InnoDB
- Mysql安装好以后默认的缓冲区和内存比较小,ClouderaManager会非常频繁地连接Mysql需要改一下,具体根据你集群的大小决定
- 配置最大连接数
- 二进制日志对于CM不是必须的,但是对Mysql有好处,这个你随意
说完上面一大串以后下面给了集群数量在50台以下的Mysql的配置的例子
[mysqld]
transaction-isolation = READ-COMMITTED
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links = 0
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space. Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your system
#and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
# For MySQL version 5.1.8 or later. For older versions, reference MySQL documentation for configuration help.
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES
- 全局搜索Mysql的配置文件my.cnf
find / -name my.cnf
my.cnf路径一般是/etc/my.cnf没有的话创建,其他地方有的话删除
- 修改Mysql的配置文件my.cnf
把官网给的例子粘贴上去覆盖原来的
- 注意
如果你用vim进行编辑的时候配置可能会自动注释,可以先在Vim的一般模式下输入命令:set paste
- 重启Mysql服务
service mysql restart
- 测试是否配置成功
在Mysql中随便创建一个表执行命令show table status
发现搜索引擎修改成功
3. 为Cloudera Manager配置Mysql数据库
- 执行脚本scm_prepare_database.sh
/usr/share/cmf/schema/scm_prepare_database.sh mysql -uroot -p123123 scm scm scm
如果Mysql与安装的cloudera-scm-server不在同一台服务器,比如说
Mysql在cm01.spark.com,cloudera-scm-server在cm02.spark.com
使用命令:
# 只在cm02.spark.com的服务器执行命令
/usr/share/cmf/schema/scm_prepare_database.sh mysql -h cm01.spark.com -uroot -p123123 --scm-host cm02.spark.com scm scm scm
这个命令的意思是:
为Cloudera Manager指定数据库类型为mysql
通过用户名为root,密码为123123,连接cm01.spark.com上的Mysql数据库。
为在cm02.spark.com的cloudera-scm-server服务,创建一个名叫scm的数据库(第一个scm),并为这个数据库创建一个用户,用户名为scm(第二个scm),密码也为scm(第三个scm)
-
上面都是根据官网说明来做的
- 停止CM server服务
service cloudera-scm-server stop
service cloudera-scm-server-db stop
- 删除内嵌的默认数据库PostgreSQL的配置
rm -f /etc/cloudera-scm-server/db.mgmt.properties
- 启动ClouderaManager服务
service cloudera-scm-server start
- cloudera-scm-server-db这个服务是ClouderaManager内嵌的数据库,就不用再启动了,就算启动也启动不起来
- scm数据库是执行scm_prepare_database.sh脚本时创建的,一同创建的还有scm的用户
- 这个数据库里的表是重启cloudera-scm-server服务时创建的
- 浏览器访问地址:http://cm02.spark.com:7180
-
cloudera-scm-server重启以后重新配置数据库及创建表需要时间,访问这个地址要等一会
七、Cloudera Manager添加大数据服务组件
登陆以后next, next, next
-
到添加主机页面,输入
cm[01-03].spark.com
-
修改远程Parcel存储库地址为 http://cm02.spark.com/cdh
-
指定Cloudera Manager版本及存储地址为http://cm02.spark.com/cm/5.9.3
-
虽然已安装的JDK1.8,这里还是要选择安装Cloudera Manager自带的JDK,否则后面进行主机正确性检查的时候会的警告
-
不启用单用户模式
-
Cloudera Manager Agent服务开始安装,这里时间要久一些
-
Cloudera Manager Agent服务安装成功
-
Parcel安装包从远程Parcel存储库下载到三台服务器,默认位置为
/opt/cloudera
,这一步时间也比较长
-
主机正确性检查(前面的准备工作哪一步做得不对,这里会集中体现出来)
-
添加大数据服务组件(根据具体情况选择)
-
给不同的服务器分配角色
给大数据的一些服务组件配置数据库(Hive、Hue、Oozie、以及ClouderaManager的监控服务)
这里就用到前面在Mysql创建的数据库
大数据服务名称 | 数据库 | 用户名 | 密码 |
---|---|---|---|
Activity Monitor | amon | amon | amon |
Reports Manager | rman | rman | rman |
Hive Metastore Server | hive | hive | hive |
Sentry Server | sentry | sentry | sentry |
Cloudera Navigator Audit Server | nav | nav | nav |
Cloudera Navigator Metadata Server | navms | navms | navms |
Oozie | oozie | oozie | oozie |
hue | hue | hue | hue |
-
审核更改,这里使用默认的就可以
部署完成
之所以把这一步单独列出来,是因为从上张截图到这一步还有很多工作要做,中间你会遇到各种问题,各种报错,都需要你自己根据自己的情况去进行配置,这次我搭了5遍,每次出现的问题都不一样,如果你的内存不足的话问题会更多。
添加服务组件产生的报错,不同的集群,不同的内存及资源分配发生的问题也不一样,不同讨论,实在解决不了的话可以贴出来,大家一块交流交流。
- 最后的最后
从开始搭建到最终完成用了一个月,如果你觉得这篇文章对你有帮助别忘了点赞啊