一、离线迁移方案-闪电立方
离线迁移(闪电立方)是阿里云提供的安全、高效、便捷的数据迁移服务。通过定制化的迁移设备(闪电立方),实现TB到PB级别的本地数据迁移上云。致力于解决大规模数据传输效率、安全问题等难题。当本地机房带宽较小或无公网时,可先将数据迁移至闪电立方,再由阿里云工作人员将闪电立方设备运输至就近POP点上传数据至云上。使用闪电立方迁移HDFS数据时,需要将HDFS和闪电立方设备都挂载至计算节点上(推荐配置:Linux centos操作系统/ x86架构,24核CPU/128GB cache及以上的配置),具体步骤如下:
1、挂载HDFS至计算节点
a、部署CDH并下载hadoop-hdfs-fuse包。
登录计算节点(Linux系统)。执行以下命令安装hadoop-hdfs-fuse。
sudo yum install hadoop-hdfs-fuse
b、执行以下命令设置并测试挂载点。
非HA安装
mkdir -p
hadoop-fuse-dfs dfs://:
其中namenode_port为NameNode的RPC端口。
HA安装
mkdir -p
hadoop-fuse-dfs dfs:// 其中nameservice_id为fs.defaultFS的值。
c、按下Ctrl+C组合键结束fuse-dfs程序。
d、执行以下命令,清理测试。
umount
e、打开/etc/fstab,在底部添加如下行。
hadoop-fuse-dfs#dfs://: fuse allow_other,usetrash,rw 2 0
例如:hadoop-fuse-dfs#dfs://localhost:8020 /mnt/hdfs fuse allow_other,usetrash,rw 2
在HA部署中,使用HDFS命名服务,即“hdfs-site.xml”中“dfs.nameservices”的值而不是NameNode URI。
f、执行以下命令,测试以确保系统正常运行。
mount
系统配置为允许使用ls命令,并可以像使用普通系统磁盘一样使用该挂载点。
2、挂载闪电立方至计算节点
a、以root用户登录计算节点。
b、查看闪电立方设备的共享文件夹。其中业务IP地址请使用实际值替换(这里以 192.168.12.2 为例)。
showmount -e 192.168.12.2
此处共享文件夹查看结果以 /Pool-1/volume_1/cube为例,实际请按照showmount的显示结果。
c、创建挂载点。
mkdir /mnt/sdlf(sdlf为挂载的目录名,可以自行设置)
d、将闪电立方设备挂载到计算节点。其中业务IP地址请使用实际值替换(这里以 192.168.12.2 为例),共享文件夹请使用实际结果替换(这里以/Pool-1/volume_1/cube为例)。
mount 192.168.12.2:/Pool-1/volume_1/cube /mnt/sdlf/
e、检查挂载结果。
df -h
若显示如下信息,则表示挂载成功。
3、创建迁移任务及执行配置
a、安装软件包到服务器
解压安装包 InstallPackage.zip。(迁移过程中会产生大量日志文件,请将安装包放在空间足够大的目录下)
- 以root用户登录服务器。
- 上传安装包InstallPackage.zip到适当位置(此处以放在/opt/Cube为例)。
- 进入/opt/Cube目录。
- cd /opt/Cube
- 执行unzip InstallPackage.zip命令解压安装包。
b、创建及执行迁移任务
1)进入任务创建页面
- 进入InstallPackage安装包的cube目录中,启动服务(以安装包放在服务器/opt/Cube下为例)
- cd /opt/Cube/InstallPackage/cube
- 输入命令 ./cube.sh
在闪电立方界面包括以下共 9 个操作选项,分别为:
Ø 1.start service:启动闪电立方服务
Ø 2.stop service:停止闪电立方服务
Ø 3.submit job:创建并提交任务
Ø 4.delete job:删除已创建的任务
Ø 5.re-try failed-job:重试失败任务
Ø 7.get job status:获取工作任务状态
Ø 8.get download report:获取报表
Ø 9.Reset password:重置密码
Ø 0.exit menu:退出闪电立方界面,回到系统界面
2)设置密码
首次启动服务时,输入 9,设置密码。【此密码需要记录下来,上云时需提供给阿里云工作人员。】
说明:密码长度至少为 10 位,且需要包含大小写、英文字母、数字及特殊符号。
3)启动闪电立方服务
输入 1 ,再输入刚设置的密码,启动闪电立方服务。
4)创建迁移任务
- 输入3,创建任务。2> 输入1 (Download)
- 输入2 (source type: local)
- 输入2 (destination type:local)
- 输入任务名称(job name),上传阿里云OSS后,此任务名称将成为OSS Bucket下的默认目录名。
- 输入数据源路径(source path)
- 输入目标路径(destlnation path)
【数据源路径和目标路径,要以/结尾,例如/mnt/sdlf/ 否则有数据丢失的风险。】
5)查看任务状态
参数说明:
Ø JobName:任务名称
Ø JobState:任务状态。当任务状态为Running时,说明该任务正在运行;任务状态为Succeed时,说明该任务已完成数据传输;任务状态为Failed时,说明任务失败,此时可输入 5 重新执行失败的任务。
Ø PendingTasks:即将执行的任务数
Ø DispatchedTasks:已发送任务数
Ø RunningTasks:正在执行的任务数
Ø SucceedTasks:已执行成功的任务数
Ø FailedTasks:失败任务数
Ø ScanFinished:扫描是否完成
6)重新执行失败的任务
- 当任务的JobState显示为Failed时,需要重新执行失败任务。
- 输入 5 → 输入失败的任务名称 → 输入 y ,每个失败的任务都需要这样
- 重新执行失败任务后,等任务执行完毕,仍然看JobState的显示,如果是Succeed 则表示成功,如果是Failed,就再重试。
7)(可选)任务完成后,输入8,查看报表信息(文件数量和数据量)。
- (可选)查看日志
在任务运行过程中,产生的所有运行状态等信息的日志都保存在 InstallPackage/cube/logs路径下,如/opt/Cube/InstallPackage/cube/logs。日志主要包括master.log和worker.log。其中master.log日志可看到所有任务执行的总体情况,执行任务名,执行状态,总任务量,已经成功的执行任务数,失败的任务数,所有的文件是否都扫描完毕等信息。如下示例:
查看worker.log日志可以追溯具体任务的运行状态、具体任务id、大小以及具体任务文件。如下示例:
二、在线迁移方案-通过工具将HDFS数据直接写入OSS
当本地机房有连接至云上专线或公网带宽充足时,可直接通过工具将HDFS中数据拷贝迁移至阿里云OSS。针对OSS的特性,推荐使用功能强大且性能优越的Jindo DistCp 文件拷贝工具(相比较于Hadoop DistCp和S3 DistCp),大大缩短上云数据迁移时间消耗。Jindo DistCp提供jar包形式使用,您可以使用hadoop jar命令配合一系列参数来完成Distcp操作,具体步骤如下:
1、拷贝数据到 OSS 上
您可以使用如下命令将 hdfs 上的目录拷贝到 OSS 上:
hadop jar jindo-distcp-${version}.jar --src /data –dest oss://destBucket/ --ossKey yourkey --ossSecret yoursecret --ossEndPoint oss-cn-xxx.aliyuncs.com --parallelism 10
(ECS 环境推荐使用内网 ossEndPoint,即 oss-cn-xxx-internal.aliyuncs.com)
- --src:hdfs 的源路径
- --dest:oss 的目标路径
- --ossKey:oss 的 AccessKey
- --ossSecret:oss 的 AccessSecret
- --ossEndPoint:oss 的 endpoint 信息,可以公网或者内网endpoint
- --parallelism:任务并发大小,根据集群资源可调整
2、增量拷贝文件
如果 Distcp 任务因为各种原因中间失败了,而此时您想进行断点续传,只Copy剩下未Copy成功的文件。或者源端文件新增了部分文件,此时需要您在进行上一次 Distcp 任务完成后进行如下操作:
使用 --update 命令
使用 --update 命令时,默认开启checksum比较,也可通过 --disableChecksum 关闭。 开启时,比较的方式是,从 hdfs 中获取的 checksum,判断与上次拷贝时记录在 OSS 中的 checksum 是否相同。因此仅支持比较通过3.4.0 及以上版本拷贝得到的文件,如希望增量比较老版本拷贝得到的文件,推荐关闭 checksum 比较。
hadoop jar jindo-distcp-${version}.jar --src /data --dest oss://destBucket/ --ossKey yourkey --ossSecret yoursecret --ossEndPoint oss-cn-xxx.aliyuncs.com --update --parallelism 20
(ECS 环境推荐使用内网 ossEndPoint,即 oss-cn-xxx-internal.aliyuncs.com)
关闭时,仅对文件名和文件大小做比较。
hadoop jar jindo-distcp-${version}.jar --src /data --dest oss://destBucket/ --ossKey yourkey --ossSecret yoursecret --ossEndPoint oss-cn-xxx.aliyuncs.com --update --disableChecksum --parallelism 20
(ECS 环境推荐使用内网 ossEndPoint,即 oss-cn-xxx-internal.aliyuncs.com)
如果所有文件都传输完成,则会提示如下信息。
INFO distcp.JindoDistCp: Jindo DistCp job exit with 0.
(--disableChecksum:跳过传输时对 checksum 的计算和检查)
3、Jindo DistCp成功导完数据后,验证数据完整性
可以通过两种方式进行验证
a、统计源/目标文件数及字节数大小
- Jindo DistCp Counters
您可以在MapReduce任务结束的Counter信息中,获取Distcp Counters的信息。
参数含义如下:
o Bytes Destination Copied:表示目标端写文件的字节数大小。
o Bytes Source Read:表示源端读文件的字节数大小。
o Files Copied:表示成功Copy的文件数。
b、对比源/目标文件
- Jindo DistCp --diff
您可以使用--diff命令,进行源端和目标端的文件比较。该命令会对文件名和文件大小进行比较,记录遗漏或者未成功传输的文件,存储在提交命令的当前目录下,生成manifest文件,示例如下:
Hadoop jar jindo-distcp-.jar -src/data/incoming/hourly_table --dest oss://destBucket/hourly_table --ossKey yourkey –ossSecret yoursecret --ossEndPoint oss-cn-hangzhou.aliyuncs.com --diff
当全部文件传输成功时,系统返回如下信息。
在使用Jindo Distcp过程中,如果更多场景使用需求,可通过一系列参数来完成各种distcp操作,具体参考使用指南:
4、Minioss方式数据迁移
如果用户HDFS无法通过Fuse挂载至计算节点,同时也需要离线迁移方式,阿里云也提供Minioss设备(由Minioss服务器+闪电立方组成),通过Jindo Distcp完成数据迁移工具,操作方式与写入OSS一致。
三、注意事项
1、数据迁移采用加密传输
闪电立方数据迁移支持明文和加密文件拷贝;如果采用加密拷贝,无法配置增量模式,并且由于加密拷贝会将若干文件打包成一个加密块,当有加密块中有文件迁移失败时,只能捞出整个加密块的文件,没法捞出具体某个失败文件,相当于加密块内所有文件都需要重新迁移,而且这些数据重新迁移时只能通过cp这类方式迁,因此建议对于有数据变动和数据量较大的数据迁移,采用明文迁移会更方便快捷些,这样对于迁移失败的文件会生成列表,后续根据列表重新迁移失败文件即可。
2、源文件系统中存在空目录及链接文件
闪电立方数据迁移不支持空目录和链接文件,MiniOSS数据迁移支持空目录,不支持链接文件。