2011-09-19 25 views
7

Khi tôi đặt một tập tin vào HDFS, ví dụHDFS có mã hóa hoặc nén dữ liệu trong khi lưu trữ không?

$ ./bin/hadoop/dfs -put /source/file input 
  • là file nén khi lưu trữ?
  • Có phải tệp được mã hóa khi lưu trữ không? Có một thiết lập cấu hình mà chúng tôi có thể chỉ định để thay đổi cho dù nó được mã hóa hay không?
+0

Bạn có biết liệu "dfs.image.compress" tùy chọn nên nén file khi lưu trữ? – spektom

Trả lời

8

There không nén ngầm trong HDFS. Nói cách khác, nếu bạn muốn dữ liệu của bạn được nén, bạn phải viết nó theo cách đó. Nếu bạn có kế hoạch viết bản đồ giảm bớt công việc để xử lý dữ liệu nén, bạn sẽ muốn sử dụng định dạng nén có thể chia nhỏ.

Hadoop có thể xử lý các tệp nén và đây là số article đẹp trên đó. Ngoài ra, đầu ra MR trung gian và cuối cùng có thể là compressed.

Có một JIRA về 'Nén trong suốt trong HDFS', nhưng tôi không thấy nhiều tiến bộ trên đó.

Tôi không nghĩ rằng có một API riêng biệt để mã hóa, mặc dù bạn có thể sử dụng codec nén để mã hóa/giải mã. Here có thêm chi tiết về mã hóa và HDFS.

-1

Tôi gần đây đã thiết lập nén trên một cụm. Các bài viết khác có liên kết hữu ích, nhưng mã thực tế bạn sẽ muốn làm việc nén LZO là ở đây: https://github.com/kevinweil/hadoop-lzo.

Bạn có thể thoát ra khỏi hộp, sử dụng tính năng nén GZIP, nén BZIP2 và nén Unix. Chỉ cần tải lên một tệp ở một trong các định dạng đó. Khi sử dụng tệp làm đầu vào cho một công việc, bạn sẽ cần xác định rằng tệp được nén cũng như CODEC phù hợp. Đây là một ví dụ cho nén LZO.

-jobconf mapred.output.compress=true 
    -jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec 

Tại sao tôi tiếp tục nén LZO? Các tài liệu tham khảo cloudera article bởi Praveen đi vào này. LZO nén là một nén splittable (không giống như GZIP, ví dụ). Điều này có nghĩa là một tập tin duy nhất có thể được chia thành nhiều phần để chuyển cho người lập bản đồ. Nếu không có tệp nén có thể chia nhỏ, một người lập bản đồ duy nhất sẽ nhận được toàn bộ tệp. Điều này có thể khiến bạn có quá ít người lập bản đồ và di chuyển quá nhiều dữ liệu quanh mạng của bạn.

BZIP2 cũng có thể chia nhỏ. Nó cũng có độ nén cao hơn LZO. Tuy nhiên, nó rất chậm. LZO có tỷ lệ nén kém hơn GZIP. Tuy nhiên, nó được tối ưu hóa là extremely fast. Trong thực tế, nó thậm chí có thể tăng hiệu suất công việc của bạn bằng cách giảm thiểu I/O đĩa.

Phải mất một chút công việc để thiết lập và hơi khó sử dụng, nhưng đáng giá (mã hóa trong suốt sẽ tuyệt vời). Một lần nữa, các bước:

  1. Cài đặt LZO và LZOP (dòng lệnh tiện ích)
  2. Install hadoop-lzo
  3. Tải lên một tập tin nén với LZOP.
  4. Lập chỉ mục tệp như được mô tả bằng wiki hadoop-lzo (chỉ mục cho phép chia nhỏ).
  5. Chạy công việc của bạn (với các thông số thích hợp mapred.output.compress và mapred.output.compression.code)
+0

Truy vấn ban đầu sẽ là "dfs đặt" minh bạch nén và mã hóa tệp. Không có cách nào liên quan đến MR. HDFS có thể được sử dụng cho những thứ khác. Với bản sửa đổi MR sắp ra mắt với bản phát hành Hadoop 0.23, các khung công tác khác có thể dễ dàng được cắm vào Hadoop. –

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