Подтвердить что ты не робот

Hadoop скопировать каталог?

Существует ли HDFS API, который может скопировать весь локальный каталог в HDFS? Я нашел API для копирования файлов, но есть ли для каталогов?

4b9b3361

Ответ 1

Используйте оболочку Hadoop FS. В частности:

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

Если вы хотите сделать это программно, создайте две файловые системы (одну локальную и одну HDFS) и используйте класс FileUtil

Ответ 2

Я попытался скопировать из каталога, используя

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

Он дал мне ошибку, говоря, что Target - это каталог. Затем я изменил его на

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

он работает.

Ответ 3

В версии Hadoop:

Hadoop 2.4.0.2.1.1.0-390

(И, вероятно, позже, я только протестировал эту конкретную версию, так как она есть у меня)

Вы можете скопировать все каталоги рекурсивно без каких-либо специальных обозначений с помощью copyFromLocal например.,:

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

который работает даже тогда, когда /path/on/disk - это каталог, содержащий подкаталоги и файлы.

Ответ 4

Для программиста вы также можете использовать copyFromLocalFile. Вот пример:

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)