背景
當前業界有很多公司是以Hadoop技術構建資料中心,而越來越多的公司和企業希望將業務順暢地遷移到雲上。
在阿里雲上使用最廣泛的儲存服務是Object Storage Service。OSS的資料移轉工具ossimport2可以將您本地或第三方雲端儲存體服務上的檔案同步到OSS上,但這個工具無法讀取Hadoop檔案系統的數據,從而發揮Hadoop分布式的特點。並且,該工具只支援本地檔案,需要將HDFS上的檔案先下載到本地,再通過工具上傳,整個過程耗時又耗力。
阿里雲E-MapReduce團隊開發的Hadoop資料移轉工具emr-tools,能讓您從Hadoop叢集隨即轉移數據到OSS上。
本文介紹如何快速地將Hadoop檔案系統(HDFS)上的資料移轉到OSS。
前提條件
確保當前機器可以正常訪問您的Hadoop叢集,即能夠用Hadoop命令訪問HDFS。
hadoop fs -ls /
Hadoop資料移轉到OSS
- 下載emr-tools。
说明 emr-tools相容Hadoop 2.4.x、2.5.x、2.6.x、2.7.x版本,如果有其他Hadoop版本相容性的需求,請提交工單。 - 解壓縮工具到本地目錄。
tar jxf emr-tools.tar.bz2
- 複製HDFS數據到OSS上。
cd emr-tools ./hdfs2oss4emr.sh /path/on/hdfs oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss
參數說明如下。
參數 說明 accessKeyId 訪問OSS API的密鑰。 accessKeySecret bucket-name.oss-cn-hangzhou.aliyuncs.com OSS的訪問網域名稱,包括bucket名稱和endpoint地址。 系統將啟動一個Hadoop MapReduce任務(DistCp)。
- 運行完畢之後會顯示本次資料移轉的資訊。資訊內容類別似如下所示。
17/05/04 22:35:08 INFO mapreduce.Job: Job job_1493800598643_0009 completed successfully 17/05/04 22:35:08 INFO mapreduce.Job: Counters: 38 File System Counters FILE: Number of bytes read=0 FILE: Number of bytes written=859530 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=263114 HDFS: Number of bytes written=0 HDFS: Number of read operations=70 HDFS: Number of large read operations=0 HDFS: Number of write operations=14 OSS: Number of bytes read=0 OSS: Number of bytes written=258660 OSS: Number of read operations=0 OSS: Number of large read operations=0 OSS: Number of write operations=0 Job Counters Launched map tasks=7 Other local map tasks=7 Total time spent by all maps in occupied slots (ms)=60020 Total time spent by all reduces in occupied slots (ms)=0 Total time spent by all map tasks (ms)=30010 Total vcore-milliseconds taken by all map tasks=30010 Total megabyte-milliseconds taken by all map tasks=45015000 Map-Reduce Framework Map input records=10 Map output records=0 Input split bytes=952 Spilled Records=0 Failed Shuffles=0 Merged Map outputs=0 GC time elapsed (ms)=542 CPU time spent (ms)=14290 Physical memory (bytes) snapshot=1562365952 Virtual memory (bytes) snapshot=17317421056 Total committed heap usage (bytes)=1167589376 File Input Format Counters Bytes Read=3502 File Output Format Counters Bytes Written=0 org.apache.hadoop.tools.mapred.CopyMapper$Counter BYTESCOPIED=258660 BYTESEXPECTED=258660 COPY=10 copy from /path/on/hdfs to oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss does succeed !!!
- 您可以用osscmd等工具查看OSS上數據情況。
osscmd ls oss://bucket-name/path/on/oss
OSS資料移轉到Hadoop
如果您已經在阿里雲上搭建了Hadoop叢集,可以使用如下命令把數據從OSS上遷移到新的Hadoop叢集。
./hdfs2oss4emr.sh oss://accessKeyId:accessKeySecret@bucket-name.oss-cn-hangzhou.aliyuncs.com/path/on/oss /path/on/new-hdfs
更多使用場景
除了線下的叢集,在ECS上搭建的Hadoop叢集也可以使用emr-tools,將自建叢集迅速地遷移到E-MapReduce服務上。
如果您的叢集已經在ECS上,但是在經典網路中,無法和VPC中的服務做很好的互操作,所以想把叢集遷移到VPC中。可以按照如下步驟遷移:
- 使用emr-tools遷移數據到OSS上。
- 在VPC環境中新建一個叢集(自建或使用E-MapReduce服務)。
- 將數據從OSS上遷移到新的HDFS叢集中。
如果你使用E-MapReduce服務,還可以直接在Hadoop叢集中通過Spark、MapReduce和Hive等組件訪問OSS,這樣不僅可以減少一次數據複製(從OSS到HDFS),還可以極大的降低儲存成本。有關降低成本的詳細資料,請參見EMR+OSS:計算與儲存分離。