这是CDH/HDP/Apache Hadoop迁移到CDP系列的第二篇博客,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》。
您可以使用 authzmigrator 工具将 Hive 对象和 URL 权限以及 Kafka 权限从 CDH 集群迁移到 CDP 私有云基础 集群。您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。
1. 使用 authzmigrator 工具手动迁移权限
要将 Hive对象和 URL 权限以及Kafka 权限从 CDH 迁移到CDP 私有云基地,您可以使用authzmigrator 工具。该工具将CDH集群中的Hive/Impala和Kafka RBAC Sentry权限导出为JSON文件,然后在CDP私有云Base 7集群中将其转换并摄取到Ranger中。您必须手动将 Solr 权限从 CDH 集群迁移到CDP Private Cloud Base 7集群。
您可以使用以下方法之一将CDH集群升级为CDP集群,并将CDH中的Sentry权限迁移到CDP中的Ranger:
· 升级向导 - 您导出 CDH 集群中的权限,并在就地升级完成后,将权限导入Ranger。
· 并行迁移(side-car迁移)- 您带来了第二个环境,即 CDP 环境。然后将所有数据和元数据移动到这个新环境。您可以使用authzmigrator 工具将 Hive对象和 URL 权限以及 Kafka 权限迁移到Ranger,或者在复制管理器中运行 Hive复制策略将 Hive 对象和 URL 权限迁移到Ranger。
1.1. Authzmigrator工具
使用authzmigrator工具迁移Hive对象和URL权限以及Kafka权限,必须将Sentry服务器中的权限导出到源集群(例如CDH集群)上的文件中,然后将文件摄取到目标集群上的Ranger服务中(例如,CDP 集群)。
1.2. 从 Sentry 服务器导出权限
使用authzmigrator 工具将源集群上的 Sentry 服务器的 Sentry 权限导出到文件中。
在并行迁移(side-car migration)过程中,您可以使用authzmigrator工具将Hive对象和URL权限以及Kafka权限迁移到Ranger。
1. 下载authz_export.tar.gz文件并解压。有关下载文件的信息,请联系Cloudera 支持。
该authz_export.tar.gz文件包含一个名为jar文件和目录的配置。它还有一个 authz_export.sh文件。该配置 目录包含可用于参考的默认配置。
2. 更换sentry-site.xml的和core-site.xml的配置 从源集群中的sentry服务器上的sentry目录中的配置文件的目录。
例如,源集群上的 Sentry 目录位于 /var/run/cloudera-scm-agent/process/<sentry-service>/ 位置。
3. 编辑sentry-site.xml文件以执行以下步骤:
a. 使用以下凭据更新Sentry 数据库的数据库用户名和密码:
//
sentry.store.jdbc.user sentry.store.jdbc.password
b. 删除 文件中的 hadoop.security.credential.provider.path属性。
4. 编辑core-site.xml文件以执行以下步骤:
a. 将属性fs.defaultFS的值更新 为file:///。
b. 删除 文件中的 hadoop.security.credential.provider.path属性。
5. 在config目录下的authorization-migration-site.xml文件中 ,执行以下步骤:
a. 确保 authorization.migration.export.target_services 属性具有要为其导出权限的服务列表。
有效值包括:HIVE KAFKA
b. 将authorization.migration.export.output_file 属性中的信息更新为 应导出权限的文件的绝对位置。
6. 验证 Sentry 服务器的 Java 执行路径和authz_export.sh脚本中的 JAVA_HOME 属性是否匹配。要验证路径和属性,请执行以下任务:
a. 要定位Sentry 服务器使用的 Java 执行路径,请运行 ps aux | grep org.apache.sentry.SentryMain 命令。
b. 如果路径不是/user/java/default/bin/java,请编辑authz_export.sh脚本,将Sentry 服务器使用的路径添加到JAVA_HOME属性,然后保存文件。
例如,如果 Sentry 服务器使用 /usr/java/jdk1.8.0_141-cloudera/bin/java路径,请将authz_export.sh脚本中的JAVA_HOME属性 更改为 /usr/java/jdk1.8.0_141-cloudera。
7. 使用sh authz_export.sh命令运行authz_export.sh脚本。
权限导出到/opt/backup/permissions.json 文件。您后续可以将权限摄取到 Ranger 中。
1.3. 将权限摄取到 Ranger
运行authzmigrator 工具导出源集群上的权限后,将它们摄取到目标集群上的 Ranger 服务中。
要获取/opt/backup/permissions.json文件中的权限 ,请执行以下步骤:
1. 在目标集群中,将/opt/backup/permissions.json文件复制 到 /user/sentry/export-permissions/permissions.json HDFS 位置。
2. 确保用户ranger对文件具有读写权限。要设置ranger用户的读写权限 ,请运行以下命令:
hdfs dfs -setfacl -m -R user:ranger:rwx /user/sentry/export-permissions/permissions.json
3. 登录到 Cloudera Manager。
4. 在 Ranger 服务中,单击操作>导入 Sentry 权限。
Ranger服务获取 user/sentry/export-permissions/permissions.json 文件中的权限。
2. 使用 DistCp 将 HDFS 数据从 HDP 集群迁移到CDP 私有云基础集群
您可以使用Hadoop DistCp 工具将存储在 HDFS 中的数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。
在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:
· HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅 创建 HDFS 超级用户。
· 名为hdfs 的用户- 默认情况下,不允许hdfs用户运行 YARN作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。
2.1. 使用 DistCp 将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群
在运行DistCp 以将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群之前,您必须允许hdfs用户在没有 HDFS超级用户帐户的情况下在 HDP 集群上运行 YARN作业。您还必须确保在复制期间跳过领域名称,并且只有指定的用户才能访问 HDP 集群。
执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群:
2.1.1. 启用hdfs用户在 HDP 集群上运行YARN 作业
您必须进行配置更改才能使hdfs用户能够在 HDP 集群上运行 YARN作业。
在 HDP 集群中,在Ambari 主机上执行以下步骤:
1. 打开以下文件:
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
2. 从禁止用户列表中删除hdfs条目并保存文件。
示例文件内容:
yarn.nodemanager.local-dirs={{nm_local_dirs}} yarn.nodemanager.log-dirs={{nm_log_dirs}} yarn.nodemanager.linux-container-executor.group={{yarn_executor_container_group}} banned.users=yarn,hdfs,mapred,bin min.user.id={{min_user_id}}
3. 在YARN配置页面,验证container-executor配置模板是否 在banned.users列表中包含 hdfs。
4. 如果hdfs列在banner.users列表中,请将其从模板中删除并保存模板。
5. 重启以下服务:
o 陈旧的服务,如果有的话。
o Ambari服务器
o 集群的每个主机上的 Ambari 代理。
6. 在yarn.admin.acl文件中,添加hdfs。
7. 在etc/hadoop/capacity-scheduler.xml文件搜索文件中,将hdfs附加到 yarn.scheduler.capacity.root.acl_submit_applications 属性。
8. 重新启动 YARN 服务。
9. 使用hdfs用户的keytab文件运行kinit命令以向密钥分发中心(KDC)验证hdfs用户。
在CDP 私有云基础集群上进行必要的配置更改。
2.1.2. CDP 私有云基础集群上的配置更改
在复制期间,必须跳过领域名称,并且只有指定的用户才能访问 HDP 集群。
1. 在CDP Private Cloud Base集群上,管理员必须 根据 HDFS Kerberos Principal名称更新hadoop.security.auth_to_local配置属性。
例如,如果 HDFS Kerberos Principal名称是 HDP集群上的hdfs@EXAMPLE.COM,则管理员必须将hadoop.security.auth_to_local配置属性更新 为以下值:
RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//
2. 重新启动过时的服务。
在 HDP 集群上运行 DistCp 作业。
2.1.3. 在 HDP 集群上运行 DistCp 作业
启用hdfs用户在 HDP 集群上运行 YARN作业并在CDP 私有云基础 集群上进行所需的配置更改后,您可以运行DistCp 作业将 HDFS数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群。
1. 在 HDP 集群中运行 DistCp 作业之前,请确保重新启动集群服务。
2. 运行以下hadoop distcp命令:
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true [***Source cluster***] [***Destination cluster***]
例如,
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true hdfs://172.27.28.200:8020/tmp/test/hosts1 hdfs://172.27.110.198:8020/tmp/hosts1
笔记
Hadoop Distcp 作业需要简单的身份验证,因此您必须在将ipc.client.fallback-to-simple-auth-allowed选项设置为true 的情况下运行hadoop distcp命令 。
2.2. 将数据从安全的 HDP 集群迁移到安全的 CDP 私有云基础集群
您可以使用DistCp 工具将 HDFS数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群。要迁移数据,您必须在同一个Active Directory (AD) KDC 上配置 HDP 和CDP Private Cloud Base集群,在它们之间设置单向或双向信任,然后运行DistCp 命令复制数据。
执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群:
2.2.1. HDP 集群和CDP 私有云基础 集群的配置变更
你必须使HDP集群和一些配置的变化CDP私有云的基础,你从HDP集群的迁移数据前簇CDP私有云基地集群。
1. 在 HDP 集群上,打开core-site.xml文件,输入以下属性,并保存文件:
<property> <name>hadoop.security.auth_to_local</name> <value><RM mapping rules for HDP></value> <value><RM mapping rules for CDH></value> <description>Maps kerberos principals to local user names</description> </property>
2. 在 HDP 集群上,打开hdfs-site.xml文件,输入以下属性,并保存文件:
<property> <name>dfs.namenode.kerberos.principal.pattern</name> <value>*</value> </property>
3. 在 CDP 私有云基础集群上执行上述步骤。
4. 在两个集群上创建一个公共 Kerberos 主体名称。
5. 将创建的 Kerberos 主体名称分配给源和目标集群中所有适用的 NameNode。
6. 为确保在两个集群中使用相同的ResourceManager 映射规则,请在两个集群上更新 ResourceManager映射规则,如下所示:
<property> <name>hadoop.security.auth_to_local</name> <value> <HDP mapping rules> <CDH mapping rules> DEFAULT </value> </property>
7. 在集群之间配置单向或双向信任。
要在 HDP 集群和CDP 私有云基础集群之间设置双向信任,请执行以下步骤:
a. 创建属于不同Kerberos 领域的集群。
例如,假设您有Realm: 目标集群的“DRT”和源集群的Realm:“DRS”。
b. 在所有主机上为源主机和目标主机设置/etc/krb5.conf:
i. [realms]部分 - 添加 DRS 和 DRT 领域、来自源集群的Kerberos KDC、admin_server和 default_domain 设置的 DRS。
ii. [domain_realm]部分 - 添加源和目标集群的所有主机。
iii. 在具有 HDFS NameNode 角色的源主机和目标主机上添加krbtgt/DRS@DRT主体。要完成此任务,请执行以下步骤:
$ sudo kadmin.local kadmin.local: addprinc -pw cloudera krbtgt/DRS@DRT WARNING: no policy specified for krbtgt/DRS@DRT; defaulting to no policy Principal "krbtgt/DRS@DRT" created kadmin.local: listprincs
c. 在Cloudera Manager 和 Ambari 中,执行以下步骤:
i. 在源集群 HDFS服务的配置中启用 DRT 作为受信任的 Kerberos 领域。
ii. 在目标集群的配置中启用 DRS 作为受信任的 Kerberos 领域(trusted_realm) 以及存在 HDFS NameNode 角色的源主机名。
iii. 在目标集群 HDFS服务的配置中启用 DRS 作为受信任的 Kerberos 领域。
iv. 访问远程 HDFS端点以验证信任设置是否成功。要访问远程 HDFS 端点,请运行以下命令:
kinit krbtgt/DRS@DRT hadoop fs -ls hdfs://[***REMOTE HDFS ENDPOINT***]:8020/
将用户配置为在两个集群上运行 YARN 作业。
2.2.2. 配置用户在两个集群上运行 YARN 作业
要运行Hadoop DistCp 作业以将数据从 HDP 迁移到CDP 私有云基础集群,您必须使用 HDFS 超级用户或hdfs用户。
在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:
· HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅创建 HDFS 超级用户。
· 名为hdfs 的用户- 默认情况下,不允许hdfs用户运行 YARN作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。
1. 在 HDP 集群上执行以下步骤:
a. 打开以下文件:
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
b. 从禁止用户 列表中删除hdfs条目并保存文件。
示例文件内容:
yarn.nodemanager.local-dirs={{nm_local_dirs}} yarn.nodemanager.log-dirs={{nm_log_dirs}} yarn.nodemanager.linux-container-executor.group={{yarn_executor_container_group}} banned.users=yarn,hdfs,mapred,bin min.user.id={{min_user_id}}
c. 在YARN配置页面,验证container-executor配置模板是否 在banned.users列表中 包含hdfs。
d. 如果hdfs列在banner.users 列表中,请将其从模板中删除并保存模板。
e. 重启以下服务:
§ 陈旧的服务,如果有的话。
§ Ambari服务器
§ 集群的每个主机上的 Ambari 代理。
f. 在yarn.admin.acl文件中,添加hdfs。
g. 在etc/hadoop/capacity-scheduler.xml文件搜索文件中,将hdfs附加到 yarn.scheduler.capacity.root.acl_submit_applications 属性。
h. 重新启动 YARN 服务。
i. 使用hdfs 用户的密钥表文件运行kinit命令以向密钥分发中心 (KDC)验证hdfs用户。
2. 在 CDP 私有云基础集群上,执行以下步骤:
a. 选择YARN服务。
b. 单击配置选项卡。
c. 确保hdfs用户未列在 banned.users列表中。
d. 确保min.user.id属性设置为 0。
e. 重新启动 YARN服务。
在CDP 私有云基础集群上运行 DistCp 作业。
2.2.3. 在 CDP 私有云基础集群上运行 DistCp 作业
在 HDP 集群和 CDP 私有云基础集群中进行所需的配置更改并配置用户以在这两个集群上运行 YARN作业后,您可以运行Hadoop DistCp 作业。
1. 重新启动两个集群上的集群服务。
2. 运行以下 Hadoop DistCp 命令:
sudo -u [***superuser或 hdfs***] hadoop distcp [***源集群***] [***目标集群***]
例如:
sudo -u <superuser> hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination
3. 安全集群之间的 Distcp 的 Kerberos 设置指南
在安全的 CDP 集群上设置Kerberos 以distcp
在它们之间成功执行时,需要考虑特定的准则。
此处提到的准则仅适用于以下示例部署:
· 有两个集群,每一个不同的Kerberos域(SOURCE
以及DESTINATION
在该实施例中)
· 您有数据需要复制SOURCE
到 DESTINATION
· Kerberos 领域信任存在于SOURCE
和 DESTINATION
(在任一方向)之间,或在 SOURCE
和DESTINATION
与共同的第三领域(例如Active Directory 域)之间。
如果您的环境与上述环境匹配,请使用下表在集群上配置Kerberos 委派令牌,以便您可以成功 distcp
跨两个安全集群。基于之间的信任的方向SOURCE
和DESTINATION
集群,您可以使用mapreduce.job.hdfs-servers.token-renewal.exclude
两种集群属性指示ResourceManagers跳过或NameNode的主机上执行委托令牌更新。
笔记
mapreduce.job.hdfs-servers.token-renewal.exclude
如果两个集群都使用 HDFS 透明加密功能,则必须使用该参数。
环境类型 |
Kerberos 委托令牌设置 |
|
|
Distcp 作业在 |
您不需要设置该 |
Distcp 作业在 |
将该 |
|
|
Distcp 作业在 |
将该 |
Distcp 作业在 |
您不需要设置该 |
|
这两个 |
将该 |
|
|
如果公共领域可用(例如 Active Directory),请将 1. 2. 以
默认情况下,YARN ResourceManager 为应用程序更新令牌。该 |
4. 使用 DistCp 和 WebHDFS 在安全和不安全集群之间复制数据
您可以使用distcp
WebHDFS在安全集群和不安全集群之间复制数据。
复制数据时,请确保distcp
从安全集群运行命令。
1. 在安全集群上,在core-site.xml设置 ipc.client.fallback-to-simple-auth-allowed
为 true
。
<property> <name>ipc.client.fallback-to-simple-auth-allowed</name> <value>true</value> </property>
或者,您也可以在运行distcp
命令时将其作为参数传递 。如果您想这样做,请转到第 2 步。
2. 在不安全集群上,将安全集群的领域名称添加到不安全集群的配置中。
a. 在不安全集群的Cloudera Manager 管理控制台中,导航到Clusters > <HDFS cluster>。
b. 在配置选项卡上,搜索受信任的 Kerberos 领域并添加安全集群的领域名称。
笔记
这不需要启用 Kerberos,但它是允许在hdfs://
协议中发生简单身份验证回退的必要步骤 。
c. 保存更改。
3. 仅从安全集群端使用如下命令。
#This example uses the insecure cluster as the source and the secure cluster as the destination distcp webhdfs://<insecure_namenode>:9870 webhdfs://<secure_namenode>:9871 #This example uses the sefcure cluster as the source and the insecure cluster as the destination distcp webhdfs://<secure_namenode>:9871 webhdfs://<insecure_namenode>:9870
如果启用了 TLS,请替换webhdfs
为 swebhdfs
.
如果您没有配置 ipc.client.fallback-to-simple-auth-allowed
并希望将其作为参数传递,请从安全集群运行如下命令:
#This example uses the insecure cluster as the source and the secure cluster (with TLS enabled) as the destination cluster. swebhdfs is used instead of webhdfs when TLS is enabled. hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true webhdfs://<insecure_namenode>:9870 swebhdfs://<secure_namenode>:9871 #This example uses the secure cluster (with TLS enabled) as the source cluster and the insecure cluster as the destination. swebhdfs is used instead of webhdfs when TLS is enabled. hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true swebhdfs://<secure_namenode>:9871 webhdfs://<insecure_namenode>:9870