Hadoop MapReduce Tham gia & Bộ đếm với ví dụ

Mục lục:

Anonim

Tham gia trong Mapreduce là gì?

Phép toán Mapreduce Join được sử dụng để kết hợp hai tập dữ liệu lớn. Tuy nhiên, quá trình này liên quan đến việc viết rất nhiều mã để thực hiện thao tác nối thực tế. Việc kết hợp hai tập dữ liệu bắt đầu bằng cách so sánh kích thước của từng tập dữ liệu. Nếu một tập dữ liệu nhỏ hơn so với tập dữ liệu khác thì tập dữ liệu nhỏ hơn sẽ được phân phối cho mọi nút dữ liệu trong cụm.

Sau khi kết hợp trong MapReduce được phân phối, Mapper hoặc Reducer sử dụng tập dữ liệu nhỏ hơn để thực hiện tra cứu các bản ghi phù hợp từ tập dữ liệu lớn và sau đó kết hợp các bản ghi đó để tạo thành các bản ghi đầu ra.

Trong hướng dẫn này, bạn sẽ học-

  • Tham gia MapReduce là gì?
  • Các loại tham gia
  • Cách kết hợp hai tập dữ liệu: Ví dụ về MapReduce
  • Counter trong MapReduce là gì?
  • Các loại bộ đếm MapReduce
  • Ví dụ về bộ đếm

Các loại tham gia

Tùy thuộc vào nơi thực hiện tham gia thực tế, các tham gia trong Hadoop được phân loại thành-

1. Phép nối phía bản đồ - Khi phép nối được thực hiện bởi người lập bản đồ, nó được gọi là phép nối phía bản đồ. Trong kiểu này, phép nối được thực hiện trước khi dữ liệu thực sự được sử dụng bởi hàm bản đồ. Bắt buộc đầu vào cho mỗi bản đồ phải ở dạng phân vùng và được sắp xếp theo thứ tự. Ngoài ra, phải có một số lượng phân vùng bằng nhau và nó phải được sắp xếp theo khóa nối.

2. Phép nối phía giảm - Khi phép nối được thực hiện bởi bộ giảm tốc, nó được gọi là phép nối phía giảm. Trong phép nối này không cần thiết phải có một tập dữ liệu ở dạng có cấu trúc (hoặc được phân vùng).

Ở đây, quá trình xử lý phía bản đồ phát ra khóa tham gia và các bộ giá trị tương ứng của cả hai bảng. Như một tác động của quá trình xử lý này, tất cả các bộ dữ liệu có cùng một khóa nối sẽ rơi vào cùng một bộ rút gọn, sau đó nối các bản ghi với cùng một khóa nối.

Một luồng quy trình tổng thể của các phép nối trong Hadoop được mô tả trong sơ đồ dưới đây.

Các kiểu tham gia trong Hadoop MapReduce

Cách kết hợp hai tập dữ liệu: Ví dụ về MapReduce

Có hai Bộ dữ liệu trong hai tệp khác nhau (được hiển thị bên dưới). Key Dept_ID là chung trong cả hai tệp. Mục đích là sử dụng MapReduce Join để kết hợp các tệp này

Tệp 1
Tệp 2

Đầu vào: Tập dữ liệu đầu vào là tệp txt, DeptName.txt & DepStrength.txt

Tải xuống tệp đầu vào từ đây

Đảm bảo bạn đã cài đặt Hadoop. Trước khi bạn bắt đầu với quy trình thực tế của ví dụ MapReduce Join, hãy thay đổi người dùng thành 'hduser' (id được sử dụng trong khi cấu hình Hadoop, bạn có thể chuyển sang userid được sử dụng trong quá trình cấu hình Hadoop của mình).

su - hduser_

Bước 1) Sao chép tệp zip vào vị trí bạn chọn

Bước 2) Giải nén tệp Zip

sudo tar -xvf MapReduceJoin.tar.gz

Bước 3) Vào thư mục MapReduceJoin /

cd MapReduceJoin/

Bước 4) Khởi động Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Bước 5) DeptStrength.txt và DeptName.txt là các tệp đầu vào được sử dụng cho chương trình ví dụ MapReduce Join này.

Tệp này cần được sao chép sang HDFS bằng lệnh dưới đây-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Bước 6) Chạy chương trình bằng lệnh dưới đây-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Bước 7) Sau khi thực thi, tệp đầu ra (có tên 'part-00000') sẽ được lưu trữ trong thư mục / output_mapreducejoin trên HDFS

Kết quả có thể được nhìn thấy bằng cách sử dụng giao diện dòng lệnh

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

Kết quả cũng có thể được nhìn thấy qua giao diện web như-

Bây giờ hãy chọn 'Duyệt qua hệ thống tệp' và điều hướng đến / output_mapreducejoin

Mở part-r-00000

Kết quả được hiển thị

LƯU Ý: Xin lưu ý rằng trước khi chạy chương trình này vào lần tiếp theo, bạn sẽ cần phải xóa thư mục đầu ra / output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

Cách khác là sử dụng một tên khác cho thư mục đầu ra.

Counter trong MapReduce là gì?

Một Counter trong MapReduce là một cơ chế được sử dụng để thu thập và đo lường thông tin thống kê về việc làm và các sự kiện MapReduce. Bộ đếm theo dõi các thống kê công việc khác nhau trong MapReduce như số lượng hoạt động đã xảy ra và tiến trình của hoạt động. Bộ đếm được sử dụng để chẩn đoán sự cố trong MapReduce.

Bộ đếm Hadoop tương tự như đặt thông báo nhật ký vào mã cho bản đồ hoặc thu nhỏ. Thông tin này có thể hữu ích cho việc chẩn đoán sự cố trong xử lý công việc MapReduce.

Thông thường, các bộ đếm này trong Hadoop được xác định trong một chương trình (ánh xạ hoặc thu nhỏ) và được tăng dần trong quá trình thực thi khi một sự kiện hoặc điều kiện cụ thể (cụ thể cho bộ đếm đó) xảy ra. Một ứng dụng rất tốt của bộ đếm Hadoop là theo dõi các bản ghi hợp lệ và không hợp lệ từ một tập dữ liệu đầu vào.

Các loại bộ đếm MapReduce

Về cơ bản có 2 loại Bộ đếm MapReduce

    1. Bộ đếm tích hợp Hadoop: Có một số bộ đếm Hadoop tích hợp tồn tại cho mỗi công việc. Dưới đây là các nhóm bộ đếm được tích hợp sẵn-
      • Bộ đếm tác vụ MapReduce - Thu thập thông tin cụ thể về tác vụ (ví dụ: số lượng bản ghi đầu vào) trong thời gian thực thi của nó.
      • Bộ đếm hệ thống tệp - Thu thập thông tin như số byte được đọc hoặc ghi bởi một tác vụ
      • Bộ đếm FileInputFormat - Thu thập thông tin về một số byte được đọc qua FileInputFormat
      • Bộ đếm FileOutputFormat - Thu thập thông tin của một số byte được viết thông qua FileOutputFormat
      • Bộ đếm công việc - Các bộ đếm này được sử dụng bởi JobTracker. Số liệu thống kê do họ thu thập bao gồm ví dụ: số lượng nhiệm vụ được khởi chạy cho một công việc.
    2. Bộ đếm do người dùng xác định

Ngoài các bộ đếm tích hợp sẵn, người dùng có thể xác định bộ đếm của riêng mình bằng cách sử dụng các chức năng tương tự do ngôn ngữ lập trình cung cấp. Ví dụ, trong Java, 'enum' được sử dụng để xác định các bộ đếm do người dùng xác định.

Ví dụ về bộ đếm

Một MapClass ví dụ với Bộ đếm để đếm số lượng giá trị bị thiếu và không hợp lệ. Tệp dữ liệu đầu vào được sử dụng trong hướng dẫn này Tập dữ liệu đầu vào của chúng tôi là tệp CSV, SalesJan2009.csv

public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString sales = fields[8];if (country.length() == 0) {reporter.incrCounter(SalesCounters.MISSING, 1);} else if (sales.startsWith("\"")) {reporter.incrCounter(SalesCounters.INVALID, 1);} else {output.collect(new Text(country), new Text(sales + ",1"));}}}

Đoạn mã trên cho thấy một ví dụ về triển khai bộ đếm trong Hadoop Map Reduce.

Ở đây, SalesCounters là một bộ đếm được xác định bằng cách sử dụng 'enum' . Nó được sử dụng để đếm các bản ghi đầu vào MISSINGINVALID .

Trong đoạn mã, nếu trường 'quốc gia' có độ dài bằng 0 thì giá trị của nó bị thiếu và do đó bộ đếm tương ứng SalesCounters.MISSING được tăng lên.

Tiếp theo, nếu trường 'bán hàng' bắt đầu bằng dấu " thì bản ghi được coi là KHÔNG HỢP LỆ. Điều này được biểu thị bằng cách tăng dần bộ đếm SalesCounters.INVALID.