Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文提供有关将数据迁移到 Azure HDInsight 的建议。 本文是帮助用户将本地 Apache Hadoop 系统迁移到 Azure HDInsight 的最佳做法系列教程中的其中一篇。
将本地数据迁移到 Azure
有两个主要选项可将数据从本地迁移到 Azure 环境:
使用 TLS 通过网络传输数据
通过 Internet - 可以使用以下多个工具中的任意一个将数据通过 Internet 传输到 Azure 存储:Azure 存储资源管理器、AzCopy、Azure Powershell 和 Azure CLI。
Express Route - ExpressRoute 是一项 Azure 服务,允许在 Microsoft Azure 数据中心与本地环境或共同租用设施中的基础结构之间创建专用连接。 ExpressRoute 连接不通过公共 Internet,与通过 Internet 的典型连接相比,提供更高的安全性、可靠性、速度和更低的延迟。 有关详细信息,请参阅创建和修改 ExpressRoute 线路。
Data Box 联机数据传输 - Data Box Edge 和 Data Box Gateway 是联机数据传输产品,它们用作网络存储网关来管理站点和 Azure 之间的数据。 Data Box Edge 是一种本地网络设备,可将数据传入和传出 Azure,并使用支持人工智能 (AI) 的边缘计算来处理数据。 Data Box Gateway 是具有存储网关功能的虚拟设备。
离线发送数据
Data Box 脱机数据传输 - Data Box、Data Box Disk 和 Data Box Heavy 设备可在网络不可用时将大量数据传输到 Azure。 这些脱机数据传输设备在组织和 Azure 数据中心之间往返运输。 它们使用 AES 加密来帮助保护传输中的数据,还在上传后执行一个清理过程,从设备中删除你的数据。 有关 Data Box 脱机传输设备的详细信息,请参阅 Azure Data Box 文档 - 脱机传输。
下表根据数据量和网络带宽列出了大致的数据传输持续时间。 如果数据迁移预计需要花费三周以上,请使用 Data Box。
| 数据量 | 网络带宽 的 45 Mbps (T3) |
网络带宽 的 100 Mbps |
网络带宽 的 1 Gbps |
网络带宽 的 10 Gbps |
|---|---|---|---|---|
| 1 TB(兆字节) | 2 天 | 1 天 | 2 小时 | 14 分钟 |
| 10 兆字节 | 22 天 | 10 天 | 1 天 | 2 小时 |
| 35 结核病 | 76 天 | 34 天 | 3 天 | 8 小时 |
| 80 结核病 | 173 天 | 78 天 | 8 天 | 19 小时 |
| 100 TB | 216 天 | 97 天 | 10 天 | 1 天 |
| 200 结核病 | 1 年 | 194 天 | 19 天 | 2 天 |
| 500结核病 | 3 年 | 1 年 | 49 天 | 5 天 |
| 1 PB | 6 年 | 3 年 | 97 天 | 10 天 |
| 2 PB | 12 年 | 5 年 | 194 天 | 19 天 |
可以使用 Azure 的本机工具(例如 Apache Hadoop DistCp、Azure 数据工厂和 AzureCp)通过网络传输数据。 也可以使用第三方工具 WANDisco 实现相同的目的。 使用 Apache Kafka Mirrormaker 和 Apache Sqoop 可以持续将数据从本地传输到 Azure 存储系统。
使用 Apache Hadoop DistCp 时的性能注意事项
DistCp 是一个 Apache 项目,它使用 MapReduce 映射作业来传输数据、处理错误以及从这些错误中恢复。 它为每个 Map 任务分配一个源文件列表。 然后,Map 任务会将分配给它的所有文件复制到目标位置。 可通过多种方法来提高 DistCp 的性能。
增加 Mapper 的数量
DistCp 会尝试创建 Map 任务,使每个任务复制的字节数大致相同。 默认情况下,DistCp 作业使用 20 个映射器。 对 Distcp 使用更多的映射器(在命令行中包含“m”参数)可在数据传输过程中提高并行度,减少数据传输的时长。 不过,在增加 Mapper 数量时,有两点需要考虑:
DistCp 的最小粒度是单个文件。 指定多于源文件数量的 Mapper 数量并无帮助,反而会浪费可用的集群资源。
确定 Mapper 数量时,请考虑集群中可用的 Yarn 内存。 每个 Map 任务都作为 YARN 容器启动。 假设群集上没有其他繁重的工作负荷在运行,可通过以下公式确定映射器数目:m = (工作器节点数 * 每个工作器节点的 YARN 内存) / YARN 容器大小。 但是,如果其他应用程序正在使用内存,请选择仅将一部分 YARN 内存用于 DistCp 作业。
使用多个 DistCp 作业
当要移动的数据集大小超过 1 TB 时,请使用多个 DistCp 作业。 使用多个作业可以限制故障造成的影响。 如果任一作业失败,你只需重启该特定作业,而无需重启所有作业。
考虑拆分文件
如果只有少量大文件,请考虑将它们拆分成 256 MB 的文件块,以便通过更多的 Mapper 获得更高的潜在并发度。
使用“strategy”命令行参数
考虑在命令行中使用 strategy = dynamic 参数。
strategy 参数的默认值为 uniform size,在这种情况下,每个映射副本的字节数大致相同。 如果将此参数更改为 dynamic,则列表文件将拆分为多个“块文件”。 块文件的数目是映射数的倍数。 每个映射任务都会被分配一个分块文件。 处理块中的所有路径后,将删除当前块,并获取新块。 该过程会持续进行,直到没有更多可用的数据块为止。 这种“动态”方法使快速映射任务能够使用比慢速映射任务更多的路径,从而加快 DistCp 作业的总体速度。
增加线程数目
看看增大 -numListstatusThreads 参数是否能够提高性能。 此参数控制用于生成文件列表的线程数,最大值为 40。
使用输出提交器算法
看看传递参数 -Dmapreduce.fileoutputcommitter.algorithm.version=2 是否能够提高 DistCp 的性能。 此输出提交器算法在将输出文件写入到目标方面做了优化。 以下示例命令演示了不同参数的用法:
hadoop distcp -Dmapreduce.fileoutputcommitter.algorithm.version=2 -numListstatusThreads 30 -m 100 -strategy dynamic hdfs://nn1:8020/foo/bar wasb://<container_name>@<storage_account_name>.blob.core.chinacloudapi.cn/foo/
元数据迁移
Apache Hive
Hive 元存储既可以使用脚本迁移,也可以使用 DB 复制进行迁移。
使用脚本进行 Hive 元存储迁移
- 从本地部署的 Hive 元存储中生成 Hive DDL。 可以使用包装器 bash 脚本完成此步骤。
- 编辑生成的 DDL,将 HDFS URL 替换为 WASB/ADLS/ABFS URL。
- 从 HDInsight 群集对元存储执行更新后的 DDL。
- 确保本地环境和云端的 Hive 元存储版本彼此兼容。
使用数据库复制进行 Hive 元存储迁移
在本地 Hive 元存储 DB 与 HDInsight 元存储 DB 之间设置数据库复制。
使用“Hive MetaTool”将 HDFS URL 替换为 WASB/ADLS/ABFS URL,例如:
./hive --service metatool -updateLocation hdfs://nn1:8020/ wasb://<container_name>@<storage_account_name>.blob.core.chinacloudapi.cn/
Apache Ranger
- 将本地 Ranger 策略导出到 XML 文件。
- 使用 XSLT 等工具将基于 HDFS 的本地特定路径转换为 WASB/ADLS。
- 将策略导入到运行在 HDInsight 上的 Ranger 中。
后续步骤
阅读本系列的下一篇文章: