Hadoop Streaming: Viết một chương trình Hadoop MapReduce bằng Python



Bài đăng blog này trên Hadoop Streaming là hướng dẫn từng bước để học cách viết một chương trình Hadoop MapReduce bằng Python để xử lý một lượng lớn Dữ liệu lớn.

Số lượng dữ liệu kỹ thuật số được tạo ra mỗi ngày đang tăng lên theo cấp số nhân với sự ra đời của Phương tiện kỹ thuật số, Internet of Things cùng những phát triển khác. Kịch bản này đã làm nảy sinh những thách thức trong việc tạo ra các công cụ và công nghệ thế hệ tiếp theo để lưu trữ và thao tác các dữ liệu này. Đây là lúc Hadoop Streaming xuất hiện! Dưới đây là biểu đồ mô tả sự tăng trưởng của dữ liệu được tạo hàng năm trên thế giới từ năm 2013. IDC ước tính rằng lượng dữ liệu được tạo hàng năm sẽ đạt 180 Zettabyte vào năm 2025!

data-by-2025-hadoop-streaming





Nguồn: IDC

IBM tuyên bố rằng, mỗi ngày, gần 2,5 nghìn tỷ byte dữ liệu được tạo ra, với 90% dữ liệu của thế giới được tạo ra trong hai năm qua! Đó là một nhiệm vụ đầy thách thức để lưu trữ một lượng lớn dữ liệu như vậy. Hadoop có thể xử lý khối lượng lớn dữ liệu có cấu trúc và phi cấu trúc hiệu quả hơn Kho dữ liệu doanh nghiệp truyền thống. Nó lưu trữ các tập dữ liệu khổng lồ này trên các cụm máy tính phân tán. Hadoop Streaming sử dụng khung MapReduce có thể được sử dụng để viết các ứng dụng nhằm xử lý một lượng lớn dữ liệu.



Vì khung công tác MapReduce dựa trên Java, bạn có thể tự hỏi làm thế nào để một nhà phát triển có thể làm việc trên nó nếu họ không có kinh nghiệm về Java. Chà, các nhà phát triển có thể viết ứng dụng ánh xạ / Reducer bằng ngôn ngữ ưa thích của họ mà không cần có nhiều kiến ​​thức về Java, sử dụng Truyền trực tuyến Hadoop thay vì chuyển sang các công cụ hoặc công nghệ mới như Pig và Hive.

Hadoop Streaming là gì?

Hadoop Streaming là một tiện ích đi kèm với bản phân phối Hadoop. Nó có thể được sử dụng để thực thi các chương trình phân tích dữ liệu lớn. Phát trực tuyến Hadoop có thể được thực hiện bằng các ngôn ngữ như Python, Java, PHP, Scala, Perl, UNIX và nhiều ngôn ngữ khác. Tiện ích này cho phép chúng tôi tạo và chạy các công việc Bản đồ / Rút gọn với bất kỳ tệp thực thi hoặc tập lệnh nào dưới dạng trình ánh xạ và / hoặc trình giảm thiểu. Ví dụ:

$ HADOOP_HOME / bin / hadoop jar $ HADOOP_HOME / hadoop-streaming.jar



-input myInputDirs

-output myOutputDir

- thư mục / thùng rác / mèo

-reducer / bin / wc

Thông số Mô tả:

Mã Python MapReduce:

mapper.py #! / usr / bin / python import sys # Word Count Ví dụ # đầu vào đến từ STDIN đầu vào chuẩn cho dòng trong sys.stdin: line = line.strip () #remove khoảng trắng đầu và cuối từ = line.split ( ) # đánh dấu dòng thành các từ và trả về dưới dạng danh sách từng từ trong các từ: # ghi kết quả vào đầu ra tiêu chuẩn STDOUT print '% s% s'% (word, 1) #Emit word

Reduceer.py

#! / usr / bin / python nhập hệ thống từ toán tử nhập itemgetter # sử dụng từ điển để ánh xạ các từ với số lượng của chúng current_word = Không có current_count = 0 word = Không có # đầu vào đến từ STDIN cho dòng trong sys.stdin: line = line.strip () word, count = line.split ('', 1) try: count = int (count) ngoại trừ ValueError: tiếp tục nếu current_word == word: current_count + = count else: if current_word: print '% s% s'% (current_word, current_count) current_count = count current_word = word if current_word == word: print '% s% s'% (current_word, current_count)

Chạy:

  1. Tạo một tệp với nội dung sau và đặt tên là word.txt.

Mèo chuột sư tử hươu sư tử hổ sư tử voi

  1. Sao chép tập lệnh mapper.py và Reduceer.py vào cùng một thư mục có tệp ở trên.

  1. Mở terminal và Định vị thư mục của tệp. Lệnh: ls: để liệt kê tất cả các tệp trong thư mụccd: để thay đổi thư mục / thư mục

  1. Xem nội dung của tệp.
    Lệnh: mèo tên_tệp

> nội dung của mapper.py

lệnh: cat mapper.py

> Nội dung của Reduceer.py

lệnh: con mèo Reduceer.py

quản trị viên được chứng nhận cloudera cho apache hadoop

Chúng tôi có thể chạy trình liên kết và trình giảm thiểu trên các tệp cục bộ (ví dụ: word.txt). Để chạy Bản đồ và giảm bớt trên Hệ thống tệp phân tán Hadoop (HDFS), chúng tôi cần Hadoop Streaming jar. Vì vậy, trước khi chúng tôi chạy các tập lệnh trên HDFS, hãy chạy chúng cục bộ để đảm bảo rằng chúng hoạt động tốt.

> Chạy trình vẽ bản đồ

chỉ huy: cat word.txt | python mapper.py

> Chạy Reducer.py

chỉ huy: cat word.txt | python mapper.py | sắp xếp -k1,1 | python Reducer.py

gõ đúc trong java với ví dụ

Chúng tôi có thể thấy rằng trình liên kết và trình rút gọn đang hoạt động như mong đợi, vì vậy chúng tôi sẽ không gặp phải bất kỳ vấn đề nào khác.

Chạy Mã Python trên Hadoop

Trước khi chúng tôi chạy tác vụ MapReduce trên Hadoop, hãy sao chép dữ liệu cục bộ (word.txt) sang HDFS

> ví dụ: hdfs dfs -put source_directory hadoop_destination_directory

chỉ huy: hdfs dfs -put /home/edureka/MapReduce/word.txt / user / edureka

Sao chép đường dẫn của tệp jar

Đường dẫn của jar Hadoop Streaming dựa trên phiên bản của jar là:

/usr/lib/hadoop-2.2.X/share/hadoop/tools/lib/hadoop-streaming-2.2.X.jar

Vì vậy, định vị jar Hadoop Streaming trên thiết bị đầu cuối của bạn và sao chép đường dẫn.

chỉ huy:

ls /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar

Chạy công việc MapReduce

chỉ huy:

hadoop jar /usr/lib/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -tệp /home/edureka/mapper.py -mapper mapper.py -tệp / home / edureka / Reduceer.py -reducer Reducer.py -input / user / edureka / word -output / user / edureka / Wordcount

Hadoop cung cấp một giao diện web cơ bản để thống kê và thông tin. Khi cụm Hadoop đang chạy, hãy mở http: // localhost: 50070 trong trình duyệt. Đây là ảnh chụp màn hình của giao diện web Hadoop.

Bây giờ hãy duyệt qua hệ thống tệp và tìm tệp tài khoản từ được tạo để xem kết quả đầu ra. Dưới đây là ảnh chụp màn hình.

Chúng ta có thể thấy đầu ra trên thiết bị đầu cuối bằng lệnh này

chỉ huy: hadoop fs -cat / user / edureka / Wordcount / part-00000

Bây giờ bạn đã học cách thực thi một chương trình MapReduce được viết bằng Python bằng cách sử dụng Hadoop Streaming!

Edureka có một khóa học trực tiếp và có người hướng dẫn về Dữ liệu lớn & Hadoop, do những người hoạt động trong ngành đồng sáng tạo.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.