数据湖就像是一个“大水池”,是一种把各类异构数据进行集中存储的架构。数据湖是一种存储架构,在阿里云上可以利用OSS对象存储,来当数据湖的地基。企业基于阿里云服务,可以快速挖出一个适合自己的"湖",而且这个"湖"根据需求,可大可小,按"注水量"付费。在挖好这个"湖"后,重要的步骤就是如何把各种异构数据注入到湖里。在传统的大数据领域用户经常使用HDFS作为异构数据的底层存储来储存大量的数据,其中大部分可通过离线数据迁移来注入到以OSS作为底层存储的数据湖中。在进行数据迁移、数据拷贝的场景中,大家选择最常用的离线数据迁移工具是Hadoop自带的DistCp工具,但是它不能很好利用对象存储系统如OSS的特性,导致效率低下并且不能最终保证一致性,提供的功能选项也比较简单,不能很好的满足用户的需求。此时一个高效、功能丰富的离线数据迁移工具成为影响离线数据入湖效率的重要因素。
随着阿里云JindoFS SDK的全面放开使用,基于JindoFS SDK的数据湖离线数据迁移利器JindoDistCp现在也全面面向用户开放使用。JindoDistCp是阿里云E-MapReduce团队开发的大规模集群内部和集群之间分布式文件拷贝的工具。 它使用MapReduce实现文件分发,错误处理和恢复,把文件和目录的列表作为map/reduce任务的输入,每个任务会完成源列表中部分文件的拷贝。目前全面支持HDFS/S3/OSS之间的数据拷贝场景,提供多种个性化拷贝参数和多种拷贝策略。重点优化从HDFS和S3到数据湖底座OSS的数据拷贝场景,通过定制化CopyCommitter,实现No-Rename拷贝,并保证数据拷贝落地的一致性。功能覆盖S3DistCp和HadoopDistCp的功能,性能较HadoopDistCp有较大提升,目标提供高效、稳定、安全的数据湖离线数据迁移工具。本文主要介绍如何使用JindoDistCp来进行基本离线数据迁移,以及如何在不同场景下提高离线数据迁移性能。值得一提的是,此前JindoDistCp 仅限于E-MapReduce产品内部使用,此次全方位面向整个阿里云OSS/HDFS用户放开,并提供官方维护和支持技术,欢迎广大用户集成和使用。
HadoopDistCp
HadoopDistCp是Hadoop集成的分布式数据迁移工具,提供了基本文件拷贝、覆盖拷贝、指定map并行度、log输出路径等功能。在Hadoop2x上对DistCp进行了部分优化例如拷贝策略的选择,默认使用 uniformsize(每个 map 会平衡文件大小)如果指定 dynamic,则会使用 DynamicInputFormat。这些功能优化了普通hdfs间数据拷贝,但是对于对象存储系统如OSS缺少数据写入方面的优化。
S3DistCp
S3DistCp是AWS为S3上存储提供的distcp工具, S3DistCp是HadoopDistCp 的扩展,它进行了优化使得其可以和S3结合使用,并新增了一些实用功能。新增功能如增量复制文件、复制文件时指定压缩方式、根据模式进行数据聚合、按照文件清单进行拷贝等。
JindoDistCp
JindoDistCp是一个简单易用的分布式文件拷贝工具,目前主要用在E-Mapreduce集群内,主要提供HDFS和S3到OSS的数据迁移服务,相比于HadoopDistCp和S3DistCp,JindoDistCp做了很多优化以及新增了许多个性化功能,并且深度结合OSS对象存储的特性,定制化CopyCommitter,实现No-Rename拷贝,大大缩短离线数据入湖迁移时间消耗。
为什么使用 JindoDistCp?
1、效率高,在测试场景中最高可到1.59倍的加速,大大提高数据湖离线数据迁移效率。
2、基本功能的选项丰富,提供多种拷贝方式和场景优化策略。
3、深度结合OSS,迁移后的文件直接以归档和低频、压缩等方式存放, 无需额外操作。
4、实现No-Rename拷贝,保证数据一致性。
5、场景全面,可完全替代HadoopDistCp,支持多Hadoop版本。
使用 JindoDistCp 性能提升多少?
我们做了一个JindoDistCp和HadoopDistCp的性能对比,在这个测试中我们以HDFS到OSS离线数据迁移为主要场景,利用Hadoop自带的测试数据集TestDFSIO分别生成1000个10M、1000个500M、1000个1G大小的文件进行从HDFS拷贝数据到OSS上的测试过程。
分析测试结果,可以看出JindoDistCp相比HadoopDistCp具有较大的性能提升,在测试场景中最高可达到1.59倍加速效果。
使用工具包
1. 下载jar包
我们去github repo下载最新的jar包 jindo-distcp-x.x.x.jar
注意: 目前Jar包只支持Linux、MacOS操作系统,因为SDK底层采用了native代码。我们会尽快推出全新版本,支持更多平台,敬请关注。
2. 配置OSS访问AK
您可以在命令中使用程序执行时指定--ossKey、--ossSecret、--ossEndPoint参数选项来指定AK。
示例命令如下:
hadoop jar jindo-distcp-2.7.3.jar --src /data/incoming/hourly_table --dest oss://yang-hhht/hourly_table --ossKey yourkey --ossSecret yoursecret --ossEndPoint oss-cn-hangzhou.aliyuncs.com
您也可以将oss的ak、secret、endpoint预先配置在 hadoop的 core-site.xml 文件里 ,避免每次使用时临时填写ak。
<configuration>
<property>
<name>fs.jfs.cache.oss-accessKeyId</name>
<value>xxx</value>
</property>
<property>
<name>fs.jfs.cache.oss-accessKeySecret</name>
<value>xxx</value>
</property>
<property>
<name>fs.jfs.cache.oss-endpoint</name>
<value>oss-cn-xxx.aliyuncs.com</value>
</property>
</configuration>
另外,我们推荐配置免密功能,避免明文保存accessKey,提高安全性。
使用手册
JindoDistCp提供多种实用功能及其对应的参数选择,下面介绍参数含义及其示例
更多详细使用细节,请参考JindoDistCp使用指南
更多数据湖技术相关的文章请点击:[阿里云重磅发布云原生数据湖体系
](https://developer.aliyun.com/article/772298?spm=a2c6h.12873581.0.dArticle772298.28042b0fFZNGve&groupCode=datalakeformation)
更多数据湖相关信息交流请加入阿里巴巴数据湖技术钉钉群