文章目录
1 文档编写的目的
该文档主要介绍如何部署CDH集群环境
2 集群配置服务器说明
本次安装共有7台服务器,分别用于管理节点、计算节点和边缘节点,
服务器列表如下:
HOST NAME | 说明 |
---|---|
qitv3297 | Cloudera Manager |
qitv3296 | NameNode |
qitv3299 | Strandby NameNode |
qitv3298 | Edge Node |
qitv3301 | DataNode |
qitv3300 | DataNode |
qitv3302 | DataNode |
服务器OS版本RedHat7.6
3 前置条件准备
3.1 配置/etc/host
在qitv3297节点配置主机IP映射
分发到所有节点:(如集群节点过多,可以使用批量脚本发送)
scp /etc/hosts xxxx:/etc
3.2 设置远程免密登录
在172.xx.xx.18节点上使用 ssh-keygen
命令生成一对公钥和私钥, ssh-keygen -t rsa
回车敲击四下即可生成
查看一下生成的公钥和私钥
cd /root/.ssh/
在qitv3297上把公钥拷贝给其他机器,机器就是你需要远程免密登录的机器
ssh-copy-id qitv3299
验证是否能够成功免密登录到其他机器
ssh qitv3299
3.3 禁止Selinux
执行命令:
#如果没有批量脚本,每台机器执行该命令
setenforce 0
#批量执行
sh ssh_do_all.sh node.list “setenforce 0”
修改配置文件,在配置文件中添加 下列参数 (所有机器)
vim /etc/selinux/config
SELINUX=disabled
转发到其他机器
scp /etc/selinux/config xxxx:/etc/selinux/
3.4 关闭防火墙
使用脚本命令:
- 批量关闭节点的防火墙
systemctl stop firewalld
- 设置开机不启动防火墙
systemctl disable firewalld
- 查看防火墙状态
systemctl status firewalld
3.5 关闭透明大页面
CDH支持的大多数Linux平台都包含一个称为透明大页面的功能,该功能与Hadoop工作负载的交互很差,并且可能严重降低性能。
- 使用脚本命令批量执行如下操作(所有节点)
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
- 修改/etc/rc.d/rc.local文件,设置开机自动关闭透明大页面:
vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
将修改后的文件分发到其他节点
scp /etc/rc.d/rc.local xxxx:/etc
- 使用批量脚本修改权限(执行权限)
sh ssh_do_all.sh node.list “chmod 755 /etc/rc.d/rc.local”
查看修改后的文件权限
sh ssh_do_all.sh node.list “ls -l /etc/rc.d/|grep rc.local”
3.6 设置swappiness
swappiness,Linux内核参数,控制换出运行时内存的相对权重。swappiness参数值可设置范围在0到100之间。 低参数值会让内核尽量少用交换,更高参数值会使内核更多的去使用交换空间。默认值为60
swappiness参数值说明
-
vm.swappiness = 0
仅在内存不足的情况下–当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。 -
vm.swappiness = 1
内核版本3.5及以上、Red Hat内核版本2.6.32-303及以上,进行最少量的交换,而不禁用交换。 -
vm.swappiness = 10
当系统存在足够内存时,推荐设置为该值以提高性能。 -
vm.swappiness = 60
-
vm.swappiness = 100
默认值, 内核将积极的使用交换空间
- 使用脚本批量执行
sh ssh_do_all.sh node.list “sysctl vm.swappiness=1”
sh ssh_do_all.sh node.list “echo 1> /proc/sys/vm/swappiness”
- 永久修改swappiness
vim /etc/sysctl.conf
vm.swappiness = 1
分发到其他节点
scp /etc/sysctl.conf xxxx:/etc
- 查看swappiness的值
sh ssh_do_all.sh node.list “cat /proc/sys/vm/swappiness”
3.7 安装ntp时间
- 卸载chrony
Redhat7.x操作系统上默认安装了chrony,我们需要先卸载chrony,然后安装ntp
所有节点卸载chrony
sh ssh_do_all.sh node.list “yum -y remove chrony”
所有节点下载安装ntp服务
sh ssh_do_all.sh node.list “yum -y install ntp”
- 修改配置文件
在Master节点修改/etc/ntp.conf文件
vim /etc/ntp.conf
#添加一下内容
server 127.127.1.0
fudge 127.127.1.0 stratum 10
#注释掉其他时间服务器和不用的参数
从节点添加master的地址
vim /etc/ntp.conf
server xxxx #(该节点IP地址为CM的IP地址)
- 关于ntp的命令
systemctl start ntpd.service //启动服务
systemctl enable ntpd.service //设置开机自启
systemctl status ntpd //查看ntp是否成功
systemctl restart ntpd //重启ntp服务
- 查看同步状态
sh ssh_do_all.sh node.list “ntpq -p”
左边出现*号表示同步成功。
- 如果没有*号出现,可以使用下面命令强制同步时钟
ntpdate -u xxxx xxxx:主节点IP
3.8 安装httpd
下载安装httpd
yum install -y httpd
启动httpd,并设置开机自动启动,查看httpd状态:
systemctl start httpd
systemctl enable httpd
systemctl status httpd
3.9 配置Cloudera Manager的repo源
- 将Cloudera Manager的所有rpm包放到 /var/www/html/目录的新建目录cm6.3.3下
ll /var/www/html
- 使用yum安装createrepo软件
yum install -y createrepo
- 在/var/www/html/cm6.3.3目录下执行命令:createrepo . 生成rpm元数据:
createrepo .
出现红框中文目录表示生成成功。
- 在/etc/yum.repos.d/目录下新建cm.repo文件,并添加如下内容:
vim cm.repo
[cm_repo]
name = cm_repo
baseurl = http://xxxx/cm6.3.3/
enable = true
gpgcheck = false
- 执行一下命令更新repo源:
yum clean all
yum repolist
3.10 安装数据库
CM底层自动部署安装数据库进行系统配置、schema等并进行相应管理。同时CM也支持使用外部数据库作为系统配置、数据表结构等的底层存储
具体支持的数据库包括:MySQL、PostgreSQL、Oracle
集群角色库:
- 安装外部数据库
yum -y install mariadb mariadb-server
- 初始化数据库
- 启动数据库
systemctl start mariadb
- 初始化数据库
/usr/bin/mysql_secure_installation 设置密码为123456
Enter current password for root (enter for none): # 输入密码,默认为空
Set root password? [Y/n] y # 是否设置root密码
Remove anonymous users? [Y/n] y # 是否移除anonymous用户
Disallow root login remotely? [Y/n] n # 是否禁止远程登录
Remove test database and access to it? [Y/n] y # 是否移除默认的演示数据库
Reload privilege tables now? [Y/n] y # 是否重新加载权限表?
- 配置主备Mysql (不需要配置主从数据库可跳过该步骤)
(1)从数据库安装MariaDB
yum -y install mariadb
yum -y install mariadb-server
(2) 启动并配置MariaDB
systemctl start mariadb
systemctl enable mariadb
同样的执行初始化命令初始化备节点的MySQL
/usr/bin/mysql_secure_installation
(3) 修改主从数据库配置(确保mysql目录和my.cnf的权限用户为mysql)
(4) 查看binlog日志是否生效
show variables like ‘log_%’;
(5) 在主节点的MySQL中执行如下命令创建一个同步用户,命令如下
GRANT REPLICATION SLAVE ON . TO ‘mysync’@‘172.xx.%’ IDENTIFIED BY ‘mysync’;
FLUSH PRIVILEGES;
(6) 查看Master MySQL二进制日志File与Position
show master status;
(7) 在Slave Mysql上执行如下SQL:
change master to
master_host='172.xx.xx.18',
master_user='mysync',
master_password='mysync',
master_log_file='mariadb-bin.000001',
master_log_pos=1431;
start slave;
show slave status \G
显示图上处为yes,说明配置成功。
- 创建集群所需要的数据库(密码可以根据自己需要调整)
create database metastore default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'%';
FLUSH PRIVILEGES;
create database scm default character set utf8;
CREATE USER 'scm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON scm.* TO 'scm'@'%';
FLUSH PRIVILEGES;
create database rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON rm.* TO 'rm'@'%';
FLUSH PRIVILEGES;
create database am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON am.* TO 'am'@'%';
FLUSH PRIVILEGES;
create database hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON hue.* TO 'hue'@'%';
FLUSH PRIVILEGES;
create database oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON oozie.* TO 'oozie'@'%';
FLUSH PRIVILEGES;
create database sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';
FLUSH PRIVILEGES;
create database nav_ms default character set utf8;
CREATE USER 'nav_ms'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_ms. * TO 'nav_ms'@'%';
FLUSH PRIVILEGES;
create database nav_as default character set utf8;
CREATE USER 'nav_as'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_as. * TO 'nav_as'@'%';
FLUSH PRIVILEGES;
查看创建所有的数据库
show databases;
3.11 安装JDBC驱动
- 在需要访问MySQL的节点上创建/usr/share/java目录
mkdir -p /usr/share/java
- 将准备好的MySQL驱动包拷贝至/usr/share/java目录下并重命名
chmod 777 /usr/share/java/mysql-connector-java.jar
- 使用软链接的形式去掉驱动jar包的版本号
chmod 777 mysql-connector-java-5.1.34.jar
ln -s mysql-connector-java-5.1.34.jar mysql-connector-java.jar
4 Cloudera Manager安装
4.1 安装JDK
yum -y install oracle-j2sdk1.8.x86_64
4.2 安装Cloudera Manager Server
- 通过yum安装Cloudera Manager Server
yum -y install cloudera-manager-server
- 初始化数据库
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm password
- 启动Cloudera Manager Server
systemctl start cloudera-scm-server
systemctl status cloudera-scm-server
- 检查端口是否监听
netstat -lnpt | grep 7180
- 通过http://172.xx.xx18:7180/cmf/login访问CM, 默认账号密码为admin/admin
注意:完全启动成功需要几分钟时间。
5 CDH安装
5.1 部署CDH parcel包到http服务
ll /var/www/html
验证是否可以通过浏览器访问 http://172.xx.xx.18/cdh6.3.3
5.2 CDH集群安装向导
-
登录Cloudera Manager控制台,进入集群安装引导欢迎界面
-
点击“继续”,选择接受许可条款和条件
- 点击“继续”,选择60天试用安装
- 点击“继续”,进入CDH集群安装界面
- 点击“继续”,输入集群名称
- 点击继续,输入待加入集群的主机名并点击“搜索”按钮
- 点击“继续”,修改CM和CDH的Repository
- 点击“继续”,勾选安装java并勾选安装Java无限制强度加密政策文件
- 点击“继续”,输出登录服务器的账号和密码
-
点击“继续”,进入Agent服务安装界面
-
Agent服务安装完成后自动进入CDH Parcel分发界面
等待Parcel包分发完成,进入主机环境检查
-
点击“继续”,进入选择服务界面点击自定义,勾选服务
-
点击“继续”,进入角色分配界面
-
点击“继续”,配置数据库信息,点击“测试”确认是否填写正确
-
点击“继续”,确认及调整相应配置
-
点击“继续”,进入服务首次启动初始流程
等待命令运行完成
- 点击“继续”
- 点击“完成”,完成集群的安装
5.3 配置yarn、Impala 动态资源池放置规则
6 集群安装KDC服务
6.1 KDC服务安装及配置
- 在Cloudera Manager服务器上安装KDC服务
yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation
- 修改/etc/krb5.conf配置
vim /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
dns_lookup_kdc = false #必须加
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = xxxx.COM
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
xxxx.COM = {
kdc = qitv3297
admin_server = qitv3297
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
- 修改/var/kerberos/krb5kdc/kadm5.acl配置
vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@xxxx.COM *
- 修改/var/kerberos/krb5kdc/kdc.conf配置
vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
xxxx.COM = {
#master_key_type = aes256-cts
max_renewable_life= 7d 0h 0m 0s
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
- 创建Kerberos数据库
kdb5_util create –r xxxx.COM -s
- 创建Kerberos的管理账号 (密码:123456)
kadmin.local
addprinc admin/admin@xxxx.COM
- 将Kerberos服务添加到自启动服务,并启动krb5kdc和kadmin服务
systemctl enable krb5kdc
systemctl enable kadmin
systemctl start krb5kdc
systemctl start kadmin
- 测试Kerberos的管理员账号
kinit admin/admin@xxxx.COM
- 为集群安装所有Kerberos客户端,包括Cloudera Manager,如下命令需要在集群所有节点执行
yum -y install openldap-clients krb5-workstation krb5-libs
- 将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端,使用批处理脚本将Kerberos服务端的krb5.conf配置文件拷贝至集群所有节点的/etc目录下:
sh bk_cp.sh node.list /etc/krb5.conf /etc/
6.2 集群启用Kerberos
- 在KDC中给Cloudera Manager添加管理员账号(密码为123456)
kadmin.local
addprinc cloudera/admin@xxxx.COM
- 进入Cloudera Manager的“管理”“安全”界面
- 选择“启用Kerberos”,进入如下界面
-
确保如下列出的所有检查项都已完成
-
点击“继续”,配置相关的KDC信息,包括类型、KDC服务器、KDC Realm、加密类型以及待创建的Service Principal的更新生命期等
- 不建议让Cloudera Manager来管理krb5.conf,点击继续
- 输入Cloudera Manager的Kerbers管理员账号,一定得和之前创建的账号一致,点击“继续”
-
点击“继续”启用Kerberos
-
确认Kerberos的配置信息以及HDFS的端口号的变化(默认即可)
-
点击“继续”运行启动Kerberos指令,等待集群重启完成
-
点击“完成”,至此已成功启用Kerberos。
7 CDH集群集成Sentry服务
7.1 安装Sentry服务
在前面数据库章节已为Sentry创建了数据,接下来主要做Sentry服务的添加并与CDH各个服务集成。
- 登录Cloudera Manager控制台主页,添加Sentry服务
-
点击“添加服务”,进入服务添加界面,勾选Sentry服务
-
点击“继续”,进入角色分配界面
-
点击“继续”,配置元数据库并测试连通性
- 点击“继续”,首次启动运行命令,等待命令运行成功。
- 点击“继续”,完成Sentry服务的安装
7.2 Hive与Sentry集成
- 进入Hive服务配置页面,搜索“sentry”
-
搜索“doas”禁用hive模拟功能
-
启用数据库中的存储通知
保存上述修改配置,待后面所有配置修改完成后重启服务。
7.3 HDFS与Sentry集成
-
进入HDFS服务配置界面搜索“sentry”
-
搜索“acl”
保存上述修改配置,待后面所有配置修改完成后重启服务。
7.4 Impala与Sentry集成
进入Impala服务的配置界面,搜索“sentry”勾选并保存配置
7.5 Hue与Sentry集成
进入Hue服务的配置页面,搜索“sentry”勾选并保存配置
完成上述所有配置后,回到CM主页根据提示重启相应服务
点击重启按钮
重启相应服务,等待服务重启
8 服务启用高可用
8.1 NameNode启用高可用
- 登录Cloudera Manger进入HDFS服务
- 点击“启用High Availability”,进入高可用引导页
-
点击“继续”,分配高可用角色
-
点击“继续”,配置JournalNode数据目录
-
点击“继续”,进入启用高可用流程,命令执行完成
-
点击“继续”,完成高可用启用
- 进入实例列表看到
8.2 ResourceManager启用高可用
-
登录Cloudera Manager,进入Yarn服务
-
点击“启用High Availability”,进入高可用引导页
- 点击“继续”,进入服务高可用启用流程,命令运行完成
- 点击“完成”,即完成了Yarn服务的高可用配置
8.3 Sentry服务启用高可用
- 登录Cloudera Manager控制台,进入Sentry服务
-
点击“启用High Availability”,进入高可用引导页
-
点击“继续”,进入启用Sentry高可用流程,命令执行成功
至此完成Sentry服务的高可用启用。
9 功能验证
9.1 添加Gateway模板并应用到edge node节点
-
登录Cloudera Manager控制台,点击“主机”->”主机模板”
-
点击“创建”
完成创建
-
点击“主机”-“所有主机”
-
选择qitv3298节点,点击菜单应用模板
选择模板
- 点击确认完成Gateway角色部署
9.2 HDFS功能验证
- 执行put命令
- 向集群提交一个MapReduce作业
hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 5
作业执行成功
9.3 Spark功能验证
- 向集群提交一个Spark作业
spark-submit --class org.apache.spark.examples.SparkPi
–master yarn-client --num-executors 4 --driver-memory 2g
–driver-cores 1 --executor-memory 2g --executor-cores 1
/opt/cloudera/parcels/CDH/lib/spark/examples/jars/spark-examples_2.11-2.4.0-cdh6.3.3.jar
- 作业执行成功
9.4 Hive功能验证
9.5 Impala功能验证
9.6 HBase功能验证
create 'user', 'info'
put 'user','rk01','info:name','zhangsan'
put 'user','rk01','info:age',20
scan 'user'
9.7 Sentry验证
-
创建测试角色并将角色授权给用户组
-
创建两个角色:
read:只能读default库test表,并授权给user_r用户组
write:只能写default库test表,并授权给user_w用户组
注意:集群所有节点必须存在user_r和user_w用户,用户默认用户组与用户名一致,赋权是针对用户组而不是针对用户。
useradd user_r
passwd user_r
useradd user_w
passwd user_w
- 创建角色
1.使用hive用户创建read和write角色,并授权read角色对test表的select权限,write角色对test表的insert权限
create role test_read;
grant select on table test to role test_read;
create role test_write;
grant insert on table test to role test_write;
2.将read角色授权给user_r用户组,write角色授权给user_w用户组
grant role test_read to group user_r;
grant role test_write to group user_w;
3.使用kadmin创建user_r和user_w用户
addprinc user_r
addprinc user_w
- beeline验证
(1) 使用user_r用户登录Kerberos
kinit user_r
通过beeline连接HiveServer2进行验证
!connect jdbc:hive2://qitv3296:10000/;principal=hive/qitv3296@xxxx.COM
执行Hive的MapReduce任务
(2) 使用user_w用户登录Kerberos
kinit user_w
使用beeline登录HiveServer2验证
!connect jdbc:hive2://qitv3296:10000/;principal=hive/qitv3296@xxxx.COM
验证总结:
user_r用户所属组为user_r拥有test表读权限,只能对test表进行select和count操作不能进行insert操作;
user_w用户所属组为user_w拥有test表写权限,只能对test表进行insert操作不能进行select操作;