整理笔记时简单汇总了有关日常运维配置CDH集群相关的内容,比较杂乱而且许多地方本应该有截图,但由于在七牛的图床废弃了,导致只能用文字说明。权当总结记录备忘吧。
CDH集群集成LDAP服务
使用的是OpenLDAP,OpenLDAP的安装配置详见:OpenLDAP
Hive集成OpenLDAP
- Hive -> 配置 -> 搜索框输入”LDAP”
- 勾选启用 LDAP 身份验证 Hive(服务范围)
- 修改配置:
| 名称 | 值 | 
|---|---|
| LDAP URL hive.server2.authentication.ldap.url | ldap://hadoop222 | 
| LDAP BaseDN hive.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 URL ldap_uri | ldap://hadoop222 | 
| LDAP BaseDN ldap_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 URL ldap_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
 6- DB 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
 3- mysql> 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"