Bài viết được đăng tại nguyenlediep.com - không copy dưới mọi hình thức.
NLD Code - Chạy WordCount trong Hadoop - Bài toán chạy WordCount - Đếm từ là bài toán dễ hiểu nhất trong Hadoop nhằm minh họa cho quá trình MapReduce của mã nguồn....
Chạy WordCount trong Hadoop - Bài toán chạy #WordCount - Đếm từ là bài toán dễ hiểu nhất trong #Hadoop nhằm minh họa cho quá trình #MapReduce của mã nguồn.
Bài toán có những đặc điểm sau:
- File cần đếm rất lớn (quá lớn để có thể được tải lên bộ nhớ chính của 1 máy)
- Mỗi cặp quá lớn cho bộ nhớ.
MapReduce chia làm 3 thao tác:
- Map: Quét file đầu vào và ghi lại từng bản ghi
- Group by Key: Sắp xếp và trộn dữ liệu cho mỗi bản ghi sinh ra từ Map
- Reduce: Tổng hợp, thay đổi hay lọc dữ liệu từ thao tác trước và ghi kết quả ra File.
Về mặt định nghĩa thuật toán, ta có thể mô tả MR như sau:
- Input: Dữ liệu dưới dạng Key → Value
- Lập trình viên viết 2 thủ tục:
- Map(k, v) → <k', v'>*
- Reduce(k', <v'>*) → <k', v''>*
Với:
- Map biến mỗi key k thu được bằng thành cặp <k', v'>.
- Reduce nhận đầu vào là khoá k' và danh sách cách giá trị v' và trả về kết quả là cặp <k', v''>.
Ví dụ với hình mô tả ở trên thì Map trả về danh sách: <A, 1>, <A, 1> còn Reduce nhận kết quả trên và trả về <A, 2>.
Chạy WordCount
Up tập tin .csv lên thư mục của Hadoophadoop$ bin/hdfs dfs -put /home/haduser/datacsv/data.csv /datacsv/data.csvDùng hàm WordCount để đếm từ trong file .csv
hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /datacsv odatacsvTiến trình chạy WordCount
08/06/18 11:40:51 INFO mapred.FileInputFormat: Total input paths to process : 1 08/06/18 11:40:51 INFO mapred.JobClient: Running job: job_201003161102_0002 08/06/18 11:40:52 INFO mapred.JobClient: map 0% reduce 0% 08/06/18 11:40:55 INFO mapred.JobClient: map 9% reduce 0% 08/06/18 11:40:56 INFO mapred.JobClient: map 27% reduce 0% 08/06/18 11:40:58 INFO mapred.JobClient: map 45% reduce 0% 08/06/18 11:40:59 INFO mapred.JobClient: map 81% reduce 0% 08/06/18 11:41:01 INFO mapred.JobClient: map 100% reduce 0% 08/06/18 11:41:05 INFO mapred.JobClient: map 100% reduce 100% 08/06/18 11:41:09 INFO mapred.JobClient: Job complete: job_201003161102_0002 08/06/18 11:41:09 INFO mapred.JobClient: Counters: 17 08/06/18 11:41:09 INFO mapred.JobClient: File Systems 08/06/18 11:41:09 INFO mapred.JobClient: HDFS bytes read=1576605 08/06/18 11:41:09 INFO mapred.JobClient: HDFS bytes written=527522 08/06/18 11:41:09 INFO mapred.JobClient: Local bytes read=1219522 08/06/18 11:41:09 INFO mapred.JobClient: Local bytes written=2439412 08/06/18 11:41:09 INFO mapred.JobClient: Job Counters 08/06/18 11:41:09 INFO mapred.JobClient: Launched reduce tasks=1 08/06/18 11:41:09 INFO mapred.JobClient: Rack-local map tasks=6 08/06/18 11:41:09 INFO mapred.JobClient: Launched map tasks=11 08/06/18 11:41:09 INFO mapred.JobClient: Data-local map tasks=5 08/06/18 11:41:09 INFO mapred.JobClient: Map-Reduce Framework 08/06/18 11:41:09 INFO mapred.JobClient: Reduce input groups=50091 08/06/18 11:41:09 INFO mapred.JobClient: Combine output records=88551 08/06/18 11:41:09 INFO mapred.JobClient: Map input records=33055 08/06/18 11:41:09 INFO mapred.JobClient: Reduce output records=50091 08/06/18 11:41:09 INFO mapred.JobClient: Map output bytes=2601773 08/06/18 11:41:09 INFO mapred.JobClient: Map input bytes=1573044 08/06/18 11:41:09 INFO mapred.JobClient: Combine input records=267975 08/06/18 11:41:09 INFO mapred.JobClient: Map output records=267975 08/06/18 11:41:09 INFO mapred.JobClient: Reduce input records=88551
Đọc kết quả sau khi đếm từ
Câu lệnh đọc kết quảhadoop$ bin/hdfs dfs -cat odatacsv/*Kết quả đọc được
Nguyen 1 Le 2 Diep 3 Anh 1 Tuan 2 Huynh 1 Thanh 4 Tuyen 5
Chúc các bạn thành công và vui vẻ!