2012-02-13 39 views
15

Muốn xác nhận sau đây. Xin vui lòng xác minh nếu điều này là chính xác: 1. Theo hiểu biết của tôi khi chúng tôi sao chép tệp vào HDFS, đó là điểm khi tệp (giả định kích thước của nó> 64MB = kích thước khối HDFS) được chia thành nhiều phần và mỗi đoạn được lưu trữ trên các nút dữ liệu khác nhau.Giới thiệu về việc chia nhỏ tệp Hadoop/HDFS

  1. Nội dung tệp đã được chia thành các đoạn khi tệp được sao chép vào HDFS và việc phân tách tệp đó không xảy ra tại thời điểm chạy công việc bản đồ. Nhiệm vụ bản đồ chỉ được lên lịch theo cách mà chúng hoạt động trên từng đoạn tối đa. kích thước 64 MB với vị trí dữ liệu (tức là tác vụ bản đồ chạy trên nút đó chứa dữ liệu/đoạn)

  2. Chia nhỏ tệp cũng xảy ra nếu tệp được nén (gzipped) nhưng MR đảm bảo rằng mỗi tệp được xử lý bởi chỉ một trình ánh xạ , tức là MR sẽ thu thập tất cả các phần của tệp gzip nằm ở các nút dữ liệu khác và cung cấp tất cả chúng cho người lập bản đồ duy nhất.

  3. Điều tương tự như trên sẽ xảy ra nếu chúng tôi xác định isSplitable() để trả về false, nghĩa là tất cả các phần của tệp sẽ được xử lý bởi một người lập bản đồ đang chạy trên một máy. MR sẽ đọc tất cả các phần của một tệp từ các nút dữ liệu khác nhau và cung cấp chúng cho một người lập bản đồ duy nhất.

+0

Tiêu đề mô tả hơn sẽ là một cải tiến được chào đón cho câu hỏi của bạn. –

Trả lời

10

Hiểu biết của bạn không lý tưởng. Tôi sẽ chỉ ra rằng có hai quy trình gần như độc lập: tách các tệp thành các khối HDFS và tách các tệp để xử lý bởi những người lập bản đồ khác nhau.
HDFS chia tệp thành các khối dựa trên kích thước khối được xác định.
Mỗi định dạng đầu vào có logic riêng của mình như thế nào các tệp có thể được chia thành một phần để xử lý độc lập bởi những người lập bản đồ khác nhau. Logic mặc định của FileInputFormat là chia tệp theo khối HDFS. Bạn có thể thực hiện bất kỳ logic nào khác
Nén, thường là kẻ thù của việc chia tách, vì vậy chúng tôi sử dụng kỹ thuật nén khối để cho phép tách dữ liệu được nén. Điều đó có nghĩa là mỗi phần logic của tệp (khối) được nén độc lập.

+2

Xin chào David, cảm ơn vì đã làm rõ điều này. Nếu tập tin của tôi là giả sử nói 128 MB. Tôi đoán trong trường hợp này HDFS sẽ tiếp tục chia thành hai phần, mỗi kích thước 64 MB (giả định kích thước khối HDFS = 64 MB). Chúng có thể được lưu trữ trên các máy khác nhau. Bây giờ nếu tôi sử dụng FileInputFormat của riêng mình mà chỉ mở rộng TextInputFormat và trả về false trong "isSplitable()", hành vi sẽ là gì, tức là sẽ chỉ có một trình ánh xạ sẽ nhận cả hai phần đầu vào (tức là toàn bộ tệp được xử lý bởi chỉ một trình ánh xạ) hoặc sẽ có hai người lập bản đồ xử lý một đoạn tệp. – sunillp

+0

Tôi đang bối rối ở đây, tôi muốn thử nó ra nhưng bằng cách nào đó định dạng đầu vào tùy chỉnh của tôi là biên dịch nhưng không chạy trên thiết lập thử nghiệm. – sunillp

+2

Nếu isSplitable returns false - tập tin sẽ được xử lý bởi một người lập bản đồ, bất kể số khối. –

1

Có, nội dung tệp được chia thành các đoạn khi tệp được sao chép vào HDFS. Kích thước khối là cấu hình, và nếu nó là nói 128 MB, sau đó toàn bộ 128 MB sẽ là một khối, không phải 2 khối 64 MB riêng biệt. Ngoài ra nó không phải là cần thiết rằng mỗi đoạn của một tập tin được lưu trữ trên một datanode riêng biệt. datanode có thể có nhiều hơn một đoạn của một tập tin cụ thể. Và một đoạn cụ thể có thể có mặt trong nhiều hơn một datanodes dựa trên nhân tố nhân rộng.

+0

Vui lòng đọc câu hỏi cẩn thận hơn - câu trả lời của bạn không liên quan gì đến chủ đề –

+0

tôi có thể hỏi theo cách nào? Tiêu đề tự nó nói - Chia nhỏ tệp Hadoop/HDFS. Tôi đồng ý rằng nó không tốt bằng câu trả lời của David. Nhưng tôi không tìm thấy bất cứ điều gì không liên quan đến chủ đề. Xin vui lòng cho tôi biết để tôi không lặp lại sai lầm. Cảm ơn bạn. – Tariq

32

Câu trả lời của David khá nhiều chạm vào móng trên đầu, tôi chỉ đang xây dựng nó ở đây.

Có hai khái niệm khác nhau tại nơi làm việc ở đây, mỗi khái niệm được xử lý bởi một thực thể khác nhau trong khuôn khổ hadoop

Thứ nhất -

1) Chia một file thành các khối - Khi một tập tin được viết thành HDFS, HDFS chia tập tin thành các khối và đảm nhận sao chép của nó. Điều này được thực hiện một lần (chủ yếu), và sau đó có sẵn cho tất cả các công việc MR đang chạy trên cụm.Đây là một dạng cấu hình cluster

Thứ hai -

2) Chia một file vào đầu vào tách - Khi con đường đầu vào được chuyển vào một công việc MR, công việc MR sử dụng đường dẫn cùng với các định dạng đầu vào được cấu hình để chia các tệp được chỉ định trong đường dẫn đầu vào thành các phần tách, mỗi phần được xử lý bởi một tác vụ bản đồ. Tính toán phân chia đầu vào được thực hiện theo định dạng đầu vào mỗi lần thực hiện một công việc

Bây giờ, khi chúng ta có điều này, chúng ta có thể hiểu rằng phương thức isSplitable() nằm trong danh mục thứ hai.

Để thực sự móng tay xuống này có một cái nhìn tại dòng ghi dữ liệu HDFS (Concept 1)

HDFS Write Data Flow

Điểm thứ hai trong biểu đồ có lẽ là nơi chia sẽ xảy ra, lưu ý rằng đây không có gì để làm gì với hoạt động của một MR Job

Bây giờ có một cái nhìn tại các bước thực hiện một công việc MR

MR

Ở đây bước đầu tiên là tính toán phân chia đầu vào thông qua inputformat được cấu hình cho công việc.

Rất nhiều sự nhầm lẫn của bạn xuất phát từ thực tế là bạn đang kết hợp cả hai khái niệm này, tôi hy vọng điều này làm cho nó rõ ràng hơn một chút.

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