2016-04-06 19 views
0

HDF'de bir klasörde, adlarında filename.yyyy-mm-dd-hh.machinename.gz biçiminde adlar bulunan bir dizi dosya var. Bunları s3'e aktarmam gerekiyor ama bunları yyyy/aa/gg/hh/filename.yyyy-mm-dd-hh.machinename.gz dosyasına koymak istiyorum (s3'ün düz bir yapıya sahip olması nedeniyle bu nesne adı olurdu) belirttiğim kova. Distcp komutu dosyaları hdfs'den s3'e transfer edebilir, ancak yukarıdakileri yapmak için bir seçenek var mı? Değilse bunu yapmak için distcp'i nasıl uzatabilirim?Hedef dosya adını/konumunu distcp olarak değiştirin

cevap

1

Not: Bu bir çözüm değil, sadece bir ipucu.

Kesin yanıtı bilmiyorum ve aslında üzerinde çalışacak bir S3 örneğiniz yok. Ancak burada dosya isimlerinin ön-işleminin yapılması ve dosyaların belirli bir dizin yapısında kopyalanması AWK yöntemidir. Aşağıdaki komut yerel Linux dosya sistemini dikkate yazılır:

İlk dizin içeriği: Belirli bir dizin yapısı içindeki dosyaları kopyalamak için

[email protected]:~/path/to/input$ find 
./filename.yyyy-mm-dd-hh.machinename.gz 
./filename.2016-12-10-08.machinename.gz 
./filename.2015-12-10-08.machinename.gz 
./filename.2015-10-10-08.machinename.gz 
./filename.2015-10-11-08.machinename.gz 

Komut:

[email protected]:~/path/to/input$ ls | awk -F"." '{print $1" "$2" "$3" "$4}' | awk -F"-" '{print $1" "$2" "$3" "$4" "$5" "$6" "$7}' | awk -F" " '{PATH=$2"/"$3"/"$4"/"$5; FNAME=$1"."$2"-"$3"-"$4"-"$5"."$6"."$7; system("mkdir -p "PATH); system("cp "FNAME" "PATH); }' 

komut yürütme sonrasında Nihai dizin içeriği:

./filename.yyyy-mm-dd-hh.machinename.gz 
./yyyy 
./yyyy/mm 
./yyyy/mm/dd 
./yyyy/mm/dd/hh 
./yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz 

./filename.2016-12-10-08.machinename.gz 
./2016 
./2016/12 
./2016/12/10 
./2016/12/10/08 
./2016/12/10/08/filename.2016-12-10-08.machinename.gz 

./filename.2015-12-10-08.machinename.gz 
./2015 
./2015/12 
./2015/12/10 
./2015/12/10/08 
./2015/12/10/08/filename.2015-12-10-08.machinename.gz 

./filename.2015-10-11-08.machinename.gz 
./2015/10 
./2015/10/11 
./2015/10/11/08 
./2015/10/11/08/filename.2015-10-11-08.machinename.gz 

./filename.2015-10-10-08.machinename.gz 
./2015/10/10 
./2015/10/10/08 
./2015/10/10/08/filename.2015-10-10-08.machinename.gz 
0

Sadece mentio'ya ihtiyacınız var. n istediğiniz formatta hedef yol.

hadoop distcp filename.yyyy-mm-dd-hh.machinename.gz s3n://<bucket-name>/yyyy/mm/dd/hh/filename.yyyy-mm-dd-hh.machinename.gz