整理笔记时简单汇总了有关日常运维配置CDH集群相关的内容,比较杂乱而且许多地方本应该有截图,但由于在七牛的图床废弃了,导致只能用文字说明。权当总结记录备忘吧。
CDH集群集成LDAP服务
使用的是OpenLDAP,OpenLDAP的安装配置详见:OpenLDAP
Hive集成OpenLDAP
- Hive -> 配置 -> 搜索框输入”LDAP”
- 勾选启用 LDAP 身份验证 Hive(服务范围)
- 修改配置:
名称 | 值 |
---|---|
LDAP URLhive.server2.authentication.ldap.url |
ldap://hadoop222 |
LDAP BaseDNhive.server2.authentication.ldap.baseDN |
ou=users,dc=your_domain,dc=com |
验证Hive OpenLDAP
1 | # 原生Hive |
Impala集成OpenLDAP
- Impala -> 配置 -> 搜索框输入”LDAP”
- 勾选启用 LDAP 身份验证 Impala(服务范围)(
enable_ldap_auth
) - 修改配置:
名称 | 值 |
---|---|
LDAP URLldap_uri |
ldap://hadoop222 |
LDAP BaseDNldap_baseDN |
ou=users,dc=your_domain,dc=com |
Impala 命令行参数高级配置代码段(安全阀) | --ldap_passwords_in_clear_ok |
因为使用的是ldap
而非ldaps
,所以需要配置--ldap_passwords_in_clear_ok
。
验证Impala OpenLDAP
1 | impala-shell -l -u <user_name> --auth_creds_ok_in_clear |
HUE集成OpenLDAP
- HUE -> 配置 -> 搜索框输入”LDAP”
名称 | 值 |
---|---|
身份验证后端backend |
desktop.auth.backend.LdapBackend |
LDAP URLldap_uri |
ldap://hadoop222 |
LDAP 用户名模式ldap_username_pattern |
uid=<username>,ou=users,dc=your_domain,dc=com |
hue_safety_valve.ini 的 Hue 服务高级配置代码段(安全阀) | [impala] server_host=hadoop222 server_interface=hiveserver2 server_port=21050 query_timeout_s=100 impersonation_enabled=True auth_username=hue auth_password= <hue_password> [beeswax] close_queries=True use_sasl=False auth_username=hue auth_password= <hue_password> |
Hue登录时,需要使用一个预设的用户名和密码去连接hive/impala,连接成功之后,当真正执行SQL的时候,还使用登录时的账号来做鉴权,所以需要设置hue_safety_valve.ini
配置LDAP组映射
HDFS默认是基于系统用户组进行管理,若新增一个组需要在所有集群节点机器上创建用户组,管理起来非常繁琐。配置LDAP组映射,让HDFS使用LDAP组方便管理。
- HDFS -> 配置 -> 范围 -> HDFS(服务范围) -> 类别 -> 安全性 -> 搜索框输入”LDAP”
名称 | 值 |
---|---|
Hadoop 用户组映射实现 ( hadoop.security.group.mapping ) |
org.apache.hadoop.security.LdapGroupsMapping |
Hadoop 用户组 进程ping LDAP URL ( hadoop.security.group.mapping.ldap.url ) |
ldap://hadoop222 |
Hadoop 用户组映射 LDAP 绑定用户可分辨名称 ( hadoop.security.group.mapping.ldap.bind.user ) |
cn=admin,dc=your_domain,dc=com |
Hadoop 用户组 进程ping LDAP 绑定用户密码 ( hadoop.security.group.mapping.ldap.bind.password ) |
<admin_password> |
Hadoop 用户组 进程ping 搜索基础 ( hadoop.security.group.mapping.ldap.base ) |
dc=your_domain,dc=com |
Hadoop 用户组 进程ping LDAP 用户搜索筛选器 ( hadoop.security.group.mapping.ldap.search.filter.user ) |
(&(objectClass=inetOrgPerson)(uid={0})) |
Hadoop 用户组 进程ping LDAP 组搜索筛选器 ( hadoop.security.group.mapping.ldap.search.filter.group ) |
(objectClass=groupOfNames) |
Hadoop 用户组 进程ping LDAP 组成员身份属性 ( hadoop.security.group.mapping.ldap.search.attr.member ) |
member |
Hadoop 用户组 进程ping LDAP 组名称属性 ( hadoop.security.group.mapping.ldap.search.attr.group.name ) |
cn |
CDH配置Sentry
Sentry准备工作
设置Hive warehouse目录权限
如果HDFS没有开启Sentry同步服务,则需要执行以下准备工作,否则跳过。Hive warehouse默认设置为/user/hive/warehouse
(hive-site.xml
/hive.metastore.warehouse.dir
)1
2
3
4# 如果开启了Kerberos则需要执行kinit
# sudo -u hdfs kinit -kt <hdfs.keytab> hdfs
sudo -u hdfs hdfs dfs -chmod -R 771 /user/hive/warehouse
sudo -u hdfs hdfs dfs -chown -R hive:hive /user/hive/warehouse
禁止HiveServer2 启用模拟
- Hive -> 配置 -> 范围 -> HiveServer2 -> 类别 -> 主要 -> 取消HiveServer2 启用模拟(
hive.server2.enable.impersonation, hive.server2.enable.doAs
)
允许Hive用户提交YARN任务
- YARN -> 配置 -> 范围 -> NodeManager -> 类别 -> 安全性 -> 允许的系统用户(
allowed.system.users
) -> 添加hive
、impala
用户等用户
禁止Hive命令行用户访问Hive metastore
- Hive -> 配置 -> Hive Metastore 访问控制和代理用户组覆盖(
hadoop.proxyuser.hive.groups
) -> 添加hive
、hue
用户(允许hive
/hue
用户访问hive metastore,若使用sqoop,确保sqoop
用户也添加) - Hive/Impala -> 使用政策文件启用 Sentry 授权(
hive.sentry.enabled
/impala.sentry.enabled
)没有勾选
Hive配置Sentry
- Hive -> 配置 -> 范围 -> Hive(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
- 由于Hive要求使用SSL安全传输,暂时没有配置,需要将
sentry.hive.testing.mode
设置为true
- Hive -> 配置 -> sentry-site.xml 的 Hive 服务高级配置代码段(安全阀)
- sentry.hive.testing.mode
- true
- Hive -> 配置 -> sentry-site.xml 的 Hive 服务高级配置代码段(安全阀)
- 重启Hive
Hive 授权
Hive在配置了Sentry、OpenLDAP和HDFS LDAP组映射环境下的授权操作
- 创建OpenLDAP用户
- Hive用户授权
1
2
3create role <ldap_user_name>;
grant role <ldap_user_name> to group <ldap_user_name>;
grant [all|alert|update|create|drop|index|lock|select|show_database] on database <db_name> to role <ldap_user_name>;
Impala配置Sentry
- 需要先执行Hive配置Sentry
- Impala -> 配置 -> 范围 -> Impala(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
- 由于Hive要求使用SSL安全传输,暂时没有配置,需要将
sentry.hive.testing.mode
设置为true
- Hive -> 配置 -> sentry-site.xml 的 Impala 服务高级配置代码段(安全阀)
- sentry.hive.testing.mode
- true
- Hive -> 配置 -> sentry-site.xml 的 Impala 服务高级配置代码段(安全阀)
- 重启Impala
HUE配置Sentry
- 需要先执行Hive & Impala配置Sentry
- HUE -> 配置 -> 范围 -> HUE(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
- 由于Hive要求使用SSL安全传输,暂时没有配置,需要将
sentry.hive.testing.mode
设置为true
- HUE -> 配置 -> sentry-site.xml 的 HUE 服务高级配置代码段(安全阀)
- sentry.hive.testing.mode
- true
- HUE -> 配置 -> sentry-site.xml 的 HUE 服务高级配置代码段(安全阀)
- 重启HUE
将Hive、Impala和HUE组加入到Sentry管理员组
- Sentry -> 配置 -> 范围 -> Sentry(服务范围) -> 类别 -> 主要 -> 管理员组(
sentry.service.admin.group
) -> 添加hive
、impala
和hue
组
HUE配置MySQL数据库
HUE默认使用Sqlite3作为存储/var/lib/hue/desktop.db
。
如果不需要Sqlite3里面的数据,就不需要进行migration
迁移数据,直接创建HUE数据库并指定MySQL做存储,重启即可。
若有多个HUE Server,注意多个HUE Server都需要能登录MySQL。
创建HUE数据库
在配置前需要在MySQL中手动创建HUE数据库。1
2
3mysql> CREATE DATABASE hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
mysql> GRANT all on hue.* to 'hue'@'%' identified by 'huepassword';
mysql> GRANT all on hue.* to 'hue'@'localhost' identified by 'huepassword';
HUE连接MySQL
如果还需要Sqlite3的数据则需要migration
(以下带有migration only
字样),否则就不需要(2/4/5
不需要做)。
- 停止HUE服务
在Cloudera Manager中将HUE服务停止 导出现有数据(migration only)
- 操作 -> 转储数据库 / (HUE -> Actions -> Dump Database.)
- 转储数据库(Dump Database.),数据会导出到HUE服务器的
/tmp/hue_database_dump.json
中。 - 编辑
/tmp/hue_database_dump.json
,把所有model
中的useradmin.userprofile
相关内容删除1
2
3
4
5
6
7
8
9
10
11{
"pk": 1,
"model": "useradmin.userprofile",
"fields": {
"last_activity": "2016-10-03T10:06:13",
"creation_method": "HUE",
"first_login": false,
"user": 1,
"home_directory": "/user/admin"
}
}
连接MySQL
Cloudera Manager中打开HUE -> 配置 -> 类别-数据库1
2
3
4
5
6DB Hostname = IP
DB Port = 3306
DB Type = MySQL
DB Name = hue
Username = hue
Password = <hue_password>同步数据(migration only)
- HUE -> 操作 -> 同步数据库 / (HUE -> Actions -> Synchronize Database)
- 同步数据库 / (Synchronize Database)
导入旧数据(migration only)
清除外键 & 删除
django_content_type
1
2
3mysql> SHOW CREATE table hue.auth_permission;
mysql> ALTER TABLE hue.auth_permission DROP FOREIGN KEY <content_type_id_refs_id_xxxxxx>;
mysql> DELETE FROM hue.django_content_type;Cloudera Manager中加载json文件
- HUE -> 操作 -> 加载数据库 / (HUE -> Actions -> Load Database)
- 加载数据库 / (Load Database)
- 重新创建外键
1
2mysql> use hue;
mysql> ALTER TABLE hue.auth_permission ADD FOREIGN KEY (content_type_id REFERENCES django_content_type (id;
启动HUE
启用HDFS High Availability
配置HDFS High Availability
启用HDFS HA,就是不使用存在单点故障的旧版NameNode
、Secondary NameNode
,采用新的两个NameNode
(active NameNode
、standby NameNode
)的高可用架构。配置前确保部署了ZooKeeper。
CDH 5的HDFS HA是使用Quorum-based storage实现的,也即是需要使用到JournalNode。
Cloudera Manager中执行以下操作:
- HDFS -> 操作 -> 启用High Availability
- 设置nameservice名称,默认为
nameservice1
- 添加一个新NameNode(standby namenode)、添加JournalNode(至少3个以上奇数个JournalNode)
- 启用HDFS High Availability
更新Hive Metastore NameNode Nameservice名称
- 停止Hive。Hive -> 操作 -> 停止 (若有HUE或Impala,先停止HUE或Impala再停Hive)
- 保险起见可先使用
mysqldump
备份Hive metastore数据库 - Hive -> 操作 -> 更新Hive Metastore NameNodes
- 启动Hive。Hive -> 操作 -> 启动 (若有HUE或Impala则启动)
启用HUE High Availability
启用HDFS HA后,HUE也可启用HA。
添加HttpFS角色
- HDFS -> 实例 -> 操作 -> 添加角色实例 -> 选择HttpFS主机并添加角色
- HDFS -> 实例 -> 启动HttpFS
配置HUE High Availability
- HUE -> 配置 -> HDFS Web 界面角色 -> 选择HttpFS
- 重启HUE
启用YARN High Availability
YARN HA其实就是对ResourceManager做HA,增加一个standby ResourceManager。
- YARN -> 操作 -> 启用High Availability
- 选择一台主机作为standby ResourceManager。Cloudera Manager会执行停止YARN、添加standby ResourceManager、在ZooKeeper中初始化ResourceManager HA状态、重启YARN等一系列动作。
启用HBase High Availability
HBase HA直接添加一个backup Master即可,当active Master宕掉后,backup Master会接替其工作。
- HBase -> 添加角色实例 -> Master
启用Hive High Availability
Sentry1.8.0
以下版本,如果开启了HDFS的Sentry同步则Hive Metastore HA不可用。
启用Hive Metastore High Availability
- Hive -> 配置 -> 范围 -> Hive Metastore Server -> 类别 -> 高级
- Hive Metastore 代理令牌存储 -> org.apache.hadoop.hive.thrift.DBTokenStore
- Hive -> 实例 -> 操作 -> 添加角色实例
- 添加Hive Metastore Server,使得Hive Metastore Server机器数目至少3台。
- Hive -> 实例。启动新增的Hive Metastore Server角色。
- 重启Hive服务。(确保所有Hive Metastore Server的服务器都能登录到MySQL)、(Hive Metastore Server需要连接MySQL,会出现红色抑制异常,等待一段时间恢复绿色正常)。
启用HiveServer2 Load Balance & High Availability
为确保HiveServer2的高可用,Hive结合ZooKeeper提供动态服务发现功能。启用后client(beeline
)不直接连接HiveServer2,而是直接连接ZooKeeper然后随机选择一个注册到ZooKeeper中的HiveServer2实例。
- Hive -> 操作 -> 添加角色实例 -> HiveServer2
- 新增HiveServer2实例,保证HiveServer2机器数目至少3台
- 启动新增的HiveServer2实例
- Hive -> 配置 -> 类别 -> 高级 -> hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)
- 名称: hive.server2.support.dynamic.service.discovery
- 值: true
- 名称: hive.zookeeper.quorum
- 值: hadoop222:2181,hadoop223:2181,hadoop224:2181
- 重启Hive
beeline
测试使用ZooKeeper连接Hive1
beeline -u "jdbc:hive2://hadoop222:2181,hadoop223:2181,hadoop224:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"