详情页标题前

阿里云对象存储OSS从HDFS迁移数据到OSS-云淘科技

详情页1

本文以阿里云EMR集群为例,说明如何使用阿里云Jindo DistCp将数据从HDFS迁移OSS

背景信息

在传统大数据领域,HDFS经常作为大规模数据的底层存储。在进行数据迁移、数据拷贝的场景中,最常用的是Hadoop自带的DistCp工具。但是该工具不能很好利用对象存储OSS的特性,导致效率低下并且不能保证数据一致性。此外,该工具提供的功能选项较单一,无法很好地满足用户的需求。

阿里云Jindo DistCp(分布式文件拷贝工具)用于大规模集群内部或集群之间拷贝文件。Jindo DistCp使用MapReduce实现文件分发,错误处理和恢复,把文件和目录的列表作为MapReduce任务的输入,每个任务会完成源列表中部分文件的拷贝。全量支持HDFS之间、HDFS与OSS之间、以及OSS之间的数据拷贝场景,提供多种个性化拷贝参数和多种拷贝策略。

相对于Hadoop DistCp,使用阿里云Jindo DistCp从HDFS迁移数据到OSS具有以下优势:

  • 效率高,在测试场景中最高可达到1.59倍的加速。

  • 基本功能丰富,提供多种拷贝方式和场景优化策略。

  • 深度结合OSS,对文件提供归档、压缩等操作。

  • 实现No-Rename拷贝,保证数据一致性。

  • 场景全面,可完全替代Hadoop DistCp,目前支持Hadoop2.7+和Hadoop3.x。

前提条件

已创建3.28.0及以上版本EMR集群。具体步骤,请参见创建集群。

3.28.0及以上版本EMR集群可以通过Shell命令的方式使用Jindo DistCp。更多信息,请参见Jindo DistCp使用说明。3.28.0以下版本的EMR集群,可能存在兼容性问题,您可以通过提交工单申请处理。

如果您使用的是自建ECS集群,需要具备Hadoop2.7+或Hadoop3.x环境以及进行MapReduce作业的能力。

步骤一:下载JAR包

  1. 登录EMR集群。

    1. 登录EMR on ECS控制台。

    2. 单击创建的EMR集群。

    3. 单击节点管理页签,然后单击节点组左侧的阿里云对象存储OSS从HDFS迁移数据到OSS-云淘科技

    4. 单击ECS ID。在ECS实例页面,单击实例ID右侧的远程连接

    如果您希望使用SSH方式(SSH密钥对或SSH密码)在Windows和Linux环境中登录集群,请参见登录集群。

  2. 下载并解压最新版本的Jindosdk-${version}.tar.gz。下载地址,请参见JindoData下载。

步骤二:配置OSS的AccessKey

您可以选择以下任意方式配置OSS的AccessKey。

在示例命令中配置AccessKey

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --parallelism 10

通过配置文件预先配置AccessKey

  1. 进入Hadoop配置文件core-site.xml所在目录。

    cd /etc/emr/hadoop-conf/

    关于EMR中常用文件路径的更多信息,请参见常用文件路径。

  2. 打开core-site.xml文件。

    vim core-site.xml
  3. 在core-site.xml文件中添加以下配置。

    
        
            fs.oss.accessKeyId
            xxx
        
    
        
            fs.oss.accessKeySecret
            xxx
        
    
        
            fs.oss.endpoint
            
            oss-cn-xxx.aliyuncs.com
        
    

配置免密登录

配置免密登录,避免明文保存AccessKey,提高安全性。具体操作,请参见使用JindoFS SDK免密功能。

步骤三:迁移或拷贝数据

  1. 使用以下命令查看HDFS下的数据。

    hdfs dfs -ls /

    返回结果如下:

    Found 8 items
    drwxrwxrwx   - admin  supergroup          0 2023-10-26 10:55 /.sysinfo
    drwxrwxrwx   - hadoop supergroup          0 2023-10-26 10:55 /apps
    drwxrwxrwx   - root   supergroup          0 2022-08-03 15:54 /data
    -rw-r-----   1 root   supergroup         13 2022-08-25 11:45 /examplefile.txt
    drwxrwxrwx   - spark  supergroup          0 2023-10-26 14:49 /spark-history
    drwx-wx-wx   - hive   supergroup          0 2023-10-26 13:35 /tmp
    drwxrwxrwx   - hive   supergroup          0 2023-10-26 14:48 /user
    drwxrwxrwx   - hadoop supergroup          0 2023-10-26 14:48 /yarn
  2. 切换至jindo-distjob-tool-${version}.jar包所在目录。

    cd /opt/apps/JINDOSDK/jindosdk-current/tools
  3. 将HDFS中的数据迁移至OSS。

    全量迁移或拷贝数据

    将HDFS指定目录/tmp下的数据全量迁移或拷贝到OSS目标路径oss://examplebucket,示例命令如下:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --parallelism 10

    示例中涉及的各参数或选项说明如下:

    参数及选项

    说明

    示例

    –src

    待迁移或拷贝的HDFS数据所在的路径。

    /tmp/

    –dest

    OSS中存放迁移或拷贝数据的目标路径。

    oss://examplebucket/

    –hadoopConf

    指定拥有访问OSS权限的AccessKey ID、AccessKey Secret以及Endpoint。

    • 关于获取AccessKey ID以及AccessKey Secret的具体操作,请参见创建AccessKey。

    • 关于OSS支持的地域(Region)和对应的访问域名(Endopoint)列表信息,请参见访问域名和数据中心。

      重要

      ECS环境下推荐使用内网 ossEndPoint,即oss-cn-xxx-internal.aliyuncs.com。

    –hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** –hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** –hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com

    –parallelism

    根据集群资源调整任务并发数。

    10

    增量迁移或拷贝数据

    如果您仅希望拷贝在上一次全量迁移或拷贝后源路径下新增的数据,此时您可以结合–update选项完成数据的增量迁移或拷贝。

    将HDFS指定目录/tmp下的数据增量迁移或拷贝到OSS目标路径oss://examplebucket/,示例命令如下:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --update --parallelism 10

    使用–update选项时,默认开启校验和Checksum。开启后,DistCp将对源路径和目标路径的文件名称、文件大小以及文件的Checksum进行比较。如果源路径或目标路径下的文件名称、文件大小或者文件的Checksum不一致时,将自动触发增量迁移或拷贝任务。

    如果您不需要对源路径和目标路径的文件的Checksum进行比较,请增加–disableChecksum选项关闭Checksum校验,示例命令如下:

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --update --disableChecksum --parallelism 10

附录一:Jindo DistCp支持的参数及选项

Jindo DistCp提供一系列的参数及选项。您可以通过以下命令获取各参数及选项的具体用法。

hadoop jar jindo-distcp-tool-${version}.jar --help

各参数及选项的含义及其示例如下表所示。

参数及选项

说明

示例值

–src

指定拷贝的源路径。

–src oss://examplebucket/sourcedir

–dest

指定拷贝的目标路径。

–dest oss://examplebucket/destdir

–bandWidth

指定本次DistCp任务所用的单机带宽,单位为 MB。

–bandWidth 6

–codec

指定文件的压缩方式。当前版本支持编解码器gzip、gz、lzo、lzop和snappy,以及关键字none和keep。关键字含义如下:

  • none:保存为未压缩的文件。如果文件已压缩,则Jindo DistCp会将其解压缩。

  • keep(默认值):不更改文件压缩形态。

说明

如果您需要在开源Hadoop集群环境中使用lzo的压缩方式,请确保已安装gplcompression的native库和hadoop-lzo包。如果缺少相关环境,建议使用其他压缩方式进行压缩。

–codec gz

–policy

指定拷贝到OSS后的文件类型。取值:

  • ia:低频访问

  • archive:归档存储

  • coldArchive:冷归档存储

–policy coldArchive

–filters

通过filters参数指定一个文件路径。在这个文件中,每一行配置一个正则表达式,对应DistCp任务中不需要拷贝或比对的文件。

–filters test.txt

–srcPrefixesFile

指定需要拷贝的文件列表,列表里文件以src路径作为前缀。

–srcPrefixesFile prefixes.txt

–parallelism

指定MR任务里的 mapreduce.job.reduces参数。您可以根据集群的资源情况自定义parallelism 的大小,以控制distcp任务的并发度。

说明

该参数在EMR环境中默认值为7。

–parallelism 20

–tmp

指定在使用DistCp工具的过程中,用于存放临时文件的目录。

–tmp /tmp

–hadoopConf

指定拥有访问OSS权限的AccessKey及Endpoint。

–hadoopConf fs.oss.accessKeyId=yourkey –hadoopConf fs.oss.accessKeySecret=yoursecret –hadoopConf fs.oss.endpoint=oss-cn-xxx.aliyuncs.com

–disableChecksum

关闭Checksum校验。

–disableChecksum

–deleteOnSuccess

指定在拷贝任务完成后删除源路径下的文件。

–deleteOnSuccess

–enableTransaction

JindoDistCp默认使用task级别完整性。如果您需要保证Job级别的完整性以及保证Job之间的事务支持,您可以使用–enableTransaction参数。

–enableTransaction

–ignore

忽略数据迁移期间发生的异常,相关报错不会中断任务,并最终以DistCp Counter的形式透出。如果使用了–enableCMS,也会通过指定方式进行通知。

-ignore

–diff

查看本次拷贝是否完成全部文件拷贝,并对未完成拷贝的文件生成文件列表。

–diff

–update

使用增量同步功能,即仅同步上一次全量迁移或拷贝后源路径下新增的数据到目标路径。

–update

–preserveMeta

迁移数据的同时迁移包括Owner,Group,Permission,Atime,Mtime,Replication,BlockSize,XAttrs,ACL等元数据信息。

–preserveMeta

–jobBatch

指定每个distcp任务处理的文件数量,默认值为1000。

–jobBatch 1000

–taskBatch

指定每个distcp子任务处理的文件数量,默认值为10。

–taskBatch 10

附录二:场景示例

场景一:使用JindoDistCp成功传输数据后,如何验证数据完整性?

JindoDistCp提供了以下两种方式用于验证数据的完整性。

  • 方式一:DistCp Counters

    通过Distcp Counters信息中包含的BYTES_EXPECTED、FILES_EXPECTED等参数验证数据完整性。

    示例
        JindoDistcpCounter
            BYTES_COPIED=10000
            BYTES_EXPECTED=10000
            FILES_COPIED=11
            FILES_EXPECTED=11
            ...
        Shuffle Errors
            BAD_ID=0
            CONNECTION=0
            IO_ERROR=0
            WRONG_LENGTH=0
            WRONG_MAP=0
            WRONG_REDUCE=0

    示例中可能包含的Counter参数如下:

    参数

    说明

    BYTES_COPIED

    拷贝成功的字节数。

    BYTES_EXPECTED

    预期拷贝的字节数。

    FILES_COPIED

    拷贝成功的文件数。

    FILES_EXPECTED

    预期拷贝的文件数。

    FILES_SKIPPED

    增量拷贝时跳过的文件数。

    BYTES_SKIPPED

    增量拷贝时跳过的字节数。

    COPY_FAILED

    拷贝失败的文件数,不为0时触发告警。

    BYTES_FAILED

    拷贝失败的字节数。

    DIFF_FILES

    源路径与目标路径下不相同的文件数,不为0时触发告警。

    DIFF_FAILED

    文件比较操作异常的文件数,并计入DIFF_FILE。

    SRC_MISS

    源路径下不存在的文件数,并计入DIFF_FILES。

    DST_MISS

    目标路径下不存在的文件数,并计入DIFF_FILES。

    LENGTH_DIFF

    源文件和目标文件大小不一致的数量,并计入DIFF_FILES。

    CHECKSUM_DIFF

    Checksum校验失败的文件数,并计入COPY_FAILED。

    SAME_FILES

    源路径与目标路径下完全相同的文件数。

  • 方式二:通过–diff选项

    您可以在示例中结合–diff选项对源路径和目标路径下文件名和文件大小进行比较。

    hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --diff

场景二:如果要以低频访问、归档或者冷归档的方式存储写入OSS的文件,该使用哪些参数?

您可以在示例中添加–policy选项来指定写入OSS文件的存储类型。以下以指定为低频访问类型为例:

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --policy ia --parallelism 10

如果需要指定为归档存储类型,请将–policy ia替换为–policy archive。如需指定为冷归档存储类型,请将–policy ia替换为–policy coldArchive。此外,目前冷归档存储仅支持部分地域,更多信息,请参见冷归档存储(Cold Archive)。

场景三:迁移或者拷贝任务完成后,希望仅保留目标路径下的数据,且删除源路径下的指定数据,该使用哪些参数?

您可以结合–deleteOnSuccess选项,在迁移或者拷贝任务完成后,仅保留OSS目标路径下的数据,并删除HDFS源路径下的指定数据。

hadoop jar jindo-distcp-tool-${version}.jar --src /tmp/ --dest oss://examplebucket/ --hadoopConf fs.oss.accessKeyId=LTAI5t7h6SgiLSganP2m**** --hadoopConf fs.oss.accessKeySecret=KZo149BD9GLPNiDIEmdQ7dyNKG**** --hadoopConf fs.oss.endpoint=oss-cn-hangzhou.aliyuncs.com --deleteOnSuccess --parallelism 10

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/158882.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云对象存储OSSGo错误处理-云淘科技

    本文介绍Go SDK的错误处理。 客户端错误 Go SDK中调用出错会统一返回error接口,该接口定义如下: type error interface { Error() string } 其它错误继承该接口。比如HTTP错误请求返回的错误如下: //net.Error type Error interface { error Timeout() bool…

    阿里云对象存储 2023年12月10日
  • 阿里云对象存储OSSJava数据复制-云淘科技

    数据复制是以异步(近实时)方式将源Bucket中的文件(Object)以及对Object的创建、更新和删除等操作自动复制到目标Bucket。OSS支持跨区域复制(Cross-Region Replication)和同区域复制(Same-Region Replication)。 注意事项 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地…

    阿里云对象存储 2023年12月10日
  • 阿里云对象存储OSS0003-00000501-云淘科技

    问题描述 请求被拒绝。 问题原因 您发起的请求头中没有Referer字段或Referer字段为空,与请求Bucket设置的防盗链策略不相符。 问题示例 例如,您请求的Bucket的防盗链配置中AllowEmptyReferer取值为false,表示不允许Referer字段为空的请求访问OSS。 false *.example.com 您发起的以下请求中没有携…

    阿里云对象存储 2023年12月10日
  • 阿里云对象存储OSSRuby异常处理-云淘科技

    使用SDK时如果请求出错,会有相应的异常抛出,同时在log(默认为程序运行目录下oss_sdk.log)中也会记录详细的出错信息。OSS Ruby SDK中有ClientError和ServerError两种异常,这两种异常均为RuntimeError的子类。 ClientError ClientError指SDK内部出现的异常,例如参数设置错误、断点续传上…

    阿里云对象存储 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云RDS数据库数据迁移方案概览-云淘科技

    RDS提供了多种数据迁移方案,可满足不同上云或迁云的业务需求,使您可以在不影响业务的情况下平滑将数据库迁移至阿里云云数据库RDS上面。 通过使用阿里云数据传输服务(DTS),您可以实现SQL Server数据库的结构迁移和全量迁移。 下表列出了RDS支持的上云、迁云、数据导出场景以及相关的操作链接: 使用场景 相关操作 将本地数据库迁移到云数据库 SQL S…

    阿里云数据库 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。