目录
  1. 1. CDH集群集成LDAP服务
    1. 1.1. Hive集成OpenLDAP
      1. 1.1.1. 验证Hive OpenLDAP
    2. 1.2. Impala集成OpenLDAP
      1. 1.2.1. 验证Impala OpenLDAP
    3. 1.3. HUE集成OpenLDAP
    4. 1.4. 配置LDAP组映射
  2. 2. CDH配置Sentry
    1. 2.1. Sentry准备工作
      1. 2.1.1. 设置Hive warehouse目录权限
      2. 2.1.2. 禁止HiveServer2 启用模拟
      3. 2.1.3. 允许Hive用户提交YARN任务
      4. 2.1.4. 禁止Hive命令行用户访问Hive metastore
    2. 2.2. Hive配置Sentry
      1. 2.2.1. Hive 授权
    3. 2.3. Impala配置Sentry
    4. 2.4. HUE配置Sentry
    5. 2.5. 将Hive、Impala和HUE组加入到Sentry管理员组
  3. 3. HUE配置MySQL数据库
    1. 3.1. 创建HUE数据库
    2. 3.2. HUE连接MySQL
  4. 4. 启用HDFS High Availability
    1. 4.1. 配置HDFS High Availability
    2. 4.2. 更新Hive Metastore NameNode Nameservice名称
    3. 4.3. 启用HUE High Availability
      1. 4.3.1. 添加HttpFS角色
      2. 4.3.2. 配置HUE High Availability
  5. 5. 启用YARN High Availability
  6. 6. 启用HBase High Availability
  7. 7. 启用Hive High Availability
    1. 7.1. 启用Hive Metastore High Availability
    2. 7.2. 启用HiveServer2 Load Balance & High Availability

整理笔记时简单汇总了有关日常运维配置CDH集群相关的内容,比较杂乱而且许多地方本应该有截图,但由于在七牛的图床废弃了,导致只能用文字说明。权当总结记录备忘吧。

CDH集群集成LDAP服务

使用的是OpenLDAP,OpenLDAP的安装配置详见:OpenLDAP

Hive集成OpenLDAP

  1. Hive -> 配置 -> 搜索框输入”LDAP”
  2. 勾选启用 LDAP 身份验证 Hive(服务范围)
  3. 修改配置:
名称
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
2
3
4
# 原生Hive
beeline -u "jdbc:hive2://hadoop222:10000" -n <user_name> -p <user_password> -d org.apache.hive.jdbc.HiveDriver
# Hive结合ZooKeeper
beeline -u "jdbc:hive2://hadoop222:2181,hadoop223:2181,hadoop224:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2" -n <user_name> -p <user_password>

Impala集成OpenLDAP

  1. Impala -> 配置 -> 搜索框输入”LDAP”
  2. 勾选启用 LDAP 身份验证 Impala(服务范围)(enable_ldap_auth)
  3. 修改配置:
名称
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

  1. 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组方便管理。

  1. 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 启用模拟

  1. Hive -> 配置 -> 范围 -> HiveServer2 -> 类别 -> 主要 -> 取消HiveServer2 启用模拟(hive.server2.enable.impersonation, hive.server2.enable.doAs)

允许Hive用户提交YARN任务

  1. YARN -> 配置 -> 范围 -> NodeManager -> 类别 -> 安全性 -> 允许的系统用户(allowed.system.users) -> 添加hiveimpala用户等用户

禁止Hive命令行用户访问Hive metastore

  1. Hive -> 配置 -> Hive Metastore 访问控制和代理用户组覆盖(hadoop.proxyuser.hive.groups) -> 添加hivehue用户(允许hive/hue用户访问hive metastore,若使用sqoop,确保sqoop用户也添加)
  2. Hive/Impala -> 使用政策文件启用 Sentry 授权(hive.sentry.enabled/impala.sentry.enabled)没有勾选

Hive配置Sentry

  1. Hive -> 配置 -> 范围 -> Hive(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
  2. 由于Hive要求使用SSL安全传输,暂时没有配置,需要将sentry.hive.testing.mode设置为true
    • Hive -> 配置 -> sentry-site.xml 的 Hive 服务高级配置代码段(安全阀)
      • sentry.hive.testing.mode
      • true
  3. 重启Hive

Hive 授权

Hive在配置了Sentry、OpenLDAP和HDFS LDAP组映射环境下的授权操作

  1. 创建OpenLDAP用户
  2. Hive用户授权
    1
    2
    3
    create 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

  1. 需要先执行Hive配置Sentry
  2. Impala -> 配置 -> 范围 -> Impala(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
  3. 由于Hive要求使用SSL安全传输,暂时没有配置,需要将sentry.hive.testing.mode设置为true
    • Hive -> 配置 -> sentry-site.xml 的 Impala 服务高级配置代码段(安全阀)
      • sentry.hive.testing.mode
      • true
  4. 重启Impala

HUE配置Sentry

  1. 需要先执行Hive & Impala配置Sentry
  2. HUE -> 配置 -> 范围 -> HUE(服务范围) -> 类别 -> 主要 -> Sentry服务 -> Sentry
  3. 由于Hive要求使用SSL安全传输,暂时没有配置,需要将sentry.hive.testing.mode设置为true
    • HUE -> 配置 -> sentry-site.xml 的 HUE 服务高级配置代码段(安全阀)
      • sentry.hive.testing.mode
      • true
  4. 重启HUE

将Hive、Impala和HUE组加入到Sentry管理员组

  1. Sentry -> 配置 -> 范围 -> Sentry(服务范围) -> 类别 -> 主要 -> 管理员组(sentry.service.admin.group) -> 添加hiveimpalahue

HUE配置MySQL数据库

HUE默认使用Sqlite3作为存储/var/lib/hue/desktop.db
如果不需要Sqlite3里面的数据,就不需要进行migration迁移数据,直接创建HUE数据库并指定MySQL做存储,重启即可。
若有多个HUE Server,注意多个HUE Server都需要能登录MySQL。

创建HUE数据库

在配置前需要在MySQL中手动创建HUE数据库。

1
2
3
mysql> 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不需要做)。

  1. 停止HUE服务
    在Cloudera Manager中将HUE服务停止
  2. 导出现有数据(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"
      }
      }
  3. 连接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>
  4. 同步数据(migration only)

    • HUE -> 操作 -> 同步数据库 / (HUE -> Actions -> Synchronize Database)
    • 同步数据库 / (Synchronize Database)
  5. 导入旧数据(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
      2
      mysql> use hue;
      mysql> ALTER TABLE hue.auth_permission ADD FOREIGN KEY (content_type_id REFERENCES django_content_type (id;
  6. 启动HUE

启用HDFS High Availability

配置HDFS High Availability

启用HDFS HA,就是不使用存在单点故障的旧版NameNodeSecondary NameNode,采用新的两个NameNode(active NameNodestandby NameNode)的高可用架构。配置前确保部署了ZooKeeper。
CDH 5的HDFS HA是使用Quorum-based storage实现的,也即是需要使用到JournalNode
Cloudera Manager中执行以下操作:

  1. HDFS -> 操作 -> 启用High Availability
  2. 设置nameservice名称,默认为nameservice1
  3. 添加一个新NameNode(standby namenode)、添加JournalNode(至少3个以上奇数个JournalNode)
  4. 启用HDFS High Availability

更新Hive Metastore NameNode Nameservice名称

  1. 停止Hive。Hive -> 操作 -> 停止 (若有HUE或Impala,先停止HUE或Impala再停Hive)
  2. 保险起见可先使用mysqldump备份Hive metastore数据库
  3. Hive -> 操作 -> 更新Hive Metastore NameNodes
  4. 启动Hive。Hive -> 操作 -> 启动 (若有HUE或Impala则启动)

启用HUE High Availability

启用HDFS HA后,HUE也可启用HA。

添加HttpFS角色

  1. HDFS -> 实例 -> 操作 -> 添加角色实例 -> 选择HttpFS主机并添加角色
  2. HDFS -> 实例 -> 启动HttpFS

配置HUE High Availability

  1. HUE -> 配置 -> HDFS Web 界面角色 -> 选择HttpFS
  2. 重启HUE

启用YARN High Availability

YARN HA其实就是对ResourceManager做HA,增加一个standby ResourceManager。

  1. YARN -> 操作 -> 启用High Availability
  2. 选择一台主机作为standby ResourceManager。Cloudera Manager会执行停止YARN、添加standby ResourceManager、在ZooKeeper中初始化ResourceManager HA状态、重启YARN等一系列动作。

启用HBase High Availability

HBase HA直接添加一个backup Master即可,当active Master宕掉后,backup Master会接替其工作。

  1. HBase -> 添加角色实例 -> Master

启用Hive High Availability

Sentry1.8.0以下版本,如果开启了HDFS的Sentry同步则Hive Metastore HA不可用。

启用Hive Metastore High Availability

  1. Hive -> 配置 -> 范围 -> Hive Metastore Server -> 类别 -> 高级
  2. Hive Metastore 代理令牌存储 -> org.apache.hadoop.hive.thrift.DBTokenStore
  3. Hive -> 实例 -> 操作 -> 添加角色实例
  4. 添加Hive Metastore Server,使得Hive Metastore Server机器数目至少3台。
  5. Hive -> 实例。启动新增的Hive Metastore Server角色。
  6. 重启Hive服务。(确保所有Hive Metastore Server的服务器都能登录到MySQL)、(Hive Metastore Server需要连接MySQL,会出现红色抑制异常,等待一段时间恢复绿色正常)。

启用HiveServer2 Load Balance & High Availability

为确保HiveServer2的高可用,Hive结合ZooKeeper提供动态服务发现功能。启用后client(beeline)不直接连接HiveServer2,而是直接连接ZooKeeper然后随机选择一个注册到ZooKeeper中的HiveServer2实例。

  1. Hive -> 操作 -> 添加角色实例 -> HiveServer2
  2. 新增HiveServer2实例,保证HiveServer2机器数目至少3
  3. 启动新增的HiveServer2实例
  4. Hive -> 配置 -> 类别 -> 高级 -> hive-site.xml 的 HiveServer2 高级配置代码段(安全阀)
    • 名称: hive.server2.support.dynamic.service.discovery
    • 值: true
    • 名称: hive.zookeeper.quorum
    • 值: hadoop222:2181,hadoop223:2181,hadoop224:2181
  5. 重启Hive

beeline测试使用ZooKeeper连接Hive

1
beeline -u "jdbc:hive2://hadoop222:2181,hadoop223:2181,hadoop224:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"

Powered: Hexo, Theme: Nadya remastered from NadyMain