将数据迁移到CDP 私有云基础的数据迁移用例

2021-10-09 14:47:30 浏览数 (1)

这是CDH/HDP/Apache Hadoop迁移到CDP系列的第二篇博客,如对迁移感兴趣,请关注该系列之前博客《使用 Replication Manager 迁移到CDP 私有云基础》。

您可以使用 authzmigrator 工具将 Hive 对象和 URL 权限以及 Kafka 权限从 CDH 集群迁移到 CDP 私有云基础 集群。您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全或不安全的CDP 私有云基础集群。

使用 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。

Authzmigrator工具

使用authzmigrator工具迁移Hive对象和URL权限以及Kafka权限,必须将Sentry服务器中的权限导出到源集群(例如CDH集群)上的文件中,然后将文件摄取到目标集群上的Ranger服务中(例如,CDP 集群)。

从 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文件。该配置 目录包含可用于参考的默认配置。

  1. 更换sentry-site.xml的和core-site.xml的配置 从源集群中的sentry服务器上的sentry目录中的配置文件的目录。

例如,源集群上的 Sentry 目录位于 /var/run/cloudera-scm-agent/process/<sentry-service>/ 位置。

  1. 编辑sentry-site.xml文件以执行以下步骤:
    1. 使用以下凭据更新 Sentry 数据库的数据库用户名和密码:
代码语言:javascript复制
sentry.store.jdbc.user
sentry.store.jdbc.password
  1. 编辑core-site.xml文件以执行以下步骤:
    1. 将属性fs.defaultFS的值更新 为file:///。
    2. 删除 文件中的 hadoop.security.credential.provider.path属性。
  2. 在config目录下的authorization-migration-site.xml文件中 ,执行以下步骤:
    1. 确保 authorization.migration.export.target_services 属性具有要为其导出权限的服务列表。

有效值包括:HIVE KAFKA

  1. 将authorization.migration.export.output_file 属性中的信息更新为 应导出权限的文件的绝对位置。

  1. 验证 Sentry 服务器的 Java 执行路径和authz_export.sh脚本中的 JAVA_HOME 属性是否匹配。要验证路径和属性,请执行以下任务:
    1. 要定位 Sentry 服务器使用的 Java 执行路径,请运行 ps aux | grep org.apache.sentry.SentryMain 命令。
    2. 如果路径不是/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。

  1. 使用sh authz_export.sh命令运行authz_export.sh脚本。

权限导出到/opt/backup/permissions.json 文件。您后续可以将权限摄取到 Ranger 中。

将权限摄取到 Ranger

运行 authzmigrator 工具导出源集群上的权限后,将它们摄取到目标集群上的 Ranger 服务中。

要获取/opt/backup/permissions.json文件中的权限 ,请执行以下步骤:

  1. 在目标集群中,将/opt/backup/permissions.json文件复制 到 /user/sentry/export-permissions/permissions.json HDFS 位置。
  2. 确保用户ranger对文件具有读写权限。要设置ranger用户的读写权限 ,请运行以下命令:
代码语言:javascript复制
hdfs dfs -setfacl -m -R user:ranger:rwx /user/sentry/export-permissions/permissions.json
  1. 登录到 Cloudera Manager。
  2. 在 Ranger 服务中,单击操作>导入 Sentry 权限。

Ranger 服务获取 user/sentry/export-permissions/permissions.json 文件中的权限。

使用 DistCp 将 HDFS 数据从 HDP 集群迁移到CDP 私有云基础集群

您可以使用 Hadoop DistCp 工具将存储在 HDFS 中的数据从安全的 HDP 集群迁移到安全或不安全的 CDP 私有云基础集群。

在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:

  • HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅 创建 HDFS 超级用户。
  • 名为hdfs 的用户- 默认情况下,不允许hdfs用户运行 YARN 作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。

使用 DistCp 将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群

在运行 DistCp 以将数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群之前,您必须允许hdfs用户在没有 HDFS 超级用户帐户的情况下在 HDP 集群上运行 YARN 作业。您还必须确保在复制期间跳过领域名称,并且只有指定的用户才能访问 HDP 集群。

执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群:

启用hdfs用户在 HDP 集群上运行 YARN 作业

您必须进行配置更改才能使hdfs用户能够在 HDP 集群上运行 YARN 作业。

在 HDP 集群中,在 Ambari 主机上执行以下步骤:

  1. 打开以下文件:
代码语言:javascript复制
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
  1. 从禁止用户列表中删除hdfs条目并保存文件。

示例文件内容:

代码语言:javascript复制
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}}
  1. 在YARN配置页面,验证container-executor配置模板是否 在banned.users列表中包含 hdfs。
  2. 如果hdfs列在banner.users列表中,请将其从模板中删除并保存模板。
  3. 重启以下服务:
    • 陈旧的服务,如果有的话。
    • Ambari 服务器
    • 集群的每个主机上的 Ambari 代理。
  4. 在yarn.admin.acl文件中,添加hdfs。
  5. 在etc/hadoop/capacity-scheduler.xml文件搜索文件中,将hdfs附加到 yarn.scheduler.capacity.root.acl_submit_applications 属性。
  6. 重新启动 YARN 服务。
  7. 使用hdfs用户的keytab文件运行kinit命令以向密钥分发中心 (KDC)验证hdfs用户。

在CDP 私有云基础集群上进行必要的配置更改。

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配置属性更新 为以下值:

代码语言:javascript复制
RULE:[1:$1@$0](.*@EXAMPLE.COM)s/@.*//
  1. 重新启动过时的服务。

在 HDP 集群上运行 DistCp 作业。

在 HDP 集群上运行 DistCp 作业

启用hdfs用户在 HDP 集群上运行 YARN 作业并在CDP 私有云基础 集群上进行所需的配置更改后,您可以运行 DistCp 作业将 HDFS 数据从安全的 HDP 集群迁移到不安全的CDP 私有云基础集群。

  1. 在 HDP 集群中运行 DistCp 作业之前,请确保重新启动集群服务。
  2. 运行以下hadoop distcp命令:
代码语言:javascript复制
hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true [***Source cluster***]          [***Destination cluster***]

例如,

代码语言:javascript复制
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命令 。

将数据从安全的 HDP 集群迁移到安全的 CDP 私有云基础集群

您可以使用 DistCp 工具将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群。要迁移数据,您必须在同一个 Active Directory (AD) KDC 上配置 HDP 和CDP Private Cloud Base集群,在它们之间设置单向或双向信任,然后运行 DistCp 命令复制数据。

执行以下步骤将 HDFS 数据从安全的 HDP 集群迁移到安全的CDP 私有云基础集群:

HDP 集群和CDP 私有云基础 集群的配置变更

你必须使HDP集群和一些配置的变化CDP私有云的基础,你从HDP集群的迁移数据前簇CDP私有云基地集群。

  1. 在 HDP 集群上,打开core-site.xml文件,输入以下属性,并保存文件:
代码语言:javascript复制
<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>
  1. 在 HDP 集群上,打开hdfs-site.xml文件,输入以下属性,并保存文件:
代码语言:javascript复制
<property>
<name>dfs.namenode.kerberos.principal.pattern</name>
<value>*</value>
</property>
  1. 在 CDP 私有云基础集群上执行上述步骤。
  2. 在两个集群上创建一个公共 Kerberos 主体名称。
  3. 将创建的 Kerberos 主体名称分配给源和目标集群中所有适用的 NameNode。
  4. 为确保在两个集群中使用相同的 ResourceManager 映射规则,请在两个集群上更新 ResourceManager 映射规则,如下所示:
代码语言:javascript复制
<property>
<name>hadoop.security.auth_to_local</name>
<value>
<HDP mapping rules>
<CDH mapping rules>
DEFAULT
</value>
</property>
  1. 在集群之间配置单向或双向信任。

要在 HDP 集群和CDP 私有云基础集群之间设置双向信任,请执行以下步骤:

    1. 创建属于不同 Kerberos 领域的集群。

例如,假设您有Realm: 目标集群的“DRT”和源集群的Realm:“DRS”。

    1. [realms]部分 - 添加 DRS 和 DRT 领域、来自源集群的 Kerberos KDC、admin_server 和 default_domain 设置的 DRS。
    2. [domain_realm]部分 - 添加源和目标集群的所有主机。
    3. 在具有 HDFS NameNode 角色的源主机和目标主机上添加krbtgt/DRS@DRT主体。要完成此任务,请执行以下步骤:
    4. 在所有主机上为源主机和目标主机设置/etc/krb5.conf:
代码语言:javascript复制
$ 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
    1. 在源集群 HDFS 服务的配置中启用 DRT 作为受信任的 Kerberos 领域。
    2. 在目标集群的配置中启用 DRS 作为受信任的 Kerberos 领域 (trusted_realm) 以及存在 HDFS NameNode 角色的源主机名。
    3. 在目标集群 HDFS 服务的配置中启用 DRS 作为受信任的 Kerberos 领域。
    4. 访问远程 HDFS 端点以验证信任设置是否成功。要访问远程 HDFS 端点,请运行以下命令:
    5. 在 Cloudera Manager 和 Ambari 中,执行以下步骤:
代码语言:javascript复制
kinit krbtgt/DRS@DRT
hadoop fs -ls hdfs://[***REMOTE HDFS ENDPOINT***]:8020/

将用户配置为在两个集群上运行 YARN 作业。

配置用户在两个集群上运行 YARN 作业

要运行 Hadoop DistCp 作业以将数据从 HDP 迁移到CDP 私有云基础集群,您必须使用 HDFS 超级用户或 hdfs用户。

在运行 Hadoop DistCp 作业之前,请确保您拥有以下用户帐户之一:

  • HDFS 超级用户 - 有关创建 HDFS 超级用户的信息,请参阅创建 HDFS 超级用户。
  • 名为hdfs 的用户- 默认情况下,不允许hdfs用户运行 YARN 作业。您必须启用hdfs用户才能在两个集群上运行 YARN 作业。
  1. 在 HDP 集群上执行以下步骤:
    1. 打开以下文件:
代码语言:javascript复制
/var/lib/ambari-server/resources/common-services/YARN/2.1.0.2.0/package/templates/container-executor.cfg.j2
    1. 从禁止用户 列表中删除hdfs条目并保存文件。

示例文件内容:

代码语言:javascript复制
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}}
  1. 在 CDP 私有云基础集群上,执行以下步骤:
    1. 选择YARN服务。
    2. 单击配置选项卡。
    3. 确保hdfs用户未列在 banned.users列表中。
    4. 确保min.user.id属性设置为 0。
    5. 重新启动 YARN 服务。

在CDP 私有云基础集群上运行 DistCp 作业。

在 CDP 私有云基础集群上运行 DistCp 作业

在 HDP 集群和 CDP 私有云基础集群中进行所需的配置更改并配置用户以在这两个集群上运行 YARN 作业后,您可以运行 Hadoop DistCp 作业。

  1. 重新启动两个集群上的集群服务。
  2. 运行以下 Hadoop DistCp 命令:
代码语言:javascript复制
sudo -u [***superuser或 hdfs***] hadoop distcp [***源集群***] [***目标集群***]

例如:

代码语言:javascript复制
sudo -u <superuser> hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination

安全集群之间的 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 委托令牌设置

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 主机的委托令牌更新。

  1. kinit任何对DESTINATION使用可以同时在被使用的AD帐户YARN网关主机 SOURCE和DESTINATION。
  2. 以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 主机的委托令牌更新。

使用 DistCp 和 WebHDFS 在安全和不安全集群之间复制数据

您可以使用distcpWebHDFS 在安全集群和不安全集群之间复制数据。

复制数据时,请确保distcp从安全集群运行命令。

  1. 在安全集群上,在core-site.xml设置 ipc.client.fallback-to-simple-auth-allowed为 true。
代码语言:javascript复制
<property>
<name>ipc.client.fallback-to-simple-auth-allowed</name>
<value>true</value>
</property>

或者,您也可以在运行distcp命令时将其作为参数传递 。如果您想这样做,请转到第 2 步。

  1. 在不安全集群上,将安全集群的领域名称添加到不安全集群的配置中。
    1. 在不安全集群的 Cloudera Manager 管理控制台中,导航到Clusters > <HDFS cluster>。
    2. 在配置选项卡上,搜索受信任的 Kerberos 领域并添加安全集群的领域名称。

笔记

这不需要启用 Kerberos,但它是允许在hdfs://协议中发生简单身份验证回退的必要步骤 。

    1. 保存更改。
  1. 仅从安全集群端使用如下命令。
代码语言:javascript复制
#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并希望将其作为参数传递,请从安全集群运行如下命令:

代码语言:javascript复制
#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

0 人点赞