2013-04-01 33 views
13

Tôi quản lý một nhóm nhỏ các nhà phát triển và tại bất kỳ thời điểm nào chúng tôi có một vài dự án dữ liệu (một lần) có thể được xem là "Embarrassingly parallel" - kịch bản trên một máy tính trong vài ngày, một ví dụ cổ điển sẽ xử lý hàng nghìn tệp PDF để trích xuất một số văn bản chính và đặt vào tệp CSV để chèn sau vào cơ sở dữ liệu. Chúng tôi hiện đang làm đủ các loại nhiệm vụ mà tôi bắt đầu nghiên cứu phát triển hệ thống xếp hàng công việc đơn giản bằng cách sử dụng RabbitMQ với một vài máy chủ dự phòng (với mục đích sử dụng SQS/S3/EC2 của Amazon cho các dự án cần mở rộng quy mô lớn hơn))Sử dụng Hadoop để xử lý song song thay vì dữ liệu lớn

trong tìm kiếm ví dụ về những người khác làm điều này tôi tiếp tục đến trên Hadoop New York Times cổ điển ví dụ:

The New York Times sử dụng 100 Amazon EC2 và một ứng dụng Hadoop để xử lý 4 TB thô hình ảnh dữ liệu TIFF (được lưu trữ trong S3) thành 11 triệu tệp PDF đã hoàn thành trong không gian 24 giờ với chi phí tính toán khoảng 240 đô la (không bao gồm băng thông)

Âm thanh nào hoàn hảo? Vì vậy, tôi đã nghiên cứu Hadoop và Map/Reduce.

Nhưng những gì tôi không thể làm việc ra là cách họ đã làm điều đó? Hoặc tại sao họ đã làm điều đó?

Chuyển đổi TIFF trong PDF không phải là vấn đề Map/Reduce chắc chắn? Việc xếp hàng công việc đơn giản có tốt hơn không?

Ví dụ Hadoop cổ điển khác là "wordcount" từ Yahoo Hadoop Tutorial có vẻ hoàn toàn phù hợp với Map/Reduce và tôi có thể thấy tại sao nó là một công cụ mạnh mẽ cho Big Data.

Tôi không hiểu các tác vụ "Ngẫu nhiên song song" này được đưa vào mô hình Map/Reduce như thế nào?

TL; DR

này là rất nhiều câu hỏi về khái niệm, về cơ bản tôi muốn biết làm thế nào tôi sẽ phù hợp với một nhiệm vụ "chế biến hàng ngàn tập tin PDF để trích xuất một số văn bản quan trọng và đặt vào một tập tin CSV" vào một mô hình Map/Reduce?

Nếu bạn biết về bất kỳ ví dụ nào sẽ hoàn hảo, tôi không yêu cầu bạn viết nó cho tôi.

(Ghi chú: Chúng tôi có mã để xử lý tệp PDF, tôi không yêu cầu điều đó - nó chỉ là một ví dụ, nó có thể là bất kỳ tác vụ nào. Tôi đang hỏi về việc đưa các quy trình đó vào trong Bản đồ/Giảm Hadoop mẫu - khi không có yếu tố "Bản đồ" hoặc "Giảm" rõ ràng đối với một tác vụ.)

Chúc mừng!

+1

... Mỗi nút sẽ xử lý n tệp PDF và xuất ra mọi thứ. Tôi không biết vì nó có giá trị sử dụng Hadoop vì nó đơn giản, đủ để chỉ ném tin nhắn xung quanh rất có khả năng chỉ khi bạn đã có các cụm và chạy. Hadoop có thể được sử dụng cho các nhiệm vụ khá tùy ý, nhưng điều đó không có nghĩa là * nên *. –

+0

Tôi sẽ thêm vào các câu trả lời cho biết Hadoop xử lý song song và chuyển đổi dự phòng. Vì vậy, như nhiều hàng đợi công việc hiện có (như rabbitmq) khi bạn đang sử dụng chúng như là pull/worker. Bất kỳ công việc thất bại sẽ được gửi lại một lần nữa và một lần nữa cho đến khi một công nhân thừa nhận các nhà môi giới mà nó đã được thực hiện. Chỉ xử lý song song và JobTracker không thể là lý do duy nhất để sử dụng Hadoop. Cài đặt, cấu hình và bảo trì các cụm Hadoop thực sự tốn thời gian. Chưa kể bạn cần chuyên gia để làm điều đó. Xem liệu những gì bạn muốn có thể phù hợp với các hệ thống phân tán hay không bằng cách sử dụng Hàng đợi công việc trước, sau đó xem xét Hadoop. – Maziyar

Trả lời

5

Suy nghĩ của bạn là đúng.

Các ví dụ trên mà bạn đã đề cập chỉ sử dụng một phần của giải pháp mà Hadoop cung cấp. Họ chắc chắn sử dụng khả năng tính toán song song của hadoop cộng với hệ thống tệp phân tán. Nó không cần thiết mà bạn sẽ luôn luôn cần một bước giảm. Bạn có thể không có bất kỳ sự phụ thuộc lẫn nhau dữ liệu giữa các tiến trình song song được chạy. trong trường hợp đó bạn sẽ loại bỏ bước giảm.

Tôi nghĩ rằng sự cố của bạn cũng sẽ phù hợp với miền giải pháp hadoop.

Bạn có dữ liệu khổng lồ - số lượng lớn các tập tin PDF Và một công việc dài chạy

Bạn có thể xử lý những tập tin này song song bằng cách đặt các file của bạn trên HDFS và chạy một công việc MapReduce. Thời gian xử lý của bạn về mặt lý thuyết được cải thiện bằng số lượng nút mà bạn có trên cụm của mình. Nếu bạn không thấy sự cần thiết phải tổng hợp các tập dữ liệu được tạo ra bởi các chủ đề riêng lẻ, bạn không cần phải sử dụng một bước giảm khác, bạn cũng cần phải thiết kế một bước giảm.

Điều ở đây là nếu bạn không cần một bước giảm, bạn chỉ cần tận dụng khả năng tính toán song song của hadoop cộng với bạn được trang bị để chạy công việc của bạn trên phần cứng không đắt tiền như vậy.

+2

Đã có khá nhiều nghiên cứu và "Chỉ bản đồ" là chìa khóa (bỏ qua bước giảm) - Chi tiết hơn ở đây cho độc giả tương lai: http://horicky.blogspot.co.uk/2010/08/designing-algorithmis-for- Bản đồ-reduce.html – Snowpoch

+1

Ngoài ra sau khi đọc nhiều hơn Hadoop đang di chuyển khỏi chỉ là "Bản đồ/Giảm" cụ thể - với "YARN" (một phần của Hadoop 2), chúng sẽ cho phép bạn thực hiện những thứ khác như đồ thị và nhiệm vụ phân tán (I) tin rằng họ có một ví dụ được gọi là "DistributedShell" chạy lệnh tương tự trên mỗi nút Hadoop - Nhưng tôi chưa thử nghiệm điều này) – Snowpoch

+1

@Rags Chúng ta có thể chạy chương trình vòng lặp đơn giản trên nhiều nút song song bằng cách giảm kích thước vấn đề trên mỗi nút sử dụng Hadoop? – DeepSidhu1313

1

Tôi cần thêm một điều nữa: xử lý lỗi và thử lại. Trong một môi trường phân tán các nút thất bại là khá phổ biến. Tôi thường xuyên chạy cụm EMR bao gồm vài trăm nút tại thời điểm trong 3 - 8 ngày và phát hiện ra rằng 3 hoặc 4 lỗi trong khoảng thời gian đó là rất có thể. Hadoop JobTracker sẽ gửi lại các tác vụ không thành công (tối đa một số lần nhất định) trong một nút khác.

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