Hadoop скопировать каталог? - PullRequest
23 голосов
/ 17 января 2011

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

Ответы [ 5 ]

16 голосов
/ 17 января 2011

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

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

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

10 голосов
/ 22 апреля 2012

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

/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

это работает.

2 голосов
/ 12 августа 2015

В версии Hadoop:

Hadoop 2.4.0.2.1.1.0-390

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

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

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

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

0 голосов
/ 13 сентября 2018

Вы также можете использовать команду put:

$ hadoop fs -put /local/path hdfs:/path
0 голосов
/ 19 августа 2014

Для программиста вы также можете использовать 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)
...