使用 azdata distcp 在 SQL Server 大数据群集之间执行数据移动

适用于:SQL Server 2019 (15.x)

Important

Microsoft SQL Server 2019 大数据群集已停用。 对 SQL Server 2019 大数据群集的支持已于 2025 年 2 月 28 日结束。 有关详细信息,请参阅Microsoft SQL Server 平台上的公告博客文章和大数据选项。

本文介绍如何使用“azdata”在 SQL Server 大数据群集 之间执行高性能分布式数据复制。

Prerequisites

SQL Server 大数据群集上的分布式数据复制简介

Hadoop HDFS DistCP 是一种命令行工具,用于在 HDFS 群集之间执行文件和文件夹的分布式并行复制。 分布式并行复制支持在两个不同群集之间快速传输 Data Lake 级别的文件和文件夹,从而支持迁移、创建分段环境、高可用性和灾难恢复方案。

Hadoop HDFS DistCP 使用内部 MapReduce 作业展开文件和目录列表,将其作为多个映射任务的输入,每个映射任务都会将源列表中指定的文件分区复制到目标。 这让源群集中的多个数据节点可以直接将数据发送到目标群集中的多个数据节点,从而创建真正的分布式并行复制方案。

在 SQL Server 大数据群集 CU13 及更高版本上,分布式复制功能已集成到产品中,并通过 azdata bdc hdfs distcp 命令公开。 该命令是一个异步操作,它在后台执行复制作业时立即返回。 使用 azdata 或提供的监视用户界面监视复制作业。

仅支持 SQL Server 大数据群集 源和目标。

群集可以在已启用 Active Directory 的模式或基本安全模式下进行部署。 可以在任何安全模式组合之间执行复制。 对于已启用 Active Directory 的群集,它们必须位于同一域中。

在本指南中,我们将介绍以下数据复制方案:

  • 已启用 Active Directory 的群集到已启用 Active Directory 的群集
  • 基本安全群集到已启用 Active Directory 的群集
  • 基本安全群集到基本安全群集

所有方案所需的步骤

需要证书才能在源群集和目标群集之间创建信任关系。 每个源/目标群集组合只需执行一次这些步骤。

Important

如果使用基本身份验证(非 AD)的 SQL Server 大数据群集直接升级到了 CU13 或更高版本,distcp 功能将需要激活。 (这不会影响使用基本身份验证的新 CU13+ 群集部署。)

要在此场景中启用 distcp 功能,请执行一次以下额外的步骤:

kubectl -n $CLUSTER_NAME exec -it nmnode-0-0 -- bash
export HADOOP_USER_NAME=hdfs
hadoop fs -mkdir -p /tmp/hadoop-yarn/staging/history
hadoop fs -chown yarn /tmp/hadoop-yarn
hadoop fs -chown yarn /tmp/hadoop-yarn/staging
hadoop fs -chown yarn /tmp/hadoop-yarn/staging/history
hadoop fs -chmod 733 /tmp/hadoop-yarn
hadoop fs -chmod 733 /tmp/hadoop-yarn/staging
hadoop fs -chmod 733 /tmp/hadoop-yarn/staging/history

后续步骤中所需的笔记本是 SQL Server 大数据群集 操作笔记本的一部分。 有关如何安装和使用笔记本的详细信息,请参阅操作笔记本

步骤 1 - 证书创建和安装

使用 Azure Data Studio 连接到源群集。 文件将从这里复制。 执行以下步骤:

  1. 使用笔记本 cer001-create-root-ca.ipynb 在源群集中创建新的群集根证书

  2. 使用 cer002-download-existing-root-ca.ipynb 将新的群集根证书下载到计算机

  3. 使用 cer005-install-existing-root-ca.ipynb 将新的根证书安装到源群集。 此步骤需要 10-15 分钟。

  4. 在源群集 cer021-create-knox-cert.ipynb 上生成新的 knox 证书

  5. 使用 cer031-sign-knox-generated-cert.ipynb 对带有新的根证书的 knox 证书进行签名

  6. 使用 cer041-install-knox-cert.ipynb 在源群集上安装新的 knox 证书

    Important

    证书生成命令将在 Windows 上的 cluster-ca-certificate.crt 和 Unix 上的 cacert.pem 中创建根 CA 文件 ("C:\Users\{Username}\AppData\Local\Temp\1\mssql-cluster-root-ca\") 和 Knox 证书文件 ("/tmp/mssql-cluster-root-ca/)。

步骤 2 - 在目标上安装证书

使用 Azure Data Studio 连接到目标群集。 将文件复制到这里。 执行以下步骤:

Warning

如果在不同的计算机上使用 Azure Data Studio 来执行这些任务,请将在步骤 1 中生成的 cluster-ca-certificate.crtcacert.pem 文件复制到另一台计算机上的正确位置,然后再在下一步中运行笔记本。

  1. 使用 cer005-install-existing-root-ca.ipynb 将新的根证书从源群集安装到目标群集。 此步骤需要 10-15 分钟。

步骤 3 - 创建密钥表文件

如果有任何群集启用了 Active Directory,则需要创建密钥表文件。 该文件将执行身份验证以启用复制。

使用 ktutil 创建密钥表文件。 示例如下。 请确保使用适当的值定义或替换环境变量 DOMAIN_SERVICE_ACCOUNT_USERNAMEDOMAIN_SERVICE_ACCOUNT_PASSWORDREALM

ktutil
> add_entry -password -p $DOMAIN_SERVICE_ACCOUNT_USERNAME@$REALM -k 1 -e arcfour-hmac-md5
$DOMAIN_SERVICE_ACCOUNT_PASSWORD
> add_entry -password -p $DOMAIN_SERVICE_ACCOUNT_USERNAME@$REALM -k 1 -e aes256-cts
$DOMAIN_SERVICE_ACCOUNT_PASSWORD
> add_entry -password -p $DOMAIN_SERVICE_ACCOUNT_USERNAME@$REALM -k 1 -e aes256-cts-hmac-sha1-96
$DOMAIN_SERVICE_ACCOUNT_PASSWORD
> wkt /tmp/$DOMAIN_SERVICE_ACCOUNT_USERNAME.keytab
> exit

步骤 4 - 将密钥表复制到 HDFS 位置

仅当有任何群集启用了 Active Directory 时,才需要执行此步骤。

请确保使用适当的值定义或替换环境变量 DOMAIN_SERVICE_ACCOUNT_USERNAME

将密钥表上传到目标群集(安全群集):

azdata bdc hdfs mkdir -p /user/$DOMAIN_SERVICE_ACCOUNT_USERNAME
azdata bdc hdfs cp -f /tmp/$DOMAIN_SERVICE_ACCOUNT_USERNAME.keytab -t /user/$DOMAIN_SERVICE_ACCOUNT_USERNAME/$DOMAIN_SERVICE_ACCOUNT_USERNAME.keytab

数据复制方案

方案 1 - 已启用 Active Directory 的群集到已启用 Active Directory 的群集

  1. 导出需要的环境变量 DISTCP_KRB5KEYTAB

    export DISTCP_KRB5KEYTAB=/user/$DOMAIN_SERVICE_ACCOUNT_USERNAME/$DOMAIN_SERVICE_ACCOUNT_USERNAME.keytab
    
  2. 使用适当的值定义或替换 CLUSTER_CONTROLLERDESTINATION_CLUSTER_NAMESPACEPRINCIPAL 变量。 然后使用 azdata 向目标群集进行身份验证:

    azdata login --auth ad --endpoint $CLUSTER_CONTROLLER --namespace $DESTINATION_CLUSTER_NAMESPACE --principal $PRINCIPAL
    
  3. 运行分布式数据复制:

    azdata bdc hdfs distcp submit -f https://knox.$CLUSTER_NAME.$DOMAIN:30443/file.txt -t  /file.txt
    

方案 2 - 基本安全群集到已启用 Active Directory 的群集

  1. 导出需要的环境变量 DISTCP_KRB5KEYTABDISTCP_AZDATA_USERNAMEDISTCP_AZDATA_PASSWORD

    export DISTCP_KRB5KEYTAB=/user/$DOMAIN_SERVICE_ACCOUNT_USERNAME/$DOMAIN_SERVICE_ACCOUNT_USERNAME.keytab
    export DISTCP_AZDATA_USERNAME=<your basic security bdc username> 
    export DISTCP_AZDATA_PASSWORD=<your basic security bdc password>
    
  2. 使用适当的值定义或替换 CLUSTER_CONTROLLERDESTINATION_CLUSTER_NAMESPACEPRINCIPAL 变量。 然后使用 azdata 向目标群集进行身份验证:

    azdata login --auth ad --endpoint $CLUSTER_CONTROLLER --namespace $DESTINATION_CLUSTER_NAMESPACE --principal $PRINCIPAL
    
  3. 运行分布式数据复制

    azdata bdc hdfs distcp submit --from-path https://$SOURCE_CLUSTER_IP:30443/file.txt --to-path /file.txt
    

方案 3 - 基本安全群集到基本安全群集

  1. 导出需要的环境变量 DISTCP_AZDATA_USERNAMEDISTCP_AZDATA_PASSWORD

    export DISTCP_AZDATA_USERNAME=<your basic security bdc username> 
    export DISTCP_AZDATA_PASSWORD=<your basic security bdc password>
    
  2. 使用 azdata 向目标群集进行身份验证

  3. 运行分布式数据复制

    azdata bdc hdfs distcp submit --from-path https://$SOURCE_CLUSTER_IP:30443/file.txt --to-path /file.txt
    

监视分布式复制作业

azdata bdc hdfs distcp submit 命令是一个异步操作,它在后台运行复制作业时立即返回。 使用 azdata 或提供的监视用户界面监视复制作业。

列出所有分布式复制作业

azdata bdc hdfs distcp list

记下要跟踪的作业的 job-id。所有其他命令都会用到它。

获取分布式复制作业的状态

azdata bdc hdfs distcp state [--job-id | -i] <JOB_ID>

获取分布式复制作业的完整状态

azdata bdc hdfs distcp status [--job-id | -i] <JOB_ID>

获取分布式复制作业的日志

azdata bdc hdfs distcp log [--job-id | -i] <JOB_ID>

分布式复制提示

  1. 若要复制整个目录及其内容,请以某个目录结束路径参数,不带“/”。 以下示例将整个 sourceDirectories 目录复制到根 HDFS 目标:

    azdata bdc hdfs distcp submit --from-path https://$SOURCE_CLUSTER_IP:30443/sourceDirectories --to-path /
    
  2. 命令可能包含支持 --overwrite--preserve--update--delete 修饰符的选项。 修饰符应放在 submit 关键字之后,如下所示:

    azdata bdc hdfs distcp submit {options} --from-path https://$SOURCE_CLUSTER_IP:30443/sourceDirectories --to-path /
    

Next steps

有关详细信息,请参阅 SQL Server 大数据群集 简介

有关新命令的完整参考,请参阅 azdata bdc hdfs distcp