資料湖就像是一個“大水池”,是一種把各類異構資料進行集中存儲的架構。資料湖是一種存儲架構,在阿裡雲上可以利用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)更多資料湖相關資訊交流請加入阿裡巴巴資料湖技術釘釘群