2013-07-24 28 views
5

Trong Hadoop, nếu tôi ngừng hoạt động, một nút Hadoop sẽ phân phối lại các tệp trên cụm sao để chúng được sao chép đúng cách. Dữ liệu có bị xóa khỏi nút bị hủy không?Không giải nén một nút loại bỏ dữ liệu từ nút đó?

Tôi đang cố gắng cân bằng dữ liệu trên các đĩa trên một nút cụ thể. Tôi dự định làm điều này bằng cách giải mã nút và sau đó recomissioning nút. Tôi có cần phải xóa dữ liệu khỏi nút đó sau khi quá trình phân tách hoàn thành hay chỉ đủ để đơn giản là khôi phục dữ liệu đó (xóa nó khỏi tệp loại trừ và chạy hadoop dfsadmin -refreshNodes)?

CẬP NHẬT: Nó làm việc cho tôi để giải mã một nút, xóa tất cả dữ liệu trên nút đó, và sau đó recomission nó.

+0

Vì vậy, bạn có nhiều đĩa được gắn trên một nút? –

+0

Có. Một nút có 6 đĩa. – schmmd

Trả lời

1

AFAIK, dữ liệu không bị xóa khỏi DataNode khi bạn ngừng hoạt động. Hơn nữa viết trên DataNode đó sẽ không thể mặc dù. Khi bạn ngừng hoạt động một DataNode, các bản sao được giữ bởi DataNode đó được đánh dấu là bản sao "ngừng hoạt động", vẫn còn đủ điều kiện để truy cập đọc.

Nhưng tại sao bạn muốn thực hiện chu kỳ phân hủy/khôi phục này? Tại sao bạn không chỉ định tất cả các đĩa dưới dạng giá trị được phân tách bằng dấu phẩy cho thuộc tính dfs.data.dir trong tệp hdfs-site.xml của bạn và khởi động lại DataNode daemon. Chạy cân bằng sau khi khởi động lại.

+0

Cân bằng cân bằng trên các nút, không phải trên các đĩa trong một nút.Nếu một nút có 4 đĩa và những đĩa đó lấp đầy, thì thêm hai đĩa được thêm vào, sẽ có các vấn đề về không gian đĩa vì dữ liệu không cân bằng. Xem https://issues.apache.org/jira/browse/HDFS-1312. – schmmd

+0

Có. Nó sẽ không. Tôi đã giả định rằng bạn có tất cả các đĩa được gắn vào nút, vì bạn không chỉ định điều này trong câu hỏi. Dù sao, bạn có thể làm điều đó theo đề xuất của @ JtheRocker. – Tariq

0

Hadoop hiện không hỗ trợ tự động thực hiện việc này. Nhưng có thể có hack xung quanh để làm điều đó tự động.

Việc ngừng hoạt động và sau đó nhân rộng, sẽ chậm theo ý kiến ​​của tôi, sau đó di chuyển khối theo cách thủ công trên các đĩa khác nhau.

Bạn có thể làm cân bằng bằng tay mặc dù trên đĩa, một cái gì đó như thế này -

.Take xuống HDFS hoặc chỉ datanode bạn đang nhắm mục tiêu.

. Sử dụng lệnh UNIX mv để di chuyển từng khối và cặp meta từ một thư mục này sang thư mục khác trên máy chủ. Ví dụ. di chuyển các cặp tệp dữ liệu blk và tệp blk.meta sang các đĩa trên cùng một máy chủ.

.Restart các HDFS hoặc datanode

Reference link for the procedure

Phụ Lục:. Bạn cần phải lẽ di chuyển cặp blk_ *blk _ * meta file đến và đi từ bên trong thư mục dfs/current của mỗi đĩa dữ liệu. Ví dụ. file cặp - blk_3340211089776584759 và blk_3340211089776584759_1158.meta

Nếu bạn không muốn làm điều này bằng tay, bạn có thể có thể viết một kịch bản tùy chỉnh để phát hiện bao nhiêu là chiếm đóng trong dfs/hiện thư mục của mỗi đĩa dữ liệu của bạn và cân bằng lại chúng cho phù hợp tức là di chuyển các cặp blk_ * và blk _ *. meta từ cái này sang cái khác.

+0

Tôi biết điều này. Nó sẽ được tốt đẹp để có thêm chi tiết về thư mục con nào để di chuyển các tập tin blk. – schmmd

+0

Tôi đã viết một chương trình scala để làm điều này một tuần trước, nhưng việc giải nén và recomissioning có vẻ an toàn hơn: https://github.com/schmmd/hadoop-balancer – schmmd

+0

@schmmd, tôi sẽ xem xét. Cảm ơn, trong khi đó, tôi đã thực hiện một số chỉnh sửa có một cái nhìn! Hãy cùng nhau tìm cách để giải quyết vấn đề này. :) –

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