2016-04-15 11 views
6

trong Hadoop mô tả getmergeCách Hadoop -getmerge hoạt động như thế nào?

Cách sử dụng: HDFS dfs -getmerge src localdst [addnl]

Câu hỏi của tôi là lý do tại sao getmerge được concatenating đến đích địa phương tại sao không HDFS bản thân? Câu hỏi này được hỏi vì tôi có các sự cố sau đây

  1. Điều gì xảy ra nếu các tệp được hợp nhất nhiều hơn kích thước của địa phương?
  2. Có lý do cụ thể nào sau khi hạn chế lệnh hadoop -getmerge chỉ để ghép nối với điểm đến cục bộ không?
+0

Tôi biết rằng đây không phải là câu hỏi của bạn, nhưng có lẽ bạn sẽ thấy bài đăng này hữu ích: http: //stackoverflow.com/questions/21776339/hadoop-getmerge-to-another-machine – vefthym

Trả lời

6

Lệnh getmerge đã được tạo riêng cho việc hợp nhất tệp từ HDFS vào một tệp trên hệ thống tệp cục bộ.

Lệnh này rất hữu ích để tải xuống đầu ra của công việc MapReduce, có thể tạo nhiều tập tin part- * và kết hợp chúng thành một tệp cục bộ, mà bạn có thể sử dụng cho các hoạt động khác (ví dụ: Bảng tính Excel để trình bày).

Câu trả lời cho câu hỏi của bạn:

  1. Nếu hệ thống tập tin đích không có đủ không gian, sau đó IOException được ném. getmerge sử dụng nội bộ IOUtils.copyBytes() (xem IOUtils.copyBytes()) chức năng sao chép một tệp tại một thời điểm từ HDFS vào tệp cục bộ. Chức năng này ném IOException bất cứ khi nào có lỗi trong thao tác sao chép.

  2. Lệnh này nằm trên các dòng tương tự như hdfs fs -get lệnh nhận tệp từ HDFS vào hệ thống tệp cục bộ. Chỉ có sự khác biệt là hdfs fs -getmerge hợp nhất nhiều tệp từ HDFS thành hệ thống tệp cục bộ.

Nếu bạn muốn kết hợp nhiều file trong HDFS, bạn có thể đạt được nó bằng cách sử copyMerge() phương pháp từ FileUtil lớp (xem FileUtil.copyMerge()).

API này sao chép tất cả các tệp trong một thư mục vào một tệp (kết hợp tất cả các tệp nguồn).

+0

Cảm ơn bạn đã trả lời, – monic

+1

Có một thay thế cho -getmerge nơi tôi có thể hợp nhất các tập tin trực tiếp từ hdfs để hdfs? – monic

+1

Không có chức năng dòng lệnh cho điều đó. Như tôi đã đề cập trong câu trả lời, bạn cần sử dụng "FileUtil.copyMerge()" theo lập trình hoặc sử dụng một số thủ thuật kịch bản lệnh shell Linux như đã đề cập ở đây: http://stackoverflow.com/questions/3548259/merging-multiple-files-into- một trong vòng. Ví dụ: hadoop fs -cat [dir]/* | hadoop fs -put - [tệp đích] –

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