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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 大数据时代,大数据处理系统已成为各行业各类公司经营过程中不可或缺的重要生产系统之一,不管是辅助业务经营分析,为企业运营提供决策数据依据,还是进行用户行为信息分析,提供精确的用户画像,在数据计算处理(批式、流式)、查询分析都发挥着重要的作用。Hadoop 作为目前应用最为广泛的分布式大数据平台,基本都采用HDFS分布式文件系统作为整个hadoop体系的存储底座,负责数据的存储与管理。在上云过程中,阿里云提供一系列便利的迁移服务和工具来实现HDFS的数据迁移上云,用户可根据自身网络带宽情况,选择离线迁移及在线迁移两种方式进行HDFS的数据迁移。本文主要讨论在上云过程中HDFS数据迁移的方案和步骤

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

离线迁移(闪电立方)是阿里云提供的安全、高效、便捷的数据迁移服务。通过定制化的迁移设备(闪电立方),实现TBPB级别的本地数据迁移上云。致力于解决大规模数据传输效率、安全问题等难题。当本地机房带宽较小或无公网时,可先将数据迁移至闪电立方,再由阿里云工作人员将闪电立方设备运输至就近POP点上传数据至云上。使用闪电立方迁移HDFS数据时,需要将HDFS和闪电立方设备都挂载至计算节点上(推荐配置:Linux centos操作系统/   x86架构,24CPU/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_portNameNodeRPC端口。

HA安装

mkdir -p

hadoop-fuse-dfs dfs://  其中nameservice_idfs.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/sdlfsdlf为挂载的目录名,可以自行设置)

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

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

图片 1.png

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

a、安装软件包到服务器

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

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

图片 2.png

b、创建及执行迁移任务

1)进入任务创建页面

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

图片 3.png

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

图片 4.png

3)启动闪电立方服务

输入 1 ,再输入刚设置的密码,启动闪电立方服务。图片 5.png

4)创建迁移任务

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

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

图片 6.png

5)查看任务状态

图片 7.png

参数说明:

Ø  JobName:任务名称

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

Ø  PendingTasks:即将执行的任务数

Ø  DispatchedTasks:已发送任务数

Ø  RunningTasks:正在执行的任务数

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

Ø  FailedTasks:失败任务数

Ø  ScanFinished:扫描是否完成

6)重新执行失败的任务

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

image.png

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

image.png

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

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

图片 8.png

  • (可选)查看日志

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

图片 9.png

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

图片 10.png


二、在线迁移方案-通过工具将HDFS数据直接写入OSS

当本地机房有连接至云上专线或公网带宽充足时,可直接通过工具将HDFS中数据拷贝迁移至阿里云OSS。针对OSS的特性,推荐使用功能强大且性能优越的Jindo DistCp 文件拷贝工具(相比较于Hadoop DistCpS3 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)

  • --srchdfs 的源路径
  • --destoss 的目标路径
  • --ossKeyoss 的 AccessKey
  • --ossSecretoss 的 AccessSecret
  • --ossEndPointoss 的 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的信息。

图片 11.png

参数含义如下:

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

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

图片 12.png

在使用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数据迁移支持空目录,不支持链接文件。

相关文章
|
3月前
|
分布式计算 关系型数据库 数据库连接
MaxCompute数据问题之数据迁移如何解决
MaxCompute数据包含存储在MaxCompute服务中的表、分区以及其他数据结构;本合集将提供MaxCompute数据的管理和优化指南,以及数据操作中的常见问题和解决策略。
39 0
|
5月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
268 0
|
5月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
148 0
|
11天前
|
机器学习/深度学习 SQL 分布式计算
MaxCompute产品使用合集之大数据计算MaxCompute如果要把A的数据迁移到B,操作步骤是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
11天前
|
分布式计算 DataWorks 大数据
MaxCompute操作报错合集之在使用 MaxCompute 的 MMA(Multi-Modal Analytics)进行跨 Region 数据迁移时,在配置数据源时遇到错误,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
16天前
|
存储 分布式计算 大数据
[AIGC 大数据基础]浅谈hdfs
[AIGC 大数据基础]浅谈hdfs
|
16天前
|
存储 分布式计算 运维
[AIGC 大数据基础] 浅谈hdfs
[AIGC 大数据基础] 浅谈hdfs
|
5月前
|
SQL 分布式计算 大数据
大数据技术之集群数据迁移
大数据技术之集群数据迁移
55 0
|
5月前
|
SQL 分布式计算 Hadoop
[AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅
[AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅
|
5月前
|
分布式计算 Hadoop 大数据
大数据成长之路-- hadoop集群的部署(3)HDFS新增节点
大数据成长之路-- hadoop集群的部署(3)HDFS新增节点
78 0