CDH6.2.0+Kerberos+Sentry安装过程详细记录
一、准备工作
CDH下载:
下载链接:https://pan.baidu.com/s/1NxdxXim0NyZdEjUVyPfyEQ 提 取 码:v20s
1、本文环境
名称 | CentOS | JDK | MySQL | CM | CDH |
---|
版本 | 7.9 | 1.8 | 5.7 | 6.2.0 | 6.2.0 |
2、集群规划
IP | 主机名 | 角色 | 安装服务 | 内存 | 处理器 |
---|
192.168.198.11 | dtb-tc-app11 | Master | cloudera-scm-server cloudera-scm-agent | 6G | 4 | 192.168.198.12 | dtb-tc-app12 | Slave1 | cloudera-scm-agent | 3G | 2 | 192.168.198.13 | dtb-tc-app13 | Slave2 | cloudera-scm-agent | 3G | 2 |
注意:内存和处理器建议分配大一点,由于笔者本地安装,电脑内存和处理器资源有限所以只能分配这么点
3、修改主机映射
3.1、Linux:修改三台服务器的/etc/hosts 文件
[root@dtb-tc-app11 ~]
3.2、Windows:修改hosts文件,所在目录:C:\Windows\System32\drivers\etc
方便在Windows中直接使用 主机名 访问服务器节点
4、免密登录(方便后面做集群分发)
4.1、生成公钥和私钥
[root@dtb-tc-app11 ~]
4.2、将公钥拷贝到需要进行免密登录的目标服务器上
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
4.3、分别在dtb-tc-app12 和dtb-tc-app13 两台服务器上重复4.1和4.2的操作,使所有服务器之间可以免密登录
4.4、验证免密登录
[root@dtb-tc-app11 ~]
Last login: Wed Jun 9 23:28:04 2021 from 192.168.198.1
[root@dtb-tc-app11 ~]
logout
Connection to dtb-tc-app11 closed.
[root@dtb-tc-app11 ~]
Last login: Wed Jun 9 23:13:34 2021 from 192.168.198.1
[root@dtb-tc-app12 ~]
logout
Connection to dtb-tc-app12 closed.
[root@dtb-tc-app11 ~]
Last login: Wed Jun 9 23:13:44 2021 from 192.168.198.1
[root@dtb-tc-app13 ~]
logout
Connection to dtb-tc-app13 closed.
[root@dtb-tc-app11 ~]
5、编写集群同步脚本
5.1、在/root 目录下创建bin 目录,并在bin 目录下创建 xsync 文件
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 bin]
5.2、在 xsync 文件中加入如下内容:
#!/bin/bash
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
for host in dtb-tc-app11 dtb-tc-app12 dtb-tc-app13
do
echo ==================== $host ====================
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file); pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
5.3、赋予 xsync 可执行权限
[root@dtb-tc-app11 bin]
5.4、将bin 分发至所有节点上,使在任何节点都可以使用xsync脚本进行文件分发
[root@dtb-tc-app11 ~]
6、关闭防火墙
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
7、关闭SELinux
7.1、修改/etc/selinux/config 配置文件,将SELINUX=enforcing修改为SELINUX=disabled
[root@dtb-tc-app11 ~]
7.2、同步/etc/selinux/config 配置文件
[root@dtb-tc-app11 ~]
7.3、分别重启dtb-tc-app11、dtb-tc-app12、dtb-tc-app13 三台服务器
[root@dtb-tc-app11 ~]
[root@dtb-tc-app12 ~]
[root@dtb-tc-app13 ~]
8、配置 NTP 时钟同步
注意:所有服务器节点均联网的情况下可跳过此步骤
集群时间同步可以参考这篇文章《集群时间同步配置》
二、CM 安装部署
1、安装 JDK(dtb-tc-app11、dtb-tc-app12、dtb-tc-app13 全部安装)
1.1、在/root 目录下创建software 目录,用于存放软件安装包
1.2、使用 ftp 工具将 jdk 的安装包上传至/root/software 目录下
1.3、创建/usr/java 目录,将jdk安装在此目录下
[root@dtb-tc-app11 ~]
1.4、将jdk-8u291-linux-x64.tar.gz 解压至/usr/java 目录下
[root@dtb-tc-app11 software]
1.5、查看是否解压成功
[root@dtb-tc-app11 software]
1.6、配置JAVA_HOME环境变量
1.6.1、在/etc/profile.d/ 目录下创建 java_env.sh 文件,并添加如下内容
[root@dtb-tc-app11 software]
1.6.2、注意JAVA_HOME后面为jdk的安装路径,为了避免手写错误,建议进入jdk安装目录使用pwd 命令查看并复制
export JAVA_HOME=/usr/java/jdk1.8.0_291
export PATH=$PATH:$JAVA_HOME/bin
1.6.3、刷新profile文件使其环境变量生效
[root@dtb-tc-app11 ~]
1.6.4、测试 JDK 是否安装成功
[root@dtb-tc-app11 ~]
1.6.5、将dtb-tc-app11 中的 JDK 和 环境变量 分发至dtb-tc-app12和dtb-tc-app13 上
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
1.6.6、分别在dtb-tc-app12和dtb-tc-app13 上刷新环境变量,并检测 JDK 是否安装成功
[root@dtb-tc-app12 ~]
[root@dtb-tc-app12 ~]
2、所有节点安装第三方依赖(dtb-tc-app11、dtb-tc-app12、dtb-tc-app13 )
yum install -y bind-utils libxslt cyrus-sasl-plain cyrus-sasl-gssapi portmap fuse- libs /lib/lsb/init-functions httpd mod_ssl openssl-devel python-psycopg2 MySQL-python fuse-libs fuse
3、安装 MySQL(本文选择安装在dtb-tc-app13 节点上)
3.1、卸载mariadb(CentOS 7自带)
[root@dtb-tc-app13 ~]
3.2、MySQL安装
MySQL5.7安装可以参考这篇文章[《CentOS7 yum方式安装MySQL5.7》](
3.3、在/root 目录下创建software 目录,用于存放软件安装包
[root@dtb-tc-app13 ~]
3.4、上传MySQL驱动至/root/software 目录中
3.5、添加 MySQL 驱动
[root@dtb-tc-app13 software]
- 将
mysql-connector-java-5.1.34.jar 拷贝至/usr/share/java 目录下,并重命名为mysql-connector-java.jar
[root@dtb-tc-app13 software]
- 将
mysql-connector-java.jar 驱动包分发至其他节点上
[root@dtb-tc-app13 ~]
4、初始化管理节点数据库
4.1、将MySQL驱动包mysql-connector-java-5.1.34.jar 拷贝至/opt/cloudera/cm/lib/ 目录
[root@dtb-tc-app13 ~]
4.2、将MySQL驱动包分发至其他节点
[root@dtb-tc-app13 ~]
4.3、登录MySQL
[root@dtb-tc-app13 ~]
4.4、创建scm 用户及数据库
CREATE USER 'scm'@'%' IDENTIFIED BY 'scm@2021';
GRANT ALL ON *.* TO 'scm'@'%';
CREATE DATABASE scm;
flush privileges;
4.5、创建hive 用户及数据库
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive@2021';
GRANT ALL ON *.* TO 'hive'@'%';
CREATE DATABASE hive;
flush privileges;
4.6、创建reports 数据库
CREATE DATABASE reports;
5、CM安装
5.1、在dtb-tc-app11 上的/root/software 目录下创建cm 目录,用于存放cloudera相关的rpm包
[root@dtb-tc-app11 ~]
5.2、将cloudera相关的rpm包上传至/root/software/cm 目录中
5.2、将agent 和daemons 分发至dtb-tc-app12和dtb-tc-app13 中
[root@dtb-tc-app11 cm]
[root@dtb-tc-app11 cm]
5.3、在主节点dtb-tc-app11 上安装daemons、server和agent
[root@dtb-tc-app11 cm]
[root@dtb-tc-app11 cm]
[root@dtb-tc-app11 cm]
5.4、分别在从节点dtb-tc-app12和dtb-tc-app13 上安装daemons和agent
[root@dtb-tc-app12 cm]
[root@dtb-tc-app12 cm]
5.5、修改从节点dtb-tc-app12和dtb-tc-app13 的 agent 配置,使其指向server (dtb-tc-app11)
[root@dtb-tc-app12 ~]
5.6、初始化scm 数据库(在安装server的节点<dtb-tc-app11> 上操作)
[root@dtb-tc-app11 ~]
6、上传 CDH 相关文件(主节点dtb-tc-app11 )
6.1、在/root/software 目录下创建cdh 目录,用于存放CDH相关文件
[root@dtb-tc-app11 ~]
6.2、上传CDH相关文件至/root/software/cdh 目录下
6.3、将CDH的这些文件移动到/opt/cloudera/parcel-repo/ 中
[root@dtb-tc-app11 ~]
7、启动 CM
7.1、在dtb-tc-app11 节点上启动server和agent 服务,并设置开机自启
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
7.2、分别在dtb-tc-app12和dtb-tc-app13 节点上启动agent 服务,并设置开机自启
[root@dtb-tc-app12 ~]
[root@dtb-tc-app12 ~]
[root@dtb-tc-app12 ~]
[root@dtb-tc-app13 ~]
[root@dtb-tc-app13 ~]
[root@dtb-tc-app13 ~]
7.3、在浏览器输入server节点的主机名/ip :7180,即可访问到CM的WEB操作界面
三、CDH 安装
1、登录CM,默认用户名和密码都为admin
2、点击继续 ,勾选接收许可条款和条件 后点击继续,选择试用版 后点击继续
3、集群安装
注意:若安装的时候,创建hive metastore 数据库表失败,报加载不到驱动,则需要将MySQL驱动包拷贝至/opt/cloudera/parcels/CDH/lib/hive/lib/ 目录中。
安装完成
4、配置 Hive 支持 Zookeper 连接
4.1、点击 Hive ,进入Hive后点击配置,在配置里搜索hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)
4.2、在配置中添加如下内容,添加完成后点击保存修改
hive.server2.support.dynamic.service.discovery
true
hive.server2.zookeeper.namespace
hiveserver2
hive.zookeeper.quorum
dtb-tc-app7:2181,dtb-tc-app8:2181,dtb-tc-app9:2181
hive.zookeeper.client.port
2181
4.3、若报如下错误,则需要修改一下 CM 元数据库字符集编码
报错信息:cloudera manager修改配置数值时报错Incorrect string value:’\xE5\x87\xBA\xE7\B0…'for column ‘MESSAGE’ at row1
报错原因:CM元数据库 字符集不兼容 字段 VALUE MESSAGE 无法写入对应的值。
解决办法:修改元数据库
4.4、修改CM元数据库字符集编码
4.4.1、登录数据库
[root@dtb-tc-app13 ~]
4.4.2、选择scm数据库
use scm;
4.4.3、更改字符集编码
alter table CONFIGS modify `VALUE` longtext character set utf8 collate utf8_general_ci;
alter table CONFIGS_AUD modify `VALUE` longtext character set utf8 collate utf8_general_ci;
alter table GLOBAL_SETTINGS modify `VALUE` longtext character set utf8 collate utf8_general_ci;
alter table USER_SETTINGS modify `VALUE` longtext character set utf8 collate utf8_general_ci;
alter table AUDITS modify `MESSAGE` longtext character set utf8 collate utf8_general_ci;
alter table REVISIONS modify `MESSAGE` longtext character set utf8 collate utf8_general_ci;
4.5、修改字符集编码后,再次到WEB管理端保存更改,即可看到配置更改已成功保存 的提示
4.6、修改完配置后重启一下Hive
5、解决hive中文乱码问题
注意:Hive安装完成之后,Hive会出现中文乱码问题
登录MySQL选择 hive 数据库后修改字符集编码即可,SQL语句如下:
use hive;
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table DBS modify column `DESC` varchar(4000) character set utf8;
6、CDH的目录结构
[root@dtb-tc-app11 ~]
四、测试MapReduce程序
1、在/ 目录下创建data 目录,用来存放测试文件
[root@dtb-tc-app11 ~]
2、在/data/ 目录下创建一个word.txt 文件,并加入如下内容
[root@dtb-tc-app11 ~]
hello hadoop yarn hdfs hbase hive
hello hadoop yarn hdfs hbase
hello hadoop yarn hdfs
hello hadoop yarn
hello hadoop
hello
3、在 HDFS 上创建/wordcount/input 目录,并上面的word.txt 文件上传至其中
注意:
- 使用CDH安装组件时,会创建对应的用户(例如:安装HDFS会创建hdfs用户、安装Hive会创建hive用户)
- 在启动这些组件时,都是使用
对应的用户 去启动的 - 所以要对这些组件进行操作时,要指定组件对应的用户(例如:sudo -u hdfs hadoop fs -ls /)
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
4、执行wordcount 程序
[root@dtb-tc-app11 ~]
5、查看wordcount 程序的执行结果
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
五、启用Sentry
1、在MySQL中创建Sentry用户及数据库
CREATE USER 'sentry'@'%' IDENTIFIED BY 'sentry@2021';
GRANT ALL ON *.* TO 'sentry'@'%';
CREATE DATABASE sentry;
flush privileges;
2、在CM上添加Sentry服务
注意:若报找不到MySQL驱动的错误,则需将MySQL的驱动包拷贝到/opt/cloudera/parcels/CDH/lib/sentry/lib/ 目录下
3、Sentry与Hive的集成配置
3.1、修改sentry-site.xml 配置文件,添加如下内容
sentry.hive.testing.mode
true
3.2、启用Sentry服务
3.3、关闭Hive的用户模拟功能
搜索Hive Impersonation,然后取消勾选
3.4、重启重新部署客户端配置
六、Kerberos安装
1、server节点(dtb-tc-app11 )安装Kerberos相关软件
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
2、client节点(dtb-tc-app12和dtb-tc-app13 )安装Kerberos
[root@dtb-tc-app12 ~]
[root@dtb-tc-app12 ~]
3、修改配置文件(dtb-tc-app11 )
3.1、kdc 文件配置
[root@dtb-tc-app11 ~]
修改前: 修改后:
3.2、kadm5 配置文件(给admin实例的所有主体授权)
[root@dtb-tc-app11 ~]
说明:
- 前面的
* :全部主体 admin :admin实例DTB.COM :领域- 后面的
* :全部权限
3.3、krb5 文件配置
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
4、创建 Kerberos 数据库
[root@dtb-tc-app11 ~]
5、创建管理员账号
[root@dtb-tc-app11 ~]
kadmin.local: addprinc admin/admin@DTB.COM
kadmin.local: exit
6、启动krb5kdc 和kadmin 服务,并设置开机自启
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
[root@dtb-tc-app11 ~]
7、CDH集群启用Kerberos
7.1、添加管理员账号
[root@dtb-tc-app11 ~]
kadmin.local: addprinc cloudera-scm/admin@DTB.COM
kadmin.local: exit
7.2、CM节点启用Kerberos
等待启用Kerberos
7.3、查看主体
[root@dtb-tc-app11 ~]
8、修改Sentry的配置
8.1、在允许的连接用户中添加admin
8.2、在管理员组中添加admin
8.3、修改sentry-site.xml 的配置文件
搜索sentry-site.xml 的 Sentry 服务高级配置 ,点击以XML格式查看 添加如下内容
<property><name>sentry.service.processor.factories</name><value>org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessorFactory,org.apache.sentry.hdfs.SentryHDFSServiceProcessorFactory</value></property><property><name>sentry.policy.store.plugins</name><value>org.apache.sentry.hdfs.SentryPlugin</value></property><property><name>sentry.hdfs.integeration.path.prefixes</name><value>/user/hive/warehouse</value></property>
9、修改HDFS的配置
9.1、开启安全身份验证
9.2、开启安全授权
9.3、修改Hadoop用户组映射实现
9.4、启用访问控制列表
9.5、启用Sentry同步
10、修改Yarn配置
10.1、检查允许的系统用户是否有hive用户
10.2、修改最小用户ID
10.2、检查是否已启用RM ACL
11、修改Hive配置
11.1、检查是否已启用Sentry服务
11.2、检查HiveServer2模拟是否已经关闭
11.3、检查Hive 仓库子目录继承权限 启用
11.4、设置sentry.hive.testing.mode 为false
12、修改Kafka的配置
12.1、设置Kafka安全身份验证
搜索kerberos.auth.enable ,然后勾选
12.2、设置Kafka认证方式
搜索security.inter.broker.protocol ,然后选择SASL_PLAINTEXT
12.3、配置kafka.properties
搜索kafka.properties 的 Kafka Broker 高级配置代码段(安全阀) ,然后添加如下内容
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
super.users=User:kafka;User:admin;
12.4、配置 Kafka 支持命令行的kinit操作
12.4.1、创建jaas 文件,并添加如下内容
[root@dtb-tc-app11 ~]
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};
[root@dtb-tc-app11 ~]
12.4.2、修改kafka-run-class.sh 文件
[root@dtb-tc-app11 ~]
在# JVM performance options 配置项的KAFKA_JVM_PERFORMANCE_OPTS 参数中加入如下内容
-Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf
[root@dtb-tc-app11 ~]
12.4.3、创建producer.properties 文件,并添加如下内容
[root@dtb-tc-app11 ~]
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
[root@dtb-tc-app11 ~]
12.4.3、创建consumer.properties 文件,并添加如下内容
[root@dtb-tc-app11 ~]
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
[root@dtb-tc-app11 ~]
12.5、设置 ZooKeeper Root 为/kafka
12.6、取消Sentry服务
修改好配置之后,保存更改并重启Kafka 以上为CDH6.2.0集群搭建,并开启Kerberos与Sentry详细教程!
|