本文档介绍如何将开源HDFS的数据平滑地迁移到文件存储 HDFS 版。
背景信息
当前业界有很多公司是以Hadoop技术构建数据中心,而越来越多的公司和企业希望将业务顺畅地迁移到云上。文件存储 HDFS 版可以帮助您实现将开源HDFS的数据迁移到云上,并允许您在云上就像在Hadoop分布式文件系统中管理和访问数据。
准备工作
- 开通文件存储 HDFS 版服务并创建文件系统实例和挂载点。具体操作,请参见文件存储HDFS版快速入门。 
- 基于阿里云ECS搭建Hadoop集群(下称"迁移集群"),用于访问文件存储 HDFS 版实例和迁移数据,并满足以下条件: - 迁移集群与文件存储 HDFS 版实例在相同区域、相同可用区。 
- 迁移集群与文件存储 HDFS 版实例的挂载点使用相同阿里云VPC网络和交换机。 
- 迁移集群上安装的JDK版本不低于1.8。 
- 迁移集群上安装的Hadoop版本不低于2.7.2。 
 说明- 如果原集群满足上述条件且计算资源充足,可以直接将原集群当作迁移集群使用,不必额外创建新集群。 
- 在迁移集群中配置文件存储 HDFS 版实例。具体操作,请参见挂载文件存储HDFS版文件系统。 
- 验证迁移集群和文件存储 HDFS 版实例之间的连通性。 - 执行以下命令,在文件存储 HDFS 版上创建目录(例如/dfs_links)。 - hadoop fs -mkdir /dfs_links
- 执行以下命令,验证连通性。 - hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/dfs_links- 其中 - f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com为文件存储 HDFS 版挂载点域名,请根据您的实际情况进行修改。- 如果命令正常执行无输出结果,则表示连通成功。如果连通失败,请排查连通性问题。具体操作,请参见创建文件系统实例后,为什么无法访问文件存储 HDFS 版?。 
 
- 准备迁移工具。 - 您可以通过Hadoop社区标准的DistCp工具实现全量或增量的HDFS数据迁移。更多关于DistCp工具使用说明,请参见Hadoop DistCp工具官方说明文档。 说明- 使用 - hadoop distcp命令将原集群数据迁移至文件存储 HDFS 版时,请注意文件存储 HDFS 版不支持以下参数,其它参数使用和Hadoop DistCp工具官方说明文档一致。文件存储 HDFS 版及命令行存在限制的更多信息,请参见使用限制。- 参数 - 描述 - 状态 - -p[rbpax] - r:replication,b:block-size,p:permission,a:ACL,x:XATTR - 不可用 
数据迁移
下面介绍直接迁移和数据中转两种迁移方式,推荐使用直接迁移。
直接迁移
直接从原集群迁移数据到文件存储 HDFS 版,需要先连通原集群和迁移集群的网络环境,再执行数据迁移任务。
- 连通原集群与迁移集群的网络环境。 - 场景A:原集群在阿里云ECS实例上(包括EMR) - 如果在准备工作中将原集群当作迁移集群来使用,请直接执行步骤2中的迁移命令。 - 集群处于VPC网络环境,但无法访问文件存储 HDFS 版实例时,请参见使用云企业网跨VPC访问文件存储HDFS版。 
- 原集群处于经典网络时,建立ClassicLink连接。 
 
- 场景B:原集群在其他平台上。 - 使用阿里云高速通道产品连通原集群和迁移集群的网络环境。具体操作,请参见功能特性。 
 
- 在已配置文件存储 HDFS 版的集群上参考以下命令迁移数据。 - hadoop distcp hdfs://x.x.x.x:9000/user/hive/warehouse dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse
数据中转
如果原集群与迁移集群的网络无法连通,可以参考以下步骤迁移数据。
- 将对象存储OSS数据迁移到文件存储 HDFS 版。具体操作,请参见文件存储HDFS版和对象存储OSS双向数据迁移。 
- 将原集群数据迁移到对象存储OSS。具体操作,请参见离线迁移。 
常见问题
- 整体迁移速度受Hadoop集群与文件存储 HDFS 版之间的带宽、集群规模影响。同时传输文件越多,checksum需要的时间越长。如果迁移数据量大,建议先尝试迁移几个目录评估整体时间。如果只能在指定时间段内迁移数据,可以将目录切为几个小目录,依次迁移。 
- 一般全量数据同步时,需要一个短暂的业务停写过程,用来启用双写双算。 
- 迁移过程出现异常提示: - Cannot obtain block length for LocatedBlock。- 从原生的HDFS往对象存储OSS或文件存储 HDFS 版迁移数据时,可能会遇到这个问题。遇到该问题时,请执行 - hdfs fsck / -openforwrite命令,检查当前是否有文件处于写入状态尚未关闭。如果有处于写入状态的文件时,需判断文件是否有效。- 如果文件无效,则直接删除文件。 - hdfs rm <path-of-the-file>
- 如果文件有效,则不能直接删除,请考虑恢复问题文件租约。 - hdfs debug recoverLease -path <path-of-the-file> -retries <retry times>