【OSS】从HDFS迁移数据到OSS

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 本文介绍如何使用阿里云Jindo DistCp从HDFS迁移数据到OSS。

背景信息


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

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

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

  • 效率高,在测试场景中最高可达到1.59倍的加速。
  • 基本功能丰富,提供多种拷贝方式和场景优化策略。
  • 深度结合OSS,对文件提供直接归档和低频、压缩等操作。
  • 实现No-Rename拷贝,保证数据一致性。
  • 场景全面,可完全替代Hadoop DistCp,目前支持Hadoop2.7+和Hadoop3.x。


前提条件


  • 如果您使用的是自建ECS集群,需要具备Hadoop2.7+或Hadoop3.x环境以及进行MapReduce作业的能力。
  • 如果您使用的是阿里云E-MapReduce:
  • 对于EMR3.28.0/bigboot2.7.0及以上的版本,可以通过Shell命令的方式使用Jindo DistCp。详情请参见Jindo DistCp使用说明
  • 对于EMR3.28.0以下的版本,可能会存在一定的兼容性问题,您可以通过提交工单申请处理。


步骤1:下载JAR包



步骤2:配置OSS的访问密钥AccessKey


您可以通过以下任意方式配置AccessKey:

  • 在命令中指定--key--secret--endPoint参数选项来指定AccessKey。示例命令如下:
hadoop jar jindo-distcp-2.7.3.jar --src /data/incoming/example_file --dest oss://example_folder/example_file --key yourAccessKeyId --secret yourAccessKeySecret --endPoint oss-cn-hangzhou.aliyuncs.com
  • --src:指定源文件路径,该示例为/data/incoming/example_file
  • --dest:指定目标文件路径,该示例为oss://example_folder/example_file
  • --key:您的AccessKey ID。关于AccessKey ID的介绍请参见创建AccessKey
  • --secret:您的AccessKey Secret。关于AccessKey Secret的介绍请参见创建AccessKey
  • --endPoint:目标文件的Bucket所在地域(Region)对应的访问域名(Endpoint),该示例为oss-cn-hangzhou.aliyuncs.com。关于OSS支持的地域和对应的访问域名列表信息,请参见访问域名和数据中心


  • 将OSS的--key--secret--endPoint预先配置在Hadoop的core-site.xml文件里。配置如下:
<configuration>
    <property>
        <name>fs.jfs.cache.oss-accessKeyId</name>
        <value>yourAccessKeyId</value>
    </property>
    <property>
        <name>fs.jfs.cache.oss-accessKeySecret</name>
        <value>yourAccessKeySecret</value>
    </property>
    <property>
        <name>fs.jfs.cache.oss-endpoint</name>
        <value>Endpoint</value>
    </property>
</configuration>



步骤3:设置相关参数

Jindo DistCp提供多种实用功能及其对应的参数选择。参数含义及其示例如下表所示。详细的使用方法和完整的命令示例请参见Jindo DistCp使用指南

参数 是否必须 含义 示例
--src 指定拷贝的源路径。 --src oss://exampleBucket/sourceDir
--dest 指定拷贝的目标路径 --dest oss://exampleBucket/destDir
--parallelism 指定拷贝的任务并行度,可根据集群资源调节。 --parallelism 10
--policy 指定拷贝到OSS后的文件类型。取值:
  • archive(归档)
  • ia(低频)
--policy archive
--srcPattern 指定正则表达式来选择或者过滤需要拷贝的文件。您可以编写自定义的正则表达式来完成过滤操作,正则表达式必须为全路径正则匹配。 拷贝以.log结尾的文件:

--srcPattern .*\.log

--deleteOnSuccess 指定是否在拷贝完成后删除源路径下的文件。 --deleteOnSuccess
--outputCodec 指定拷贝文件按何种方式压缩。当前版本支持编解码器gzip、gz、lzo、lzop和snappy,以及关键字none和keep,含义如下:
  • none:保存为未压缩的文件。如果文件已压缩,则Jindo DistCp会将其解压缩。
  • keep(默认):不更改文件压缩形态,按原样复制。
--outputCodec gzip
srcPrefixesFile 指定需要拷贝的文件列表,列表里文件以src路径作为前缀。 --srcPrefixesFile file:///opt/folders.txt
--outputManifest 指定在dest目录下生成一个gzip压缩的文件,记录已完成拷贝的文件信息。 --outputManifest=manifest-2020-04-17.gz
--requirePreviousManifest 指定本次拷贝是否需要读取之前已拷贝的文件信息。取值:
  • false:不读取,拷贝全量数据。
  • true:读取,仅拷贝增量数据。
--requirePreviousManifest=false
--previousManifest 指定本次拷贝需要读取之前已拷贝文件的信息,完成增量更新。 --previousManifest=oss://exampleBucket/manifest-2020-04-16.gz
--copyFromManifest 从已完成的Manifest文件中进行拷贝,通常和--previousManifest配合使用。 --previousManifest oss://exampleBucket/manifest-2020-04-16.gz --copyFromManifest
--groupBy 指定正则表达式将符合规则的文件进行聚合,和targetSize选项配合使用。 --groupBy='.*/([a-z]+).*.txt'
--targetSize 指定聚合后的文件大小阈值,单位为MB。 --targetSize=10
--enableBalancePlan 执行策略,适用于数据量差异不大的场景。 --enableBalancePlan
--enableDynamicPlan 执行策略,适用于数据量差异较大的场景,例如大文件和小文件混合的场景。 --enableDynamicPlan
--enableTransaction 执行策略,保证Job级别的一致性,默认是Task级别 --enableTransaction
--diff 对比策略,查看本次拷贝是否完成全部文件拷贝,未完成会生成文件列表。 --diff
--key 指定OSS访问的AccessKey ID。 --key yourAccessKeyId
--secret 指定OSS访问的AccessKey Secret。 --secret yourAccessKeySecret
--endPoint 指定OSS访问的地域信息。 --endPoint oss-cn-hangzhou.aliyuncs.com
--cleanUpPending 清理OSS残留文件,这可能会花费一定的时间。 --cleanUpPending
相关实践学习
对象存储OSS快速上手——如何使用ossbrowser
本实验是对象存储OSS入门级实验。通过本实验,用户可学会如何用对象OSS的插件,进行简单的数据存、查、删等操作。
相关文章
|
11月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
8月前
|
存储 监控 调度
阿里云对象存储OSS之间进行数据转移教程
讲解如何在阿里云对象存储OSS之间进行跨账号、跨地域、以及同地域内的数据迁移,包括数据迁移之前的准备工作和实施数据迁移以及一些后续操作
|
8月前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
11月前
|
存储 人工智能 测试技术
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
OSSFS 2.0通过轻量化协议设计、协程化技术及FUSE3低级API重构,实现大文件顺序读写与小文件高并发加载的显著提升,在实际测试中表现出高达数十倍的吞吐量增长。适用于机器学习训练、推理等对高带宽低延迟要求严苛的场景,同时支持静态和动态挂载方式,方便用户在ACK集群中部署使用。
1281 34
|
存储 Ubuntu 数据管理
使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据
通过 `s3cmd` 2.x 和 Cyberduck,你可以轻松管理 DigitalOcean Spaces 中的数据。`s3cmd` 提供了强大的命令行操作能力,适合脚本化和自动化任务,而 Cyberduck 提供了直观的图形界面,便于日常手动操作。掌握这两种工具的使用方法,将极大提高你的数据管理效率。希望本文能帮助你更好地使用 DigitalOcean Spaces。
323 7
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
311 4
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
400 0
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
247 0
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
315 0
|
Java 对象存储 Perl
oss迁移以及校验
oss的数据迁移以及一致性校验
2575 0