集群間資料遷移工具distcp用法介紹

2021-12-30 08:24:43 字數 2350 閱讀 7526

最近公司集群切換,需要將老集群中的資料遷移到新集群上,了解到了distcp這個工具。借助它很好的完成了遷移任務。

基礎用法如下:

hadoop distcp hdfs://cluster1:9000/stat hdfs://cluster2:9000/這裡就是把cluster1中的stat拷貝到cluster2中,這裡需要注意源路徑和目標路徑均要寫絕對路徑。

另外,如果源路徑較多,可以將原路徑寫到乙個文字中,然後通過:

hadoop distcp -f hdfs://nn1:8020/srclist hdfs://nn2:8020/destination其中srclist中存的就是多個原路徑的絕對路徑。

以上只是最簡單的用法,具體還有一些相關引數可以進行設定,如:

標識 描述 備註

-p [rbugp] preserve

r:replication number

b: block size

u: user

g: group

p: permission

-i 忽略失敗 這個選項會比預設情況提供關於拷貝的更精確的統計,

-log 記錄日誌到

-m 指定了拷貝資料時map的數目。請注意並不是map數越多吞吐量越大。

-overwrite 覆蓋目標 如果目標路徑有內容會直接覆蓋。

-update 如果源和目標的大小不一樣則進行覆蓋

-f 用 作為原始檔列表 這等價於把所有檔案名列在命令列中。 urilist_uri 列表應該是完整合法的uri。由於官網介紹有說道,在應用執行遷移資料過程中,如果有客戶端同時在往原始檔中寫資料,則很有可能會導致應用執行失敗,而我們的集群環境中原始檔就有可能會在拷貝時有客戶端往hdfs上寫資料,對此如果拷貝的時候需要自己選擇好最小拷貝目錄粒度,這樣可以防止出現以上問題,我們線上資料是按天來分割的,一般只會修改當天資料,所以我會對某類一級目錄下,按天劃分為乙個個小的任務目錄,對每一天的資料執行distcp,從而避免失敗。

本人是使用指令碼實現的,我的指令碼如下:

#!/bin/sh

# 由於distcp在遷移時,如果有客戶端在往源路徑下寫入資料,很可能會導致資料遷移失敗,為此要對遷移的資料進行二級目錄(時間)級別遷移。

# 入參就是根目錄「/」下的檔名 源:hdfs://cluster1:9000/$1/sub*** 目標:hdfs://cluster2:9000/$1

# 指令碼在225這台老的nn上執行

orig=$1 #orig=/stat

filter=$2

sourcepath= #sourcepath=hdfs://cluster1:9000/stat/20180712

destpath= #destpath=hdfs://cluster2:9000/stat

destrootpath=

#以防拷貝中途出現主備切換的情況,找到active的namenode

getsourcepath()

getdestpath()

oldifs="$ifs"

ifs=$'\n'

for line in `hadoop fs -du $orig|grep $filter`

do subpath=`echo $line|awk ''` #subpath=/stat/20180712

filename=`echo $subpath|awk -f "/" ''` #filename=20180712

getsourcepath $subpath

getdestpath $orig

echo "from $sourcepath to $destpath"

#-update引數會校驗源路徑下檔案和目標處檔案大小是否一樣,不一樣就會覆蓋,

#一樣就會跳過執行,這樣如果第二次執行時可以跳過已經拷貝完成的內容 -need test!

hadoop distcp -m 300 $sourcepath $destpath

#對遷移完的檔案進行校驗,比較大小是否一樣

localsize=`hadoop fs -du $orig|grep $filename`

remotesize=`hadoop fs -du $destrootpath$orig|grep $filename`

if [ $localsize -eq $remotesize ];then

echo "$subpath validate ok!"

else

echo "$subpath copy error!"

fidone

Hadoop資料遷移 distcp 工具

hadoop distcp 備份hdfs檔案,並行複製大量資料。1.同版本集群之間複製 hadoop distcp hdfs namenode1 src hdfs namenode2 dist這將從第乙個集群中複製 src目錄下的內容複製到第二個集群中的 dist目錄下 預設情況下,distcp會跳...

Hadoop集群間資料拷貝distcp使用

distcp是hadoop集群間拷貝工具,使用mapreduce的方式,進行大資料在集群的拷貝,不同於簡單的資料copy,distcp會校驗資料,穩定傳輸,最後進行拷貝結果統計,彙總拷貝狀態,如拷貝成功的檔案數 大小等 基本命令 hadoop distcp option src dst 關於dist...

Hadoop集群間資料拷貝distcp使用

distcp是hadoop集群間拷貝工具,使用mapreduce的方式,進行大資料在集群的拷貝,不同於簡單的資料copy,distcp會校驗資料,穩定傳輸,最後進行拷貝結果統計,彙總拷貝狀態,如拷貝成功的檔案數 大小等 基本命令 hadoop distcp option src dst 關於dist...