Hadoop MapReduce Join và Counter là gì
Join trong Mapreduce là gì?
Tính 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 node 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.
- Tập làm văn lớp 2: Viết 4-5 câu về một việc em đã làm thể hiện sự quan tâm chăm sóc ông bà
- Đoạn văn tiếng Anh viết về những bất lợi của người mẹ đi làm
- Cách tag tất cả thành viên trong nhóm chat Messenger cực dễ
- Học blockchain bắt đầu từ đâu 2021
- Oai phong lẫm liệt uy hùng Cầm quân dẹp loạn tan tành ngoại xâm là ai? Câu hỏi thử tài lịch sử sự kiện giỗ tổ liên quân 2022
Các loại Join
Tùy thuộc vào nơi thực hiện Join thực tế, các Join trong Hadoop được phân loại thành-
1. Map-side join – Khi join được thực hiện bởi người lập bản đồ, nó được gọi là Map-side join. Trong kiểu này, join đượ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. Reduce-side join – Khi join được thực hiện bởi reducer, nó được gọi là Reduce-side join. Trong join 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 Join và các bộ giá trị tương ứng của cả hai bảng. Do 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 join trong Hadoop được mô tả trong sơ đồ dưới đây.

Các kiểu Join 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
Đả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ờ 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. Counter 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. Counter được sử dụng để chẩn đoán sự cố trong MapReduce.
Counter 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 Counter 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 Counter đó) xảy ra. Một ứng dụng rất tốt của Counter 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 Counter MapReduce
Về cơ bản có 2 loại Counter MapReduce
- Counter tích hợp Hadoop: Có một số Counter Hadoop tích hợp tồn tại cho mỗi công việc. Dưới đây là các nhóm Counter được tích hợp sẵn-
- Counter 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ó.
- Counter 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ụ
- Counter FileInputFormat – Thu thập thông tin về một số byte được đọc qua FileInputFormat
- Counter FileOutputFormat – Thu thập thông tin của một số byte được viết thông qua FileOutputFormat
- Counter công việc – Các Counter 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 động cho một công việc.
- Counter do người dùng xác định
Ngoài các Counter tích hợp sẵn, người dùng có thể xác định Counter 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 Counter do người dùng xác định.
Ví dụ về Counter
Một MapClass ví dụ với Counter để đế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 MapClass
extends MapReduceBase
implements Mapper<LongWritable, Text, Text, Text>
{
static enum SalesCounters { MISSING, INVALID };
public void map ( LongWritable key, Text value,
OutputCollector<Text, Text> output,
Reporter reporter) throws IOException
{
//Input string is split using ‘,’ and stored in ‘fields’ array
String fields[] = value.toString().split(“,”, -20);
//Value at 4th index is country. It is stored in ‘country’ variable
String country = fields[4];
//Value at 8th index is sales data. It is stored in ‘sales’ variable
String sales = fields[8];
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 Counter trong Hadoop Map Reduce.
Ở đây, SalesCounters là một Counter đượ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 MISSING và INVALID .
Trong đoạn mã, nếu trường ‘country ‘ có độ dài bằng 0 thì giá trị của nó bị thiếu và do đó Counter tương ứng SalesCounters.MISSING được tăng lên.
Tiếp theo, nếu trường ‘sales ‘ 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 Counter SalesCounters.INVALID.