0868-7.1.5-如何配置及使用Cloudera Replication Manager

2021-12-07 17:37:22 浏览数 (2)

1.文档编写目的

Cloudera Replication Manager(以下简称为 RM,旧版本的CM中简称为BDR)为数据迁移提供了一个集成式的易用管理解决方案,通过界面化的方式可以非常便捷的定义不同集群之间的数据复制操作 ,本文主要介绍如何配置及使用RM进行HDFS和Hive 复制

  • 测试环境

源集群版本:CDH5.16.2、CM 5.16.2、已启用Kerberos

目标集群版本:CDH7.1.5、CM7.2.4、已启用Kerberos

  • 前置条件

1. 源集群和目标集群节点之间必须网络互通

2. 源集群和目标集群都有企业版 License

3. 源 CDH 集群版本要求分成三种情况:

• 不需要做 Sentry to Ranger acl 迁移 – CDH5.13.0 – CM5.14.0

• 需要做 Sentry to Ranger acl 迁移 – CDH5.13.0 – CM6.3.1

• 需要使用 HDFS snapshot diff 功能 – CDH5.13.3 ,5.14.2 ,5.15.0 – CM5.15.0 ,CM6.1.0

2.RM简介

RM 属于 Cloudera Manager 上的一个功能模块,提供了以下能力:

• Select:用户可以自由选择与业务相关的关键数据进行灾备

• Schedule:创建数据备份的调度策略。由于数据备份通常需要较大的网络带宽,

如果没有良好的调度,将会影响业务系统的运行,需要对于备份的时间,备份的带

宽等加以限制。

• Monitor:通过一个集中的控制台跟踪数据备份任务的进度,以及备份过程中出错

的文件。

• Alert:针对出错的任务,或者异常中断的任务,提供告警机制,以及时让用户感

知。

RM 可以使用定时任务或者其他的调度方式将数据从一个集群复制到另一个集群。复制

数据范围包括存储在 HDFS 中的数据、存储在 Hive 表中的数据、Hive Metastore 数据以

及与在 Hive Metastore 中注册的 Impala 表相关联的 Impala 元数据(Catalog Server 元

数据)。您也可以在 Amazon S3 上复制 HDFS 数据。但是,您仍然需要使用 HBase

shell 来复制 HBase 数据。目前 RM 在 CDP 公有云版本中集成了 HBase 复制,CDP 私

有云 Base 版本后续也会加入。

✓ RM 对于 HDFS,RM 可以直接同步文件或者文件夹。

✓ RM 对于 Hive/Impala,RM 可以直接进行数据库级别或者表级别数据同步,同时能够

支持元数据同步和 Sentry 到 Ranger acl 迁移。

✓ RM 可以基于 HDFS 自动生成的历史快照进行复制。由于快照内的文件处于不可变状

态,因此支持异步复制,即使源端数据出现持续更改也不会产生任何影响。

✓ RM 支持复制 HDFS 静态加密之后的数据。

✓ RM 可以简化安全认证,特别是针对两个集群的 kerberos 域名不一致,或者 TLS 认

证不一致的情况。

3.RM配置

1、在目标CDP7.1.5 集群CM界面>备份>同行中

2、点击添加同行,填写源CDH5.16.2集群的地址和CM页面的管理员用户和密码

如测试连接中出现如下异常,表明两个集群的Kerberos域互相存在问题,建议在部署时考虑使用相同的KDC,用于减少配置互信的工作量

由于测试环境使用的源集群和目标集群使用的不同的KDC系统,因此需要进行集群互信配置,在目标CDP7.1.5集群中 CM页面>管理>设置>搜索DOMAIN NAME ,添加源CDH5.16.2集群的Kerberos域,比如:FAYSON.COM,然后保存重启生效

然后重新测试连接性,注:该步骤只表明源集群和目标集群的CM域互信可以连接,并不代表可以进行数据复制,如两个集群使用的不同的域和KDC服务器,还需如下配置互信

3、集群互信配置(如已配置互信,此步骤可跳过,否则HDFS复制和Hive 复制将时会提示认证失败),配置步骤如下(以下操作均为在目标CDP7.1.5集群上操作):

在CM界面>HDFS>配置>搜索krb5 > 添加受信任的Kerberos 域,如FAYSON.COM

在HDFS 配置中hdfs-site.xml的HDFS 服务高级配置(安全阈)中添加如下配置,该配置用于客户端的匹配规则用于控制允许的认证realms,如果该参数不配置,拷贝源集群数据时会出现无效的凭证异常,* 表示不限制 ,并保存重启生效

代码语言:javascript复制
<property>
<name>dfs.namenode.kerberos.principal.pattern</name>
<value>*</value>
</property>

4、添加互信请求互信凭证

在源CDH5.16.2集群和CDP7.1.5集群中添加互相凭证,为了使跨域信任正常运行,两个KDC必须具有相同的krbtgt 主体和密码,并且两个KDC必须配置为使用相同的加密类型。

CDP.COM 为CDP7.1.5 集群的Kerberos域,FAYSON.COM为CDH5.16.2集群的域。

需要在KDC中设置跨领域信任,请在 kadmin.local 或者 kadmin shell KDC主机上的Shell创建完全相同的krbtgt主体和密码,执行如下语句,并将密码都设置为fayson123

代码语言:javascript复制
addprinc -e "aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal" krbtgt/CDP.COM@FAYSON.COM

添加CDH5.16.2集群 /etc/hosts 解析添加CDH5.16.2集群 /etc/hosts 解析

并修改/etc/krb5.conf 配置复制到集群所有节点,添加如下标红字体配置

代码语言:javascript复制
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
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = CDP.COM
# default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 CDP.COM = {
  kdc = hdwcdpvm01ts
  admin_server = hdwcdpvm01ts
 }

 FAYSON.COM = {
  kdc = hdwdexnn1
  admin_server = hdwdexnn1
  default_domain = FAYSON.COM
 }


[domain_realm]
 .hdwcdpvm01ts = CDP.COM
 hdwcdpvm01ts = CDP.COM
 .hdwdexnn1 = FAYSON.COM
 hdwdexnn1 = FAYSON.COM
 hdwdexnn2 = FAYSON.COM
 hdwdexnn3 = FAYSON.COM

执行互信配置成功后的验证

使用源集群也就是CDH5集群的凭证在CDP7集群中认证,然后执行HDFS命令查看

如CDP.COM 为CDP7.1.5 集群的Kerberos域,FAYSON.COM为CDH5.16.2集群的域

代码语言:javascript复制
#需确认在CDH5.16.2集群中有etl_user的用户凭证,并且有相关权限
kinit etl_user@FAYSON.COM

两个集群都能正常访问表示互相配置成功,

5、添加RM 执行用户

由于RM执行时需要较大的权限,因此建议添加一个专用于执行复制计划的用户,如etl_user,并且添加到supergroup 组。在CDP7.1.5集群中,使用批量脚本添加用户,命令如下

代码语言:javascript复制
sh batch_cmd.sh node.list "useradd etl_user"
sh batch_cmd.sh node.list "id etl_user"
sh batch_cmd.sh node.list "usermod -G supergroup etl_user"
sh batch_cmd.sh node.list "echo fayson@2021|passwd --stdin etl_user"

创建etl_user的HDFS 目录,用户属组为etl_user:supergroup

在Ranger 中授权,HDFS 的权限策略如下,跟hdfs 用户权限一致

Hive 中权限策略如下:注:hdfs与etl_user两用户都需要有all - database, table, column的权限,否则Hive 的复制计划执行到hive metastore 检查这一步将报错。

源集群中也需要添加etl_user,并且通过sentry给etl_user所有Hive表的权限,etl_user为我们执行Hive 复制计划中所使用的用户,所以在目标和源集群中都需要有对应的权限

4.HDFS、Hive 复制

1、HDFS复制验证

配置HDFS 的复制计划,在CM界面>备份>复制计划 中点创建计划

计划中可以选择时间周期,本次测试设置为手动执行1次,可选择间隔周期

保存计划后点击运行

在CM 的YARN 应用程序中可以看到生成了一个MR作业,如官网解释其本质是一个distcp 作业,完成后的CDP集群

2、Hive复制验证

首先在CDP中将Hive 中的外部表的默认路径修改为/user/hive/warehouse,这也是官网建议的做法,这样原有 C5 应用代码可以做到无感知运行。

如果希望将相同的数据库从 Hive1 复制到 Hive3(设计上使用不同的 Hive 仓库 目录),则需要针对每个策略使用“强制覆盖”选项,以避免出现不匹配问题。

在C5集群中创建一个测试库和表bdrdb.bdrtest

插入一条测试数据验证

创建复制计划,目标路径不填默认为Hive 中指定的外部表路径,hive.metastore.warehouse.external.dir ,建议修改为/user/hive/warehouse与CDH的内部表路径保持一致。

在资源中可选择运行的资源池以及带宽和MAP数量

在高级配置中可配置部分参数由于更快的运行,详细可参考官网文档

建议启用快照

点运行查看日志

原表中增加一条数据,进行增量更新验证

再次执行同一个复制计划

在CDP集群中查看,发现增量数据已更新

添加两个空表,并在追加两条数据做全库增量更新验证

支持正则表达式匹配

例如:[w]. 表示匹配任何对象

(?!mynameb). 表示匹配除了 myname 以外的对象

db1|db2 表示匹配 db1 或者 db2

查看验证已全部同步

5.异常处理

1、kinit 认证成功,但是访问源集群HDFS失败的问题。由于FAYSON在配置/etc/hosts 的时候hostsname 使用的是非FQDN格式,导致在只添加了源集群KDC 主机在/etc/krb5.conf 中,并且kdc的主机与NameNode是不同的机器,解决的方式是将NameNode 的域配置添加到/etc/krb5.conf 中,如下图所示的hdwdexnn2 = FAYSON.COM,hdwdexnn3 = FAYSON.COM

异常如下:

2、Hive 复制出现Database 和Table not found 问题

在目标集群上 CM > HDFS > Configuration > HDFS Client Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml 添加下面的参数,并重启生效:

代码语言:javascript复制
<property>
<name>replication.hive.ignoreDatabaseNotFound</name>
<value>true</value>
</property>
<property>
<name>replication.hive.ignoreTableNotFound</name>
<value>true</value>
</property>

6.结尾

Replication Manager是Cloudera Manager提供的一个集成的、易于使用的管理解决方案,用于在Hadoop平台上实现数据保护。Replication Manager使您可以跨数据中心复制数据以进行灾难恢复方案。复制可以包括存储在HDFS中的数据,存储在Hive表中的数据,Hive Metastore数据以及与在Hive Metastore中注册的Impala表关联的Impala元数据(目录服务器元数据)。当关键数据存储在HDFS上时,Cloudera Manager可以帮助确保即使在数据中心完全关闭的情况下,数据也始终可用。

0 人点赞