© 2017

Chạy WordCount trong Hadoop

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 Hadoop
hadoop$ bin/hdfs dfs -put /home/haduser/datacsv/data.csv /datacsv/data.csv
Dùng hàm WordCount để đếm từ trong file .csv
hadoop$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /datacsv odatacsv
Tiế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ẻ!

Chia sẻ
Nguyễn Lê Điệp

Nguyễn Lê Điệp

Có sở thích lập trình, viết lách nên đã từng tham gia ở một số diễn đàn, đến năm 2017 mới có điều kiện sáng lập ra blog NguyenLeDiep.Com Đang học tập và làm việc tại thành phố Hồ Chí Minh.