Pytanie Hadoop skopiować katalog?


Czy istnieje interfejs API HDFS, który może skopiować cały katalog lokalny do HDFS? Znalazłem API do kopiowania plików, ale czy istnieje jeden dla katalogów?


21
2018-01-17 19:23


pochodzenie




Odpowiedzi:


Użyj Powłoka Hadoop FS. Konkretnie:

$ hadoop fs -copyFromLocal /path/to/local hdfs:///path/to/hdfs

Jeśli chcesz zrobić to programowo, utwórz dwa systemy plików (jeden lokalny i jeden HDFS) i użyj klasa FileUtil


16
2018-01-17 20:00



Muszę to zrobić programowo. nie ze skorupy - rakeshr
ok, dodałem, jak to zrobić, używając FileUtil. - Spike Gronim
Czy mufopy fs mogą obsługiwać kopiowanie z udziału plików? Nigdy tego nie robię - machinarium


Próbowałem skopiować z katalogu używając

/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/ /export/hadoop1/lopez/Join/TPCDSkew

Dało mi to błąd mówiąc, że Target jest katalogiem. Następnie zmodyfikowałem go do

/hadoop/core/bin/hadoop fs -copyFromLocal /home/grad04/lopez/TPCDSkew/*.* /export/hadoop1/lopez/Join/TPCDSkew

to działa .


10
2018-04-22 17:25



Jest to w odniesieniu do wersji Miaoop 0.20. - LGG
ten problem został już naprawiony i notacja ta nie jest już potrzebna. Jednak OP nie określił wersji hadoop, więc ta odpowiedź może nadal dotyczyć starych wersji. - Tommy


W wersji Hadoop:

Hadoop 2.4.0.2.1.1.0-390

(I pewnie później, testowałem tylko tę konkretną wersję, ponieważ jest to ta, którą mam)

Możesz kopiować całe katalogi rekurencyjnie bez użycia specjalnej notacji copyFromLocal na przykład.,:

hadoop fs -copyFromLocal /path/on/disk /path/on/hdfs

który działa nawet wtedy /path/on/disk jest katalogiem zawierającym podkatalogi i pliki.


2
2017-08-12 13:38





Dla programisty można również użyć copyFromLocalFile. Oto przykład:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FileSystem
import org.apache.hadoop.fs.Path

val hdfsConfig = new Configuration
val hdfsURI = "hdfs://127.0.0.1:9000/hdfsData"
val hdfs = FileSystem.get(new URI(hdfsURI), hdfsConfig)

val oriPath = new Path("#your_localpath/customer.csv")
val targetFile = new Path("hdfs://your_hdfspath/customer.csv")
hdfs.copyFromLocalFile(oriPath, targetFile)

0
2017-08-19 18:59