Xử lý dữ liệu phân tán bằng Hadoop, Phần 3: Phát triển ứng dụng
Số trang: 18
Loại file: pdf
Dung lượng: 3.80 MB
Lượt xem: 14
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Phát triển một ứng dụng MapReduce của Ruby cho Hadoop M. Tim Jones, Tác giả độc lập, Emulex Tóm tắt: Với việc cấu hình, cài đặt và sử dụng Hadoop trong các kiến trúc một nút và nhiều nút đã thu được, bạn có thể chuyển sang nhiệm vụ phát triển các ứng dụng trong cơ sở hạ tầng Hadoop. Bài viết cuối cùng trong loạt bài này tìm hiểu các API (Giao diện lập trình ứng dụng) của Hadoop và luồng dữ liệu và trình bày cách sử dụng của chúng với một ứng dụng trình ánh xạ (mapper)...
Nội dung trích xuất từ tài liệu:
Xử lý dữ liệu phân tán bằng Hadoop, Phần 3: Phát triển ứng dụng Xử lý dữ liệu phân tán bằng Hadoop, Phần 3: Phát triển ứng dụng Phát triển một ứng dụng MapReduce của Ruby cho Hadoop M. Tim Jones, Tác giả độc lập, Emulex Tóm tắt: Với việc cấu hình, cài đặt và sử dụng Hadoop trong các kiến trúc một nút và nhiều nút đã thu được, bạn có thể chuyển sang nhiệm vụ phát triển các ứng dụng trong cơ sở hạ tầng Hadoop. Bài viết cuối cùng trong loạt bài này tìm hiểu các API (Giao diện lập trình ứng dụng) của Hadoop và luồng dữ liệu và trình bày cách sử dụng của chúng với một ứng dụng trình ánh xạ (mapper) và trình rút gọn (reducer) đơn giản. Hai bài viết đầu tiên của loạt bài này tập trung vào việc cài đặt và cấu hình của Hadoop cho các cụm đơn nút và đa nút. Bài viết cuối cùng này tìm hiểu cách lập trình trong Hadoop—nói cụ thể là sự phát triển của ứng dụng ánh xạ và rút gọn trong ngôn ngữ Ruby. Tôi chọn Ruby, vì thứ nhất, nó là một ngôn ngữ tạo kịch bản lệnh hướng đối tượng tuyệt vời mà bạn nên biết và thứ hai bạn sẽ tìm thấy nhiều tài liệu tham khảo trong phần Tài nguyên với các hướng dẫn tập trung vào cả ngôn ngữ Java™ lẫn ngôn ngữ Python. Qua việc tìm hiểu này về lập trình MapReduce, tôi cũng giới thiệu cho bạn về API theo luồng. API này cung cấp phương tiện để phát triển các ứng dụng trên các ngôn ngữ khác với ngôn ngữ Java. Hãy bắt đầu bằng một giới thiệu ngắn về ánh xạ và rút gọn (theo quan điểm chức năng) và sau đó đi sâu vào mô hình lập trình Hadoop và kiến trúc của nó và các yếu tố dùng để chia cắt, phân phối và quản lý công việc. Nguồn gốc ánh xạ và rút gọn Vì vậy, cái gì là các yếu tố chức năng đã thôi thúc mô hình lập trình MapReduce? Vào năm 1958, John McCarthy đã phát minh ra một ngôn ngữ gọi là Lisp, cho phép triển khai thực hiện cả tính toán số lẫn tính toán ký hiệu nh ưng dưới dạng đệ quy xa lạ với hầu hết các ngôn ngữ đang sử dụng hiện nay. (Thực sự có một lịch sử hấp dẫn về Lisp trên Wikipedia bao gồm một hướng dẫn thực tế — đáng bỏ thời gian để đọc). Lisp lần đầu tiên được thực hiện trên máy IBM® 704, máy tính được sản xuất hàng loạt đầu tiên cũng hỗ trợ cho ngôn ngữ đã quen thuộc từ trước được yêu thích là: FORTRAN. Hàm map (ánh xạ) có nguồn gốc trong các ngôn ngữ chức năng như Lisp nhưng bây giờ đã phổ biến trong nhiều ngôn ngữ khác, là một ứng dụng hàm số trên một danh sách các phần tử. Điều này có nghĩa gì? Liệt kê 1 cung cấp một phiên giao dịch với Scheme Shell (SCSH), đó là dẫn xuất của Lisp. Dòng đầu tiên xác định một hàm được gọi là square (bình phương) nhận một đối số và trả về căn bậc hai của nó. Dòng tiếp theo minh họa việc sử dụng hàm map. Như đã thấy, với hàm map, bạn cung cấp hàm của mình và danh sách các phần tử mà hàm này được áp dụng. Kết quả là một danh sách mới có chứa các phần tử bình phương. Liệt kê 1. Biểu diễn hàm map trong SCSH > (define square (lambda (x) (* x x))) > (map square '(1 3 5 7)) '(1 9 25 49) > Việc rút gọn cũng được áp dụng trên một danh sách nhưng thường rút gọn danh sách theo một giá trị vô hướng . Ví dụ có trong Liệt kê 2 minh họa một hàm SCSH khác để thu nhỏ một danh sách theo một dạng vô hướng—trong trường hợp này, tổng hợp danh sách các giá trị theo dạng (1 + (2 + (3 + (4 + (5))))). Lưu ý rằng đây là cách lập trình chức năng cổ điển, dựa vào phép đệ quy qua phép lặp. Liệt kê 2. Biểu diễn hàm rút gọn trong SCSH > (define (list-sum lis) (if (null? lis) 0 (+ (car lis) (list-sum (cdr lis))))) > (list-sum '(1 2 3 4 5)) 15 > Thật thú vị khi nhận thấy rằng phép đệ quy là phép lặp hiệu quả trong các ngôn ngữ mệnh lệnh vì phép đệ quy được dịch thành phép lặp trong các bao gói. Mô hình lập trình của Hadoop Google đã giới thiệu ý tưởng về MapReduce như là một mô hình lập trình để xử lý hay tạo các tập dữ liệu lớn. Trong mô hình chính tắc, một hàm map xử lý các cặp giá trị-khóa, tạo ra một tập trung gian của các cặp giá trị-khóa. Sau đó hàm reduce xử lý các cặp giá trị-khóa trung gian đó, kết hợp các giá trị với các khóa có liên quan (xem Hình 1). Dữ liệu đầu vào được phân chia thành nhiều phần theo cách để cho nó có thể được phân phối trong một cụm các máy cho phép xử lý song song. Theo cách như vậy, dữ liệu trung gian đã tạo ra được xử lý song song, làm cho cách tiếp cận này là lý tưởng đối với việc xử lý số lượng dữ liệu rất lớn. Hình 1. Hình ảnh đơn giản hóa của quá trình xử lý MapReduce Với một trình làm mới nhanh chóng, hãy xem xét các kiến trúc từ Hình 1 theo quan điểm về ánh xạ và rút gọn cho việc đếm từ (vì bạn sẽ phát triển một ứng dụng ánh xạ và rút gọn trong bài viết này). Khi dữ liệu đầu vào được cung cấp (vào trong hệ thống tệp của Hadoop [HDFS]), đầu tiên nó được chia thành các phần và sau đó được phân phối tới các trình công việc (worker) ánh xạ (thông qua trình theo dõi công việc). Mặc dù ví dụ trong Hình 2 cho thấy một câu ngắn được chia nhỏ, thông thường số từ để chia nhỏ thành dải có kích thước khoảng 128MB vì lý do là: Cần rất ít thời gian để thiết lập công việc, vì có nhiều việc để làm nên cần giảm thiểu chi phí hoạt động này. Các trình công việc ánh xạ (trong ví dụ chính tắc) phân chia công việc thành các vectơ riêng có chứa các từ được đánh dấu và giá trị ban đầu (là 1, trong trường hợp này). Khi hoàn thành các nhiệm vụ ánh xạ (do trình theo dõi công việc - task tracker trong Hadoop quy định), công việc này được chuyển tới trình công việc rút gọn. Trình công việc rút gọn biến đổi các khóa thành một tập duy nhất, có giá trị biểu diễn số lượng các khóa đã tìm thấy. Hình 2. Ví dụ MapReduce đơn giản Lưu ý rằng quá trình này có thể xảy ra trên cùng một máy hoặc các máy khác nhau hoặc được thực hiện tuần tự hoặc song song nhờ sử dụng cách phân vùng dữ liệu khác nhau và vẫn cho kết quả như nhau. Mặc dù quan điểm chính tắc (cho việc tìm kiếm tạo chỉ mục bằng cách sử dụng đếm từ) là một cách để xem xét Hadoop, nó cho thấy rằng mô hình điện toán này có thể được áp dụng chung cho một số vấn đề tính toán, như bạn sẽ thấy. Tính linh ...
Nội dung trích xuất từ tài liệu:
Xử lý dữ liệu phân tán bằng Hadoop, Phần 3: Phát triển ứng dụng Xử lý dữ liệu phân tán bằng Hadoop, Phần 3: Phát triển ứng dụng Phát triển một ứng dụng MapReduce của Ruby cho Hadoop M. Tim Jones, Tác giả độc lập, Emulex Tóm tắt: Với việc cấu hình, cài đặt và sử dụng Hadoop trong các kiến trúc một nút và nhiều nút đã thu được, bạn có thể chuyển sang nhiệm vụ phát triển các ứng dụng trong cơ sở hạ tầng Hadoop. Bài viết cuối cùng trong loạt bài này tìm hiểu các API (Giao diện lập trình ứng dụng) của Hadoop và luồng dữ liệu và trình bày cách sử dụng của chúng với một ứng dụng trình ánh xạ (mapper) và trình rút gọn (reducer) đơn giản. Hai bài viết đầu tiên của loạt bài này tập trung vào việc cài đặt và cấu hình của Hadoop cho các cụm đơn nút và đa nút. Bài viết cuối cùng này tìm hiểu cách lập trình trong Hadoop—nói cụ thể là sự phát triển của ứng dụng ánh xạ và rút gọn trong ngôn ngữ Ruby. Tôi chọn Ruby, vì thứ nhất, nó là một ngôn ngữ tạo kịch bản lệnh hướng đối tượng tuyệt vời mà bạn nên biết và thứ hai bạn sẽ tìm thấy nhiều tài liệu tham khảo trong phần Tài nguyên với các hướng dẫn tập trung vào cả ngôn ngữ Java™ lẫn ngôn ngữ Python. Qua việc tìm hiểu này về lập trình MapReduce, tôi cũng giới thiệu cho bạn về API theo luồng. API này cung cấp phương tiện để phát triển các ứng dụng trên các ngôn ngữ khác với ngôn ngữ Java. Hãy bắt đầu bằng một giới thiệu ngắn về ánh xạ và rút gọn (theo quan điểm chức năng) và sau đó đi sâu vào mô hình lập trình Hadoop và kiến trúc của nó và các yếu tố dùng để chia cắt, phân phối và quản lý công việc. Nguồn gốc ánh xạ và rút gọn Vì vậy, cái gì là các yếu tố chức năng đã thôi thúc mô hình lập trình MapReduce? Vào năm 1958, John McCarthy đã phát minh ra một ngôn ngữ gọi là Lisp, cho phép triển khai thực hiện cả tính toán số lẫn tính toán ký hiệu nh ưng dưới dạng đệ quy xa lạ với hầu hết các ngôn ngữ đang sử dụng hiện nay. (Thực sự có một lịch sử hấp dẫn về Lisp trên Wikipedia bao gồm một hướng dẫn thực tế — đáng bỏ thời gian để đọc). Lisp lần đầu tiên được thực hiện trên máy IBM® 704, máy tính được sản xuất hàng loạt đầu tiên cũng hỗ trợ cho ngôn ngữ đã quen thuộc từ trước được yêu thích là: FORTRAN. Hàm map (ánh xạ) có nguồn gốc trong các ngôn ngữ chức năng như Lisp nhưng bây giờ đã phổ biến trong nhiều ngôn ngữ khác, là một ứng dụng hàm số trên một danh sách các phần tử. Điều này có nghĩa gì? Liệt kê 1 cung cấp một phiên giao dịch với Scheme Shell (SCSH), đó là dẫn xuất của Lisp. Dòng đầu tiên xác định một hàm được gọi là square (bình phương) nhận một đối số và trả về căn bậc hai của nó. Dòng tiếp theo minh họa việc sử dụng hàm map. Như đã thấy, với hàm map, bạn cung cấp hàm của mình và danh sách các phần tử mà hàm này được áp dụng. Kết quả là một danh sách mới có chứa các phần tử bình phương. Liệt kê 1. Biểu diễn hàm map trong SCSH > (define square (lambda (x) (* x x))) > (map square '(1 3 5 7)) '(1 9 25 49) > Việc rút gọn cũng được áp dụng trên một danh sách nhưng thường rút gọn danh sách theo một giá trị vô hướng . Ví dụ có trong Liệt kê 2 minh họa một hàm SCSH khác để thu nhỏ một danh sách theo một dạng vô hướng—trong trường hợp này, tổng hợp danh sách các giá trị theo dạng (1 + (2 + (3 + (4 + (5))))). Lưu ý rằng đây là cách lập trình chức năng cổ điển, dựa vào phép đệ quy qua phép lặp. Liệt kê 2. Biểu diễn hàm rút gọn trong SCSH > (define (list-sum lis) (if (null? lis) 0 (+ (car lis) (list-sum (cdr lis))))) > (list-sum '(1 2 3 4 5)) 15 > Thật thú vị khi nhận thấy rằng phép đệ quy là phép lặp hiệu quả trong các ngôn ngữ mệnh lệnh vì phép đệ quy được dịch thành phép lặp trong các bao gói. Mô hình lập trình của Hadoop Google đã giới thiệu ý tưởng về MapReduce như là một mô hình lập trình để xử lý hay tạo các tập dữ liệu lớn. Trong mô hình chính tắc, một hàm map xử lý các cặp giá trị-khóa, tạo ra một tập trung gian của các cặp giá trị-khóa. Sau đó hàm reduce xử lý các cặp giá trị-khóa trung gian đó, kết hợp các giá trị với các khóa có liên quan (xem Hình 1). Dữ liệu đầu vào được phân chia thành nhiều phần theo cách để cho nó có thể được phân phối trong một cụm các máy cho phép xử lý song song. Theo cách như vậy, dữ liệu trung gian đã tạo ra được xử lý song song, làm cho cách tiếp cận này là lý tưởng đối với việc xử lý số lượng dữ liệu rất lớn. Hình 1. Hình ảnh đơn giản hóa của quá trình xử lý MapReduce Với một trình làm mới nhanh chóng, hãy xem xét các kiến trúc từ Hình 1 theo quan điểm về ánh xạ và rút gọn cho việc đếm từ (vì bạn sẽ phát triển một ứng dụng ánh xạ và rút gọn trong bài viết này). Khi dữ liệu đầu vào được cung cấp (vào trong hệ thống tệp của Hadoop [HDFS]), đầu tiên nó được chia thành các phần và sau đó được phân phối tới các trình công việc (worker) ánh xạ (thông qua trình theo dõi công việc). Mặc dù ví dụ trong Hình 2 cho thấy một câu ngắn được chia nhỏ, thông thường số từ để chia nhỏ thành dải có kích thước khoảng 128MB vì lý do là: Cần rất ít thời gian để thiết lập công việc, vì có nhiều việc để làm nên cần giảm thiểu chi phí hoạt động này. Các trình công việc ánh xạ (trong ví dụ chính tắc) phân chia công việc thành các vectơ riêng có chứa các từ được đánh dấu và giá trị ban đầu (là 1, trong trường hợp này). Khi hoàn thành các nhiệm vụ ánh xạ (do trình theo dõi công việc - task tracker trong Hadoop quy định), công việc này được chuyển tới trình công việc rút gọn. Trình công việc rút gọn biến đổi các khóa thành một tập duy nhất, có giá trị biểu diễn số lượng các khóa đã tìm thấy. Hình 2. Ví dụ MapReduce đơn giản Lưu ý rằng quá trình này có thể xảy ra trên cùng một máy hoặc các máy khác nhau hoặc được thực hiện tuần tự hoặc song song nhờ sử dụng cách phân vùng dữ liệu khác nhau và vẫn cho kết quả như nhau. Mặc dù quan điểm chính tắc (cho việc tìm kiếm tạo chỉ mục bằng cách sử dụng đếm từ) là một cách để xem xét Hadoop, nó cho thấy rằng mô hình điện toán này có thể được áp dụng chung cho một số vấn đề tính toán, như bạn sẽ thấy. Tính linh ...
Tìm kiếm theo từ khóa liên quan:
lập trình java công nghệ java phát triển với java lập mô hình dịch vụ web java ngôn ngữ lập trìnhTài liệu liên quan:
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 277 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 268 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 268 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 232 0 0 -
Bài giảng Một số hướng nghiên cứu và ứng dụng - Lê Thanh Hương
13 trang 227 0 0 -
Giáo án Tin học lớp 11 (Trọn bộ cả năm)
125 trang 218 1 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 210 0 0 -
Bài tập lập trình Windows dùng C# - Bài thực hành
13 trang 188 0 0 -
Giáo trình Lập trình C căn bản: Phần 1
64 trang 170 0 0 -
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 169 0 0