以下安装全部基于root用户(也可以使用免密的sudo用户)
一、安装前置准备
1、由于国内网络环境与国外资源通信不佳,为节约安装时间,直接跳到“2.1.法A 搭建Cloudera本地包存储库”,然后再回头处理其它步骤
2、同理,因网络问题,可先执行
2.4.1 安装 MySQL 数据库
1.1. 局域网 网络名
1.1.1. hostname修改
[root@cdh01 ~]# vim /etc/hostname
三台服务器的配置如下所示(以外网IP和"-"作为hostname)
- 主(202)
cdh01
- 从-1(21)
cdh02
- 从-2(28)
cdh03
1.1.2. 设置host文件
用于解析hostname对应的内网IP
[root@cdh01 ~]# vim /etc/hosts
三台服务器的配置如下:
- 主(202)
# ...
127.0.0.1 10.*.*.75
# 内网IP hostname
10.*.*.75 cdh01
10.*.*.213 cdh02
10.*.*.210 cdh03
- 从-1(21)
# ...
127.0.0.1 10.*.*.213
10.*.*.75 cdh01
10.*.*.213 cdh02
10.*.*.210 cdh03
- 从-2(28)
# ...
127.0.0.1 10.*.*.210
10.*.*.75 cdh01
10.*.*.213 cdh02
10.*.*.210 cdh03
不可以将127.0.0.1 10.*.*.75 改为 127.0.0.1 cdh01
会导致cm在启动时报错:找不到localhost/127.0.0.1
1.1.3. 修改 Network Names
[root@cdh01 ~]# vim /etc/sysconfig/network
三台服务器的配置如下:
- 主(202)
HOSTNAME=cdh01
- 从-1(21)
HOSTNAME=cdh02
- 从-2(28)
HOSTNAME=cdh03
测试配置
[root@cdh01 ~]# uname -a
[root@cdh01 ~]# host -v -t A $(hostname)
1.2. 防火墙相关
1.2.1. 防火墙
需要关闭每台服务器的防火墙,每个服务器都要执行以下操作
- 备份iptables规则
[root@cdh01 ~]# iptables-save > ~/firewall.rules
- 关闭防火墙
[root@cdh01 ~]# sudo systemctl disable firewalld
[root@cdh01 ~]# sudo systemctl stop firewalld
firewall-cmd --state
systemctl disable firewalld.service
systemctl stop firewalld.service
firewall-cmd --state
1.2.2. 设置 SELinux
检查SELinux状态:
[root@cdh01 ~]# getenforce
enforcing
[root@cdh01 ~]#
如果输出的是Permissive
或Disabled
,您可以跳过此步骤,
如果输出的是enforcing
,继续下一步。
- 设置开机启用:
[root@cdh01 ~]# vim /etc/selinux/config
SELINUX=permissive
- 立即禁用(或者 重新启动系统)
[root@cdh01 ~]# setenforce 0
ps:安装并部署CDH后,可以再次开启SELinux
1.3 配置NTP
网络时间协议(Network Time Protocol)
CDH要求您在群集中的每台计算机上配置网络时间协议(NTP)服务。大多数操作系统都用 ntpd 时间同步服务。
ps: 如果系统中存在默认的 chronyd,可能会跟 ntpd 对时间同步产生冲突。
- 安装 ntp 包
[root@cdh01 ~]# yum install ntp
- 设置ntp配置文件
[root@cdh01 ~]# vim /etc/ntp.conf
- ntp服务器的配置:
#设置可以访问NTP服务的客户端
#cdh01 主节点 IP
restrict 10.*.*.75
#cdh02 从节点-1 IP
restrict 10.*.*.213
#cdh03 从节点-2 IP
restrict 10.*.*.210
restrict 10.*.*.0 mask 255.255.0.0 nomodify notrap
###############################################
#设置NTP服务地址
server 127.127.1.0
server ntp1.aliyun.com #阿里云时间服务器(ntp1...21等)
server 127.0.0.1 #表示允许在前面同步失败的情况从本机同步
#这个配置主要用来设定本机作为为其他机器的时间源的时候,其层数为多少,层数必须在15层之内,一般取10。
fudge 127.127.1.0 stratum 8
restrict 表示允许某一个ip访问(或某一个网段访问)当前ntp节点服务端
server 表示使用某一机器作为ntp服务器(可以为是ip或hostname),从多个server中依次获取服务,第一个取不到,就取第二个,直到成功为止。
- ntp客户端的配置:
server ntp_server_hostname
server cdh01
参考:
- 重启ntp
systemctl restart ntpd
- 测试安装结果
[root@cdh01 ~]# ntpstat
synchronised to local net at stratum 9
time correct to within 959 ms
polling server every 64 s
如果是unsynchronised polling server every 8 s(或者unsynchronised time server re-starting polling server every 8 s)都是正常的,ntp服务器配置完毕后,需要等待5-10分钟才能与/etc/ntp.conf中配置的标准时间进行同步。等一段时间之后,再次使用ntpstat命令查看状态。
[root@cdh01 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 8 l 5 64 37 0.000 0.000 0.000
120.*.115.20 10.*.*.7 2 u 64 64 17 39.304 26.804 0.732
1.4. 配置免密登录
1.4.1. 配置为cm登录管理子节点的密钥
这一步可以略过
1.4.2. 配置免密登录:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@cdh01
passwd
ssh-copy-id -i ~/.ssh/id_rsa.pub root@cdh02
passwd
ssh-copy-id -i ~/.ssh/id_rsa.pub root@cdh03
passwd
ssh-copy-id 需要密码
所有服务器都要设置
二、 安装 CM(Cloudera Manager) 和 CDH
2.1. 配置yum源
下面提供了A、B两种方法,只需要其中一种即可,强烈推荐A方法
2.1.法A 搭建Cloudera本地包存储库
强烈(强行)建议,点击链接访问具体步骤
2.1.法B 配置远程yum源
源是在官方doc上找的:
Cloudera Manager 6 Version and Download Information
- 使用 命令’
wget <repo_file_url> -P /etc/yum.repos.d/
’ ,来新增cloudera源,将<repo_file_url>替换成上方的rpo源地址
(为了方便, CentOS 7 对应的 6.2 版本的 yum.rpo源地址 已经拷下来了:RHEL 7 Compatible - Repo File)
[root@cdh01 ~]# wget https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/
- 导入存储库签名GPG密钥
[root@cdh01 ~]# rpm --import https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera
2.2. 安装JDK
这里是下载JDK压缩包的方式安装
2.2.1. Java要求
6.2 版本的CM 只支持 “”Oracle JDK 1.8, OpenJDK 1.8
具体参考官方提示:支持的JDK版本
2.2.2. 手动安装 JDK
将JDK解压缩到 /usr/java/jdk-version
[root@cdh01 ~]# tar xvfz /path/to/jdk-8u<update_version>-linux-x64.tar.gz -C /usr/java/
2.2.3. 配置环境变量
所有节点都需要配置,否则会导致集群配置失败
- 编辑环境变量
[root@cdh01 ~]# vim /etc/profile
#在文件的末尾添加如下内容
# 自定义系统环境变量
# JAVA_HOME && PATH [ && classpath ]
export JAVA_HOME=/usr/java/jdk1.8.1_11
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 刷新配置,使环境变量马上生效
[root@cdh01 ~]# source /etc/profile
- 测试环境变量
[root@cdh01 ~]# echo $JAVA_HOME
/usr/local/java/jdk1.8.1_11
[root@cdh01 ~]# java -version
1.8.1_11
2.3. 安装Cloudera Manager Server
2.3.1. 安装Cloudera Manager Packages
这一步需要以 2.1. 配置yum源
为前提
[root@cdh01 ~]# sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
如果前置工作做完了,可能会安装失败,不必担心,可能是网络的问题,再试一次
2.3.2. 启用Auto-TLS
官方推荐,暂时不用,第一次启用导致了安装失败。
有的博客上也表示,安装后会导致一些安装过程中发生问题
2.4 安装和配置数据库
这里安装的是mysql,如果需要其他的数据库,参考官网安装和配置数据库
2.4.1 安装 MySQL 数据库
RHEL不再包含MySQL。所以必须从MySQL站点下载存储库并直接安装它。
这一步类似 2.1. 配置yum源
的操作
- 配置源
[root@cdh01 ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@cdh01 ~]# sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
- 安装mysql-server
[root@cdh01 ~]# yum update
[root@cdh01 ~]# yum install mysql-server
[root@cdh01 ~]# systemctl start mysqld
- 测试安装结果
[root@cdh01 ~]# mysql
...
mysql> exit
[root@cdh01 ~]#
2.4.2. 配置和启动MySQL服务器
如果要对现有数据库进行更改,请确保在继续之前停止使用该数据库的任何服务。
- 如果mysql服务正在运行,先停止mysql
[root@cdh01 ~]# sudo systemctl stop mysqld
- 在
/var/lib/mysql/
位置之外,
备份InnoDB日志文件/var/lib/mysql/ib_logfile0
和/var/lib/mysql/ib_logfile1
[root@cdh01 ~]# cp /var/lib/mysql/ib_logfile* ~/backup/
- 确定配置文件
my.cnf
的位置
默认情况
/etc/my.cnf
- 修改 my.cnf 以符合CM的要求
(参照官网Configuring and Starting the MySQL Server 的 第4小点 “Update my.cnf so that it conforms to the following requirements”)
官方推荐配置如下
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
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
#In later versions of MySQL, if you enable the binary log and do not set
#a server_id, MySQL will not start. The server_id must be unique within
#the replicating group.
server_id=1
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
- 如果AppArmor在安装了MySQL的主机上运行,则可能需要配置AppArmor以允许MySQL写入二进制文件。
- 设置开机启动
[root@cdh01 ~]# sudo systemctl enable mysqld
- 启动mysql服务
[root@cdh01 ~]# sudo systemctl start mysqld
- 运行
/usr/bin/mysql_secure_installation
以设置MySQL的 root密码和其他与安全相关的设置。
[root@cdh01 ~]# sudo /usr/bin/mysql_secure_installation
由于在新的安装中,root密码为空,当系统提示输入root密码时,由于初始密码为空,直接按Enter键。
对于其余提示,可根据下方示例操作(来自官网):
[...]
Enter current password for root (enter for none):
OK, successfully used password, moving on...
[...]
Set root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
[...]
Disallow root login remotely? [Y/n] N
[...]
Remove test database and access to it [Y/n] Y
[...]
Reload privilege tables now? [Y/n] Y
All done!
2.4.3. 安装 MySQL JDBC 驱动
重要提示(官方): 在JDK安装OpenJDK之前 ,使用yum install命令来安装MySQL驱动程序包,然后使用Linuxalternatives命令来将系统JDK设置为OpenJDK 。如果你打算使用Oracle JDK,确保它在使用yum install 安装MySQL驱动程序之前就已经安装好了。
或者,使用以下步骤手动安装驱动程序。
- 从 Download Connector/J 下载MySQL JDBC驱动程序(.tar.gz格式)。
截至撰写之时,你可以使用wget下载版本5.1.47,如下:
[root@cdh01 ~]# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
- 解压
[root@cdh01 ~]# tar zxvf mysql-connector-java-5.1.47.tar.gz
- 将重命名的JDBC驱动程序复制到
/usr/share/java/
。
如果目标目录尚不存在,请创建它。
如下:
[root@cdh01 ~]# sudo mkdir -p /usr/share/java/
[root@cdh01 ~]# cd mysql-connector-java-5.1.47
[root@cdh01 ~]# sudo cp mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar
- 将 /usr/share/java/mysql-connector-java.jar 分发到 其它的集群结点相对目录下
执行以下命令前,请先在各结点建好目录“/usr/share/java/”
[root@cdh01 ~]# scp /usr/share/java/mysql-connector-java.jar root@cdh02:/usr/share/java/mysql-connector-java.jar
[root@cdh01 ~]# scp /usr/share/java/mysql-connector-java.jar root@cdh03:/usr/share/java/mysql-connector-java.jar
如果没有分发jdbc驱动,将会导致在该结点上新增服务失败,如果后续步骤遇到cm新增管理服务提示数据库连接不上时,请检查这个目录下的jdbc驱动在不在。
2.4.4. 为 Cloudera 创建 Databases
以下列出了需要连接数据的服务(作参考):
- Cloudera Manager Server
- Cloudera Management Service roles:
- Activity Monitor (如果在 CDH 5集群中使用MapReduce service)
- Reports Manager
- Hue
- Each Hive metastore
- Sentry Server
- Cloudera Navigator Audit Server
- Cloudera Navigator Metadata Server
- Oozie
以root用户(或具有create和grant权限的其他用户)登录:
[root@cdh01 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.6.44-log MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
下面的“Cloudera software 所需的数据库
”表,列出了Cloudera Manager配置中的默认名称,但并不一应要用这些。
这一步创建的DB用户,将在后续的webUI界面配置新增服务时 被使用到
Cloudera software 所需的数据库 :
Service | Database | User |
---|---|---|
Cloudera Manager Server | scm | scm |
Activity Monitor | amon | amon |
Reports Manager | rman | rman |
Hue | hue | hue |
Hive Metastore Server | metastore | hive |
Sentry Server | sentry | sentry |
Cloudera Navigator Audit Server | nav | nav |
Cloudera Navigator Metadata Server | navms | navms |
Oozie | oozie | oozie |
使用以下命令为集群中部署的每个服务创建数据库。
将<database>
,<user>
和<password>
参数,替换成所需要的值。
(所有数据库 配置成 UTF8 字符集)
CREATE DATABASE <database> DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON <database>.* TO '<user>'@'%' IDENTIFIED BY '<password>';
根据以上官方提出的信息,整理了一下
- 数据库创建:
mysql>
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
- 数据库对应用户的创建
mysql>
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '123456';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '123456';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '123456';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY '123456';
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY '123456';
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '123456';
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '123456';
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '123456';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '123456';
有的博客写的教程中,metastore用户也是metastore
GRANT ALL ON metastore.* TO ‘metastore’@’%’ IDENTIFIED BY ‘123456’;
(这些都无所谓,关键是记录号对应的配置,后续配置将用到这些信息)
- 刷新权限
mysql> FLUSH PRIVILEGES;
必须使用flush privileges的两种情况:改密码、授权超用户
- 验证操作结果
mysql>
SHOW DATABASES;
mysql>
SHOW GRANTS FOR 'hive'@'%';
PS:记录配置好的“数据库名称、用户名、密码”。Cloudera Manager安装向导要求此信息,来正确连接到这些数据库。
2.5. 设置Cloudera Manager数据库
Cloudera Manager Server包含一个可以为自己创建和配置数据库的脚本。该脚本可以:
- 创建Cloudera Manager Server数据库配置文件。
- (MariaDB,MySQL和PostgreSQL)为Cloudera Manager
Server创建和配置数据库以供使用。 - (MariaDB,MySQL和PostgreSQL)为Cloudera Manager Server创建和配置用户帐户。
虽然脚本可以创建数据库,但以下过程必须在“2.4 安装和配置数据库
”的基础之上操作。
以下部分描述了脚本的语法并演示了如何使用它:
1. scm_prepare_database.sh的语法
Parameter(Required in bold) | Description |
---|---|
支持的数据库类型: mysql (MariaDB/MySQL)、oracle (Oracle)、postgresql (PostgreSQL) | |
Cloudera Manager Server 要用的的database名字。 对于MySQL,MariaDB和PostgreSQL数据库,脚本可以创建指定(如果指定)的数据库-u 和 -p用户(具有创建数据库和授予权限的用户)凭据的选项。Cloudera Manager配置设置中提供的默认数据库名称是scm ,但不强制使用它。 | |
要创建或使用的Cloudera Manager Server数据库的用户名。Cloudera Manager配置设置中提供的默认用户名是scm ,但不强制使用它。 | |
为 <databaseUser> 创造或使用的密码。如果您不希望密码在屏幕上可见,或存储在命令历史记录中,可以在命令里先不指定密码,系统会在下方提示输入密码:“Enter SCM password:” |
具体语法参数,可参考官网“Syntax for scm_prepare_database.sh”,也可以使用以下命令
查看语法:
/opt/cloudera/cm/schema/scm_prepare_database.sh
查看参数
/opt/cloudera/cm/schema/scm_prepare_database.sh -?
2. 准备Cloudera Manager Server数据库
执行以下语句(注意:这里的命令仅适用于DB和CM在同一个主机的情况):
[root@cdh01 ~]# sudo /opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
会提示输入密码,这里密码跟上面统一设置即可。
其实在执行时可以带入相关参数,但是如果Cloudera Manager Server 和 database 安装在同一台机器上,不要使用下面2个参数。:
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h cdh01 --scm-host cdh02 scm scm
-h 安装DB的 IP(或hostname),默认为localhost
–scm-host 安装“Cloudera Manager Server”的hostname
可以参考官方提供的不同场景的使用示例:Preparing the Cloudera Manager Server Database - Example
2.6. 安装CDH
设置Cloudera Manager数据库后,启动Cloudera Manager Server,然后登录Cloudera Manager Admin Console:
1. 启动Cloudera Manager Server:
[root@cdh01 ~]# sudo systemctl start cloudera-scm-server
2. 等待几分钟,以启动Cloudera Manager Server。
要观察启动过程,请在Cloudera Manager Server主机上运行以下命令:
[root@cdh01 ~]# sudo tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
当您看到此日志条目时,Cloudera Manager管理控制台已准备就绪:
INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.
如果Cloudera Manager Server未启动,请参阅排除安装问题(官网)。
或者参考采坑实录
3. 在Web浏览器中访问http://<server_host>:7180
其中<server_host>
是运行Cloudera Manager Server的主机的域名或IP地址,如下:
http://120...202:7180
注意: 如果启用了auto-TLS,你将重定向到https://<server_host>:7183,并会显示一个安全警告。 需要点击信任的证书,或者点击 跳转到Cloudera Manager Server 。
4. 登录Cloudera Manager Admin Console。
默认凭据为:
- Username: admin
- Password: admin
注意: Cloudera Manager不支持更改管理已安装帐户的用户名。运行安装向导后,可以使用Cloudera Manager更改密码。虽然你无法改变
admin
的用户名,您可以添加新用户,为新用户分配管理权限,然后删除默认用户admin
帐户。
5. 登录后,安装向导将启动。
根据向导提示,按步骤执行即可