2012-02-06 23 views
7

Giả sử người dùng đang sử dụng kích thước khối mặc định (128 MB) và có một tệp sử dụng 130 MB; do đó, sử dụng một khối kích thước đầy đủ và một khối với 2 MB. Sau đó, 20 MB cần phải được nối vào tệp (tổng số hiện tại là 150 MB). Chuyện gì xảy ra?HDFS có phụ thêm hoạt động như thế nào

HDFS có thực sự định lại kích thước của khối cuối cùng từ 2MB đến 22MB không? Hoặc tạo một khối mới?

Làm cách nào để thêm vào tệp trong thỏa thuận HDFS với conccurency? Có nguy cơ dataloss không?

HDFS có tạo khối thứ ba đặt 20 + 2 MB trong đó và xóa khối có 2MB không. Nếu có, điều này làm việc đồng thời như thế nào?

Trả lời

3

Theo latest design document trong Jira issuementioned before, chúng tôi tìm thấy những câu trả lời sau đây cho câu hỏi của bạn:

  1. HDFS sẽ thêm để khối cuối cùng, không tạo ra một khối mới và sao chép dữ liệu từ khối cuối cùng cũ. Điều này không khó bởi vì HDFS chỉ sử dụng một hệ thống tập tin bình thường để viết các tệp khối này thành các tệp thông thường. Các hệ thống tệp thông thường có các cơ chế để thêm dữ liệu mới. Tất nhiên, nếu bạn điền vào khối cuối cùng, bạn sẽ tạo một khối mới.
  2. Chỉ một lần viết hoặc nối thêm vào bất kỳ tệp nào được phép cùng một lúc trong HDFS, do đó không có đồng thời để xử lý. Điều này được quản lý bởi nút tên. Bạn cần phải đóng một tập tin nếu bạn muốn người khác bắt đầu viết cho nó.
  3. Nếu khối cuối cùng trong tệp không được sao chép, phần phụ thêm sẽ không thành công. Phụ lục được viết vào một bản sao duy nhất, người đã truyền nó tới các bản sao, tương tự như một bản ghi bình thường. Dường như với tôi như không có thêm nguy cơ dataloss so với một viết bình thường.
+0

Bạn có thể nối thêm vào một tập tin đã đóng không? – David

+0

nếu bạn gọi nối thêm vào một tập tin bạn đang mở nó. bạn không thể gọi thêm vào một tập tin mở. sau đó một khi bạn gọi nối thêm và nhận được một dòng đầu ra, bạn có thể bắt đầu đổ byte của bạn vào cuối của tập tin. – EthanP

+0

Nếu tôi nhớ chính xác khi tính năng này được giới thiệu, bạn sẽ cần phải để lại một tệp mới được tạo mở để có thể "nối thêm" vào nó (còn không phải là phụ lục thực). Bạn đang nói rằng bây giờ HDFS cho phép 1) tạo ra một tập tin 2) Đóng nó 3) Mở lại nó 4) Nối dữ liệu vào nó? – David

1

Hệ thống tệp phân tán Hadoop hỗ trợ nối thêm vào tệp và trong trường hợp này, cần thêm 20 MB vào khối thứ 2 trong ví dụ của bạn (ví dụ ban đầu là 2 MB). Bằng cách đó bạn sẽ kết thúc với hai khối, một với 128 MB và một với 22 MB.

This là tham chiếu đến việc thêm tài liệu java cho HDFS.

+4

Tôi hiểu rằng đường dẫn vẫn giữ nguyên. Nhưng kể từ khi khối được viết một lần, tôi sẽ tưởng tượng HDFS sẽ tạo ra một khối thứ ba đặt 20 + 2 MB trong đó, và xóa các khối với 2MB. Nhưng làm thế nào điều này làm việc đồng thời? – David

3

Dưới đây là một số design document rất bổ sung về việc nối thêm và nó chứa các vấn đề tương tranh.

Hiện tại HDFS docs cung cấp liên kết tới tài liệu đó, vì vậy chúng tôi có thể giả định rằng đó là tài liệu gần đây. (Ngày tài liệu là năm 2009)

Và liên quan issue.

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