大数据上云-HDFS数据迁移方案

一、离线迁移方案-闪电立方

离线迁移(闪电立方)是阿里云提供的安全、高效、便捷的数据迁移服务。通过定制化的迁移设备(闪电立方),实现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

若显示如下信息,则表示挂载成功。

大数据上云-HDFS数据迁移方案

3、创建迁移任务及执行配置

a、安装软件包到服务器

解压安装包 InstallPackage.zip。(迁移过程中会产生大量日志文件,请将安装包放在空间足够大的目录下)

  • 以root用户登录服务器。
  • 上传安装包InstallPackage.zip到适当位置(此处以放在/opt/Cube为例)。
  • 进入/opt/Cube目录。
  • cd /opt/Cube
  • 执行unzip InstallPackage.zip命令解压安装包。

大数据上云-HDFS数据迁移方案

b、创建及执行迁移任务

1)进入任务创建页面

  • 进入InstallPackage安装包的cube目录中,启动服务(以安装包放在服务器/opt/Cube下为例)
  • cd /opt/Cube/InstallPackage/cube
  • 输入命令 ./cube.sh

大数据上云-HDFS数据迁移方案

在闪电立方界面包括以下共 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 位,且需要包含大小写、英文字母、数字及特殊符号。

大数据上云-HDFS数据迁移方案

3)启动闪电立方服务

输入 1 ,再输入刚设置的密码,启动闪电立方服务。大数据上云-HDFS数据迁移方案

4)创建迁移任务

  • 输入3,创建任务。2> 输入1 (Download)
  • 输入2 (source type: local)
  • 输入2 (destination type:local)
  • 输入任务名称(job name),上传阿里云OSS后,此任务名称将成为OSS Bucket下的默认目录名。
  • 输入数据源路径(source path)
  • 输入目标路径(destlnation path)

【数据源路径和目标路径,要以/结尾,例如/mnt/sdlf/ 否则有数据丢失的风险。】

大数据上云-HDFS数据迁移方案

5)查看任务状态

大数据上云-HDFS数据迁移方案

参数说明:

Ø  JobName:任务名称

Ø  JobState:任务状态。当任务状态为Running时,说明该任务正在运行;任务状态为Succeed时,说明该任务已完成数据传输;任务状态为Failed时,说明任务失败,此时可输入 5 重新执行失败的任务。

Ø  PendingTasks:即将执行的任务数

Ø  DispatchedTasks:已发送任务数

Ø  RunningTasks:正在执行的任务数

Ø  SucceedTasks:已执行成功的任务数

Ø  FailedTasks:失败任务数

Ø  ScanFinished:扫描是否完成

6)重新执行失败的任务

  • 当任务的JobState显示为Failed时,需要重新执行失败任务。

大数据上云-HDFS数据迁移方案

  • 输入 5 → 输入失败的任务名称 → 输入 y ,每个失败的任务都需要这样

大数据上云-HDFS数据迁移方案

  • 重新执行失败任务后,等任务执行完毕,仍然看JobState的显示,如果是Succeed 则表示成功,如果是Failed,就再重试。

7)(可选)任务完成后,输入8,查看报表信息(文件数量和数据量)。

大数据上云-HDFS数据迁移方案

  • (可选)查看日志

在任务运行过程中,产生的所有运行状态等信息的日志都保存在 InstallPackage/cube/logs路径下,如/opt/Cube/InstallPackage/cube/logs。日志主要包括master.log和worker.log。其中master.log日志可看到所有任务执行的总体情况,执行任务名,执行状态,总任务量,已经成功的执行任务数,失败的任务数,所有的文件是否都扫描完毕等信息。如下示例:

大数据上云-HDFS数据迁移方案

查看worker.log日志可以追溯具体任务的运行状态、具体任务id、大小以及具体任务文件。如下示例:

大数据上云-HDFS数据迁移方案


二、在线迁移方案-通过工具将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的信息。

大数据上云-HDFS数据迁移方案

参数含义如下:

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

当全部文件传输成功时,系统返回如下信息。

大数据上云-HDFS数据迁移方案

在使用Jindo Distcp过程中,如果更多场景使用需求,可通过一系列参数来完成各种distcp操作,具体参考使用指南:

https://github.com/aliyun/alibabacloud-jindodata/blob/master/docs/user/3.x/jindo_distcp/jindo_distcp_how_to.md

4、Minioss方式数据迁移

如果用户HDFS无法通过Fuse挂载至计算节点,同时也需要离线迁移方式,阿里云也提供Minioss设备(由Minioss服务器+闪电立方组成),通过Jindo Distcp完成数据迁移工具,操作方式与写入OSS一致。

三、注意事项

1、数据迁移采用加密传输

闪电立方数据迁移支持明文和加密文件拷贝;如果采用加密拷贝,无法配置增量模式,并且由于加密拷贝会将若干文件打包成一个加密块,当有加密块中有文件迁移失败时,只能捞出整个加密块的文件,没法捞出具体某个失败文件,相当于加密块内所有文件都需要重新迁移,而且这些数据重新迁移时只能通过cp这类方式迁,因此建议对于有数据变动和数据量较大的数据迁移,采用明文迁移会更方便快捷些,这样对于迁移失败的文件会生成列表,后续根据列表重新迁移失败文件即可。

2、源文件系统中存在空目录及链接文件

闪电立方数据迁移不支持空目录和链接文件,MiniOSS数据迁移支持空目录,不支持链接文件。

上一篇:翻翻git之---自定义View实现水位上涨效果 WaveProgressView


下一篇:Android 自定义RecyclerView 实现真正的Gallery效果