2012-02-17 19 views
6

Tôi bắt đầu chơi xung quanh với hadoop (nhưng không có quyền truy cập vào một cụm nhưng vì vậy chỉ cần chơi xung quanh trong độc lập). Câu hỏi của tôi là, một khi nó trong một thiết lập cụm, làm thế nào là nhiệm vụ phân phối và có thể các cơ sở mã được chuyển giao cho các nút mới? Lý tưởng nhất, tôi muốn chạy các công việc hàng loạt lớn và nếu tôi cần thêm dung lượng cho các cụm mới nhưng tôi không chắc liệu tôi có phải sao chép cùng một mã đang chạy cục bộ hay làm một cái gì đó đặc biệt hay không. trong khi công việc hàng loạt đang chạy, tôi có thể thêm dung lượng. Tôi nghĩ rằng tôi có thể lưu trữ codebase của tôi trên HDFS và có nó kéo tại địa phương để chạy mỗi khi tôi cần nó nhưng điều đó vẫn có nghĩa là tôi cần một số loại kịch bản ban đầu trên máy chủ và cần phải chạy nó bằng tay đầu tiên.Hadoop có thể phân phối nhiệm vụ và cơ sở mã không?

Bất kỳ đề xuất hoặc lời khuyên nào về điều này có thể là tuyệt vời!

Cảm ơn bạn.

Trả lời

7

Khi bạn lên lịch công việc Mapreduce bằng lệnh hadoop jar, trình theo dõi công việc sẽ xác định số lượng người lập bản đồ cần để thực hiện công việc của bạn. Điều này thường được xác định bởi số lượng khối trong tệp đầu vào và số này được cố định, cho dù bạn có bao nhiêu nút công nhân. Sau đó nó sẽ tranh thủ một hoặc nhiều tasktrackers để thực hiện công việc của bạn.

Bình ứng dụng (cùng với bất kỳ lọ nào khác được chỉ định sử dụng đối số -libjars), được sao chép tự động vào tất cả các máy chạy tasktrack được sử dụng để thực hiện các lọ của bạn. Tất cả điều đó được xử lý bởi cơ sở hạ tầng Hadoop.

Thêm công cụ tính năng bổ sung sẽ tăng tính song song của công việc giả định rằng có các tác vụ bản đồ chưa được lên lịch. Những gì nó sẽ không làm là tự động phân vùng lại đầu vào để song song trên khả năng bản đồ bổ sung. Vì vậy, nếu bạn có dung lượng bản đồ là 24 (giả sử 6 người lập bản đồ trên mỗi 4 nút dữ liệu) và bạn có 100 tác vụ bản đồ với 24 lần thực thi đầu tiên và bạn thêm một nút dữ liệu khác, bạn sẽ nhận được một số tốc độ bổ sung. Nếu bạn chỉ có 12 tác vụ bản đồ, việc thêm máy sẽ không giúp bạn.

Cuối cùng, bạn cần phải biết về địa phương tham chiếu dữ liệu. Do dữ liệu lý tưởng nên được xử lý trên cùng một máy lưu trữ ban đầu, việc thêm trình theo dõi nhiệm vụ mới sẽ không nhất thiết phải thêm tốc độ xử lý theo tỷ lệ, vì dữ liệu sẽ không cục bộ trên các nút đó ban đầu và sẽ cần được sao chép qua mạng.

+0

Cảm ơn bạn, câu trả lời tuyệt vời. Nó có ý nghĩa với java nhưng điều này cũng đúng với việc sử dụng python streaming? – Lostsoul

+2

Từ http://hadoop.apache.org/common/docs/r0.15.2/streaming.html#Package+Files+With+Job+Submissions: "Bạn có thể chỉ định bất kỳ tệp thực thi nào làm trình ánh xạ và/hoặc trình giảm tốc. các tệp thực thi không cần phải tồn tại trước trên các máy trong cụm, tuy nhiên, nếu chúng không, bạn sẽ cần sử dụng tùy chọn "-file" để yêu cầu khuôn khổ đóng gói các tệp thực thi của bạn như một phần của quá trình gửi công việc. " Tất cả mọi thứ ở trên liên quan đến việc thêm tasktrackers cũng đúng cho việc phát trực tuyến. –

0

Trước khi cố gắng xây dựng cụm Hadoop, tôi khuyên bạn nên chơi với Hadoop bằng cách sử dụng Amazon's Elastic MapReduce.

Đối với vấn đề mà bạn đang cố giải quyết, tôi không chắc Hadoop có phù hợp không. Hadoop rất hữu ích cho các công việc theo lô có thể song song: phân tích cú pháp Nghìn (hoặc nhiều) tài liệu, sắp xếp, dữ liệu lặp lại). Hadoop Streaming sẽ cho phép bạn tạo các trình lập bản đồ và bộ giảm tốc bằng bất kỳ ngôn ngữ nào bạn thích nhưng các đầu vào và đầu ra phải ở định dạng cố định. Có nhiều cách sử dụng nhưng theo quan điểm của tôi, kiểm soát quá trình không phải là một trong những mục tiêu thiết kế.

[EDIT] Có lẽ ZooKeeper gần hơn với những gì bạn đang tìm kiếm.

+0

Tôi dự định. Tôi chỉ muốn hiểu quy trình trước khi trả tiền cho amazon. – Lostsoul

+0

Giá của Amazon có thể hơi khó hiểu. Tôi đã chạy bản đồ nhỏ làm giảm việc làm ở đó (tập dữ liệu nhỏ, một vài nút) và mỗi lần chạy là $ 0,25 USD hoặc hơn. – Frank

0

Bạn có thể thêm dung lượng vào công việc theo lô nếu bạn muốn nhưng nó cần được trình bày như một khả năng trong cơ sở mã của bạn. Ví dụ, nếu bạn có một người lập bản đồ chứa một tập hợp các đầu vào mà bạn muốn gán nhiều nút để chịu áp lực bạn có thể. Tất cả điều này có thể được thực hiện nhưng không phải với cài đặt Hadoop mặc định.

Tôi hiện đang làm việc trên một khung công tác Map-Reduce lồng nhau mở rộng hệ thống mã Hadoop và cho phép bạn sinh ra nhiều nút hơn dựa trên các yếu tố đầu vào mà người lập bản đồ hoặc bộ giảm tốc nhận được. Nếu bạn quan tâm, hãy thả cho tôi một dòng và tôi sẽ giải thích thêm.

Ngoài ra, khi nói đến tùy chọn -libjars, tùy chọn này chỉ hoạt động cho các nút được chỉ định bởi trình theo dõi công việc theo hướng dẫn của công việc bạn viết. Vì vậy, nếu bạn chỉ định 10 người lập bản đồ, thì -libjar sẽ sao chép mã của bạn ở đó. Nếu bạn muốn bắt đầu với 10, nhưng làm việc theo cách của bạn lên, các nút bạn thêm sẽ không có mã.

Cách dễ nhất để bỏ qua điều này là thêm jar của bạn vào đường dẫn lớp của tập lệnh hadoop-env.sh. Điều đó sẽ luôn luôn khi bắt đầu một bản sao công việc mà jar cho tất cả các nút mà cụm biết.

1

Tôi không hoàn toàn đồng ý với câu trả lời của Daniel. Chủ yếu vì nếu "bắt đầu công việc, mã jar sẽ được sao chép vào tất cả các nút mà cụm biết" là đúng, sau đó ngay cả khi bạn sử dụng 100 trình lập bản đồ và có 1000 nút, mã cho tất cả công việc sẽ luôn được sao chép vào tất cả các nút. Không có ý nghĩa. Thay vào đó, câu trả lời của Chris Shain có ý nghĩa hơn là bất cứ khi nào JobScheduler trên JobTracker chọn một công việc được thực hiện và xác định một nhiệm vụ được thực thi bởi một datanode cụ thể thì tại thời điểm này bằng cách nào đó nó chuyển tải tasktracker từ nơi sao chép codebase.

Ban đầu (trước khi bắt đầu công việc tạo bản đồ), mã được sao chép sang nhiều vị trí như được xác định bởi tham số mapred.submit.replication. Do đó, tasktracker có thể sao chép codebase từ một vài vị trí mà một danh sách có thể được gửi bởi trình theo dõi công việc tới nó.

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