2011-01-17 52 views
19

Có một API HDFS có thể sao chép toàn bộ thư mục cục bộ sang HDFS không? Tôi tìm thấy một API để sao chép các tập tin nhưng có một cho các thư mục?Hadoop sao chép một thư mục?

Trả lời

15

Sử dụng Hadoop FS shell. Cụ thể là:

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

Nếu bạn muốn làm điều đó theo chương trình, tạo ra hai hệ thống tập tin (một địa phương và một HDFS) và sử dụng the FileUtil class

+0

tôi cần thực hiện điều này theo chương trình. không phải từ vỏ – rakeshr

+0

ok, tôi đã bổ sung cách làm điều đó bằng FileUtil. –

+0

Có thể hỗ trợ hadoop fs sao chép từ một tập tin chia sẻ? Tôi không bao giờ thành công để làm điều đó – machinarium

10

Tôi đã cố gắng sao chép từ thư mục sử dụng

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

Nó đã cho tôi một lỗi nói rằng Target là một thư mục. Sau đó tôi đã sửa đổi nó thành

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

hoạt động.

+1

Đây là tham chiếu đến phiên bản hadoop 0.20. – LGG

+2

sự cố này đã được khắc phục và ký hiệu này không còn cần thiết nữa. Tuy nhiên, OP không chỉ định phiên bản hadoop nên câu trả lời này vẫn có thể áp dụng cho các phiên bản cũ. – Tommy

0

Đối với lập trình viên, bạn cũng có thể sử dụng copyFromLocalFile. Dưới đây là một ví dụ:

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) 
2

Trong phiên bản Hadoop:

Hadoop 2.4.0.2.1.1.0-390 

(Và có lẽ sau đó, tôi đã chỉ được thử nghiệm phiên bản đặc biệt này vì nó là một trong tôi có)

Bạn có thể sao chép toàn bộ thư mục đệ quy mà không có bất kỳ ký hiệu đặc biệt nào bằng cách sử dụng copyFromLocal ví dụ:

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

hoạt động ngay cả khi /path/on/disk là thư mục chứa các thư mục con và tệp.

Các vấn đề liên quan