-put
và -copyFromLocal
được ghi nhận là giống hệt nhau, trong khi hầu hết các ví dụ sử dụng biến thể verbose -copyFromLocal. Tại sao?Sự khác biệt giữa hadoop fs -put và hadoop fs -copyFromLocal
Cùng một điều cho -get
và -copyToLocal
-put
và -copyFromLocal
được ghi nhận là giống hệt nhau, trong khi hầu hết các ví dụ sử dụng biến thể verbose -copyFromLocal. Tại sao?Sự khác biệt giữa hadoop fs -put và hadoop fs -copyFromLocal
Cùng một điều cho -get
và -copyToLocal
Vì vậy, về cơ bản bạn có thể làm với đặt, tất cả những gì bạn làm với copyFromLocal, nhưng không phải ngược lại.
Tương tự,
Do đó, bạn có thể sử dụng được thay vì copyToLocal, nhưng không phải theo chiều ngược lại.
Tham khảo: Hadoop's documentation.
Cập nhật: Mới nhất là tháng 10 năm 2015, vui lòng xem this câu trả lời bên dưới.
Hãy làm một ví dụ: Nếu HDFS của bạn có chứa đường dẫn: /tmp/dir/abc.txt
Và nếu đĩa địa phương của bạn cũng chứa con đường này thì API HDFS sẽ không biết cái nào bạn có ý nghĩa, trừ khi bạn chỉ định một kế hoạch như file://
hoặc hdfs://
. Có thể nó chọn con đường bạn không muốn sao chép.
Vì vậy, bạn có -copyFromLocal
ngăn bạn vô tình sao chép sai tệp, bằng cách giới hạn tham số mà bạn cung cấp cho hệ thống tệp cục bộ.
Put
dành cho những người dùng nâng cao hơn, những người biết nên đặt kế hoạch nào ở phía trước.
Nó luôn luôn là một chút bối rối cho người dùng Hadoop mới mà hệ thống tập tin mà họ hiện đang ở và nơi tệp của họ thực sự là.
Ý của bạn là gì bởi "API hdfs sẽ không biết bạn nghĩa là gì"? Đối với '-put', nguồn luôn là đối số đầu tiên. Hoặc bạn có nghĩa là một số người dùng có thể nhầm lẫn '-put' với '-get'? – snappy
Không, không phải cách nào. Chúng tôi đang nói về hai hệ thống tệp khác nhau ở đây. HDFS và hệ thống tệp cục bộ (nói ext4). Bằng cách sử dụng 'bin/hadoop fs -put/tmp/somepath/người dùng/hadoop/somepath' lệnh thực sự không biết liệu'/tmp/somepath' có tồn tại trong cả hai hệ thống tập tin hay chỉ trong hệ thống tập tin cục bộ. Điều tương tự với đường dẫn đích. –
Vì vậy, tham số đầu tiên không phải lúc nào cũng là đường dẫn cục bộ fs để nói. Bạn có thể 'đặt' từ một HDFS này sang một HDFS khác nếu bạn muốn. '-copyFromLocal' sẽ đảm bảo rằng nó chỉ chọn từ đĩa cục bộ và tải lên HDFS. –
copyFromLocal
bị hạn chế sao chép từ địa phương trong khi put
có thể mất tập tin từ bất kỳ (HDFS khác/hệ thống tập tin địa phương/..)Mặc dù những gì đang tuyên bố chủ quyền các tài liệu , tính đến nay (tháng 10 năm 2015), cả hai -copyFromLocal
và -put
đều giống nhau.
Từ sự giúp đỡ trực tuyến:
[[email protected] ~]$ hdfs dfs -help copyFromLocal
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst> :
Identical to the -put command.
Và điều này được xác nhận bởi looking at the sources, nơi bạn có thể thấy rằng lớp CopyFromLocal mở rộng lớp mi, nhưng mà không cần thêm bất kỳ hành vi mới:
public static class CopyFromLocal extends Put {
public static final String NAME = "copyFromLocal";
public static final String USAGE = Put.USAGE;
public static final String DESCRIPTION = "Identical to the -put command.";
}
public static class CopyToLocal extends Get {
public static final String NAME = "copyToLocal";
public static final String USAGE = Get.USAGE;
public static final String DESCRIPTION = "Identical to the -get command.";
}
Như bạn có thể thấy, điều này hoàn toàn giống với get
/copyToLocal
.
Cả hai lệnh 'put' & 'copyFromLocal' hoạt động giống hệt nhau. Bạn không thể sử dụng lệnh 'put' để sao chép các tệp từ một thư mục hdfs sang một thư mục khác. Cho phép xem điều này với một ví dụ: giả sử thư mục gốc của bạn có hai thư mục, có tên 'test1' và 'test2'. Nếu 'test1' chứa tệp 'customer.txt' và bạn thử sao chép tệp đó vào thư mục test2
$ hadoop fs -put /test1/customer.txt/test2 Nó sẽ dẫn đến lỗi 'không có tệp hoặc thư mục như vậy' kể từ ' đặt 'sẽ tìm tệp trong hệ thống tệp cục bộ chứ không phải hdfs. Cả hai đều có nghĩa là sao chép tệp (hoặc thư mục) từ hệ thống tệp cục bộ sang hdfs, chỉ.
Có thể nếu bạn chỉ định hệ thống tập tin trong đối số đầu tiên, nó sẽ không đọc địa phương? 'hadoop fs -put hdfs: ///test1/customer.txt hdfs: /// test2'? –
vui lòng kiểm tra liên kết này đã đề cập chi tiết ở cấp mã nguồn http://hakunamapdata.com/why-put-is-better-than-copyfromlocal-when-coping-files-to-hdfs/ –