您可以使用 authzmigrator 工具将 Hive 对象和 URL 权限以及 Kafka 权限从 CDH 集群迁移到 CDP 私有云基础 集群。您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。
要将 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:
使用authzmigrator工具迁移Hive对象和URL权限以及Kafka权限,必须将Sentry服务器中的权限导出到源集群(例如CDH集群)上的文件中,然后将文件摄取到目标集群上的Ranger服务中(例如,CDP 集群)。
使用 authzmigrator 工具将源集群上的 Sentry 服务器的 Sentry 权限导出到文件中。
在并行迁移(side-car migration)过程中,您可以使用authzmigrator工具将Hive对象和URL权限以及Kafka权限迁移到Ranger。
该authz_export.tar.gz文件包含一个名为jar文件和目录的配置。它还有一个 authz_export.sh文件。该配置 目录包含可用于参考的默认配置。
例如,源集群上的 Sentry 目录位于 /var/run/cloudera-scm-agent/process/<sentry-service>/ 位置。
sentry.store.jdbc.user
sentry.store.jdbc.password
有效值包括:HIVE KAFKA
例如,如果 Sentry 服务器使用 /usr/java/jdk1.8.0_141-cloudera/bin/java路径,请将authz_export.sh脚本中的JAVA_HOME属性 更改为 /usr/java/jdk1.8.0_141-cloudera。
权限导出到/opt/backup/permissions.json 文件。您后续可以将权限摄取到 Ranger 中。
运行 authzmigrator 工具导出源集群上的权限后,将它们摄取到目标集群上的 Ranger 服务中。
要获取/opt/backup/permissions.json文件中的权限 ,请执行以下步骤:
hdfs dfs -setfacl -m -R user:ranger:rwx /user/sentry/export-permissions/permissions.json
Ranger 服务获取 user/sentry/export-permissions/permissions.json 文件中的权限。
您可以使用 Hadoop DistCp 工具将存储在 HDFS 中的数据从安全的 HDP 集群迁移到安全或不安全的 CDP 私有云基础集群。
在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:
在运行 DistCp 以将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群之前,您必须允许hdfs用户在没有 HDFS 超级用户帐户的情况下在 HDP 集群上运行 YARN 作业。您还必须确保在复制期间跳过领域名称,并且只有指定的用户才能访问 HDP 集群。
执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群:
您必须进行配置更改才能使hdfs用户能够在 HDP 集群上运行 YARN 作业。
在 HDP 集群中,在 Ambari 主机上执行以下步骤:
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
示例文件内容:
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}}
在CDP 私有云基础集群上进行必要的配置更改。
在复制期间,必须跳过领域名称,并且只有指定的用户才能访问 HDP 集群。
例如,如果 HDFS Kerberos Principal名称是 HDP 集群上的hdfs@EXAMPLE.COM,则管理员必须将hadoop.security.auth_to_local配置属性更新 为以下值:
RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//
在 HDP 集群上运行 DistCp 作业。
启用hdfs用户在 HDP 集群上运行 YARN 作业并在CDP 私有云基础 集群上进行所需的配置更改后,您可以运行 DistCp 作业将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群。
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命令 。
您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群。要迁移数据,您必须在同一个 Active Directory (AD) KDC 上配置 HDP 和CDP Private Cloud Base集群,在它们之间设置单向或双向信任,然后运行 DistCp 命令复制数据。
执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群:
你必须使HDP集群和一些配置的变化CDP私有云的基础,你从HDP集群的迁移数据前簇CDP私有云基地集群。
<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>
<property>
<name>dfs.namenode.kerberos.principal.pattern</name>
<value>*</value>
</property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>
<HDP mapping rules>
<CDH mapping rules>
DEFAULT
</value>
</property>
要在 HDP 集群和CDP 私有云基础集群之间设置双向信任,请执行以下步骤:
例如,假设您有Realm: 目标集群的“DRT”和源集群的Realm:“DRS”。
$ 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
kinit krbtgt/DRS@DRT
hadoop fs -ls hdfs://[***REMOTE HDFS ENDPOINT***]:8020/
将用户配置为在两个集群上运行 YARN 作业。
要运行 Hadoop DistCp 作业以将数据从 HDP 迁移到CDP 私有云基础集群,您必须使用 HDFS 超级用户或 hdfs用户。
在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
示例文件内容:
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}}
在CDP 私有云基础集群上运行 DistCp 作业。
在 HDP 集群和 CDP 私有云基础集群中进行所需的配置更改并配置用户以在这两个集群上运行 YARN 作业后,您可以运行 Hadoop DistCp 作业。
sudo -u [***superuser或 hdfs***] hadoop distcp [***源集群***] [***目标集群***]
例如:
sudo -u <superuser> hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination
在安全的 CDP 集群上设置 Kerberos 以distcp在它们之间成功执行时,需要考虑特定的准则。
此处提到的准则仅适用于以下示例部署:
如果您的环境与上述环境匹配,请使用下表在集群上配置 Kerberos 委派令牌,以便您可以成功 distcp跨两个安全集群。基于之间的信任的方向SOURCE和DESTINATION集群,您可以使用mapreduce.job.hdfs-servers.token-renewal.exclude两种集群属性指示ResourceManagers跳过或NameNode的主机上执行委托令牌更新。
笔记
mapreduce.job.hdfs-servers.token-renewal.exclude 如果两个集群都使用 HDFS 透明加密功能,则必须使用该参数。
环境类型 | Kerberos 委托令牌设置 | |
---|---|---|
SOURCE信任 DESTINATION | Distcp 作业在DESTINATION集群上运行 | 您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。 |
Distcp 作业在SOURCE集群上运行 | 将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。 | |
DESTINATION信任 SOURCE | Distcp 作业在DESTINATION集群上运行 | 将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的SOURCE集群NameNode 主机名列表。 |
Distcp 作业在SOURCE集群上运行 | 您不需要设置该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性。 | |
这两个SOURCE和DESTINATION相互信任 | 将该mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置为 以逗号分隔的DESTINATION集群NameNode 主机名列表。 | |
SOURCE和DESTINATION互不信任 | 如果公共领域可用(例如 Active Directory),请将mapreduce.job.hdfs-servers.token-renewal.exclude 属性设置 为未运行 distcp 作业的集群的 NameNode 的主机名的逗号分隔列表。例如,如果您在DESTINATION集群上运行作业:kinit任何对DESTINATION使用可以同时在被使用的AD帐户YARN网关主机 SOURCE和DESTINATION。以hadoop 用户身份运行 distcp 作业:$ hadoop distcp -Ddfs.namenode.kerberos.principal.pattern=* \-Dmapreduce.job.hdfs-servers.token-renewal.exclude=SOURCE-nn-host1,SOURCE-nn-host2 \hdfs://source-nn-nameservice/source/path \/destination/path默认情况下,YARN ResourceManager 为应用程序更新令牌。该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性指示任一集群上的 ResourceManager 跳过 NameNode 主机的委托令牌更新。 |
$ hadoop distcp -Ddfs.namenode.kerberos.principal.pattern=* \ -Dmapreduce.job.hdfs-servers.token-renewal.exclude=SOURCE-nn-host1,SOURCE-nn-host2 \ hdfs://source-nn-nameservice/source/path \ /destination/path 默认情况下,YARN ResourceManager 为应用程序更新令牌。该 mapreduce.job.hdfs-servers.token-renewal.exclude 属性指示任一集群上的 ResourceManager 跳过 NameNode 主机的委托令牌更新。
您可以使用distcpWebHDFS 在安全集群和不安全集群之间复制数据。
复制数据时,请确保distcp从安全集群运行命令。
<property>
<name>ipc.client.fallback-to-simple-auth-allowed</name>
<value>true</value>
</property>
或者,您也可以在运行distcp命令时将其作为参数传递 。如果您想这样做,请转到第 2 步。
笔记
这不需要启用 Kerberos,但它是允许在hdfs://协议中发生简单身份验证回退的必要步骤 。
#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
原文链接:https://docs.cloudera.com/cdp-private-cloud-upgrade/latest/data-migration/topics/cdp-data-migration-use-cases.html