2011-01-07 31 views
7

Tôi đang trong tình huống mà tôi có hai công việc tạo bản đồ. Tôi cảm thấy thoải mái hơn với python và có kế hoạch sử dụng nó để viết các kịch bản lệnh mapreduce và sử dụng tính năng phát trực tiếp của Hadoop. có thuận tiện để kết nối cả hai công việc theo hình thức khi sử dụng luồng hadoop không?Chaining nhiều nhiệm vụ mapreduce trong Hadoop streaming

Map1 -> Reduce1 -> Map2 -> Reduce2

Tôi đã nghe rất nhiều phương pháp để thực hiện điều này trong java, Nhưng tôi cần một cái gì đó cho Hadoop streaming.

Trả lời

4

Đây là một bài đăng blog tuyệt vời về cách sử dụng Cascading và Streaming. http://www.xcombinator.com/2009/11/18/how-to-use-cascading-with-hadoop-streaming/

Giá trị ở đây là bạn có thể kết hợp java (Luồng truy vấn tầng) với các hoạt động phát trực tuyến tùy chỉnh của bạn trong cùng một ứng dụng. Tôi thấy điều này ít giòn hơn các phương pháp khác.

Lưu ý, đối tượng Cascade trong Cascading cho phép bạn chuỗi nhiều luồng (thông qua bài đăng trên blog, công việc Truyền trực tuyến của bạn sẽ trở thành MapReduceFlow).

Disclaimer: Tôi là tác giả của Cascading

+0

Hmm, tôi không chắc chắn cách này sẽ làm việc. Tôi đã đặt câu hỏi: http://stackoverflow.com/questions/35249753/call-mapper-when-reducer-is-done – gsamaras

1

Thông thường cách tôi làm điều này với luồng Hadoop và Python là từ bên trong tập lệnh bash của tôi mà tôi tạo để chạy các công việc ở vị trí đầu tiên. Tôi luôn chạy từ một tập lệnh bash, theo cách này tôi có thể nhận email và lỗi trên thành công và làm cho chúng linh hoạt hơn trong các tham số từ một tập lệnh Ruby hoặc Python khác có thể hoạt động trong hệ thống xử lý sự kiện lớn hơn.

Vì vậy, đầu ra của lệnh đầu tiên (công việc) là đầu vào cho các lệnh tiếp theo (công việc) có thể được biến trong kịch bản bash của bạn thông qua tại như một đối số từ dòng lệnh (đơn giản và nhanh chóng)

Bạn có thể muốn thanh toán Oozie http://yahoo.github.com/oozie/design.html một công cụ luồng công việc cho Hadoop, điều này sẽ giúp bạn thực hiện việc này (hỗ trợ phát trực tiếp, không phải vấn đề). Tôi không có điều này khi tôi bắt đầu vì vậy tôi đã phải xây dựng điều của riêng tôi nhưng đây là một hệ thống kewl và hữu ích !!!!

1

Nếu bạn đã viết mapper và giảm tốc của bạn bằng Python, tôi sẽ xem xét sử dụng Dumbo nơi một hoạt động như vậy là đơn giản. Trình tự bản đồ của bạn giảm bớt công việc, người lập bản đồ, bộ giảm tốc, vv là tất cả trong một tập lệnh python có thể được chạy từ dòng lệnh.

3

Bạn có thể thử Yelp's MRJob để hoàn thành công việc của mình .. Thư viện MapReduce mở cho phép bạn viết các công việc chuỗi có thể chạy trên đỉnh Hadoop Streaming trên Hadoop Cluster hoặc EC2 của bạn. và có một phương thức được gọi là các bước mà bạn có thể ghi đè để chỉ định chuỗi chính xác của trình lập bản đồ và bộ giảm tốc mà bạn muốn dữ liệu của mình đi qua.

Thanh toán nguồn tại https://github.com/Yelp/mrjob
và tài liệu tại http://packages.python.org/mrjob/

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