2010-05-21 9 views
9

hey tất cả, chỉ bắt đầu trên Hadoop và tò mò những cách tốt nhất trong MapReduce sẽ được đếm người truy cập nếu log của bạn trông như thế này ...Cách tốt nhất để đếm số lượng khách truy cập với Hadoop là gì?

DATE  siteID action username 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview tom 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview bob 
05-05-2010 siteA pageview mike 

và cho mỗi trang web mà bạn muốn tìm hiểu khách truy cập duy nhất cho mỗi trang web?

Tôi đã nghĩ người lập bản đồ sẽ phát ra tên người dùng siteID \ t và trình giảm sẽ giữ một tập hợp() của tên người dùng duy nhất cho mỗi khóa và sau đó phát ra độ dài của tập hợp đó. Tuy nhiên đó sẽ là khả năng lưu trữ hàng triệu tên người dùng trong bộ nhớ mà dường như không đúng. Bất cứ ai có một cách tốt hơn?

Tôi đang sử dụng python trực tuyến bằng cách này

nhờ

Trả lời

3

Bạn có thể làm điều đó như một hoạt động 2 giai đoạn: Bước

Thứ nhất, phát ra (username => siteID), và có giảm chỉ sụp đổ nhiều sự xuất hiện của siteID bằng cách sử dụng một số set - vì bạn thường có ít trang web hơn người dùng, điều này sẽ ổn.

Sau đó, trong bước thứ hai, bạn có thể phát ra (siteID => username) và thực hiện một số đơn giản, vì các mục trùng lặp đã bị xóa.

1

Sử dụng loại thứ hai để sắp xếp trên id người dùng. Bằng cách đó, bạn không cần phải có bất cứ thứ gì trong bộ nhớ - chỉ cần truyền dữ liệu qua và tăng bộ đếm riêng biệt mỗi khi bạn thấy thay đổi giá trị cho một id trang web cụ thể.

Đây là một số documentation.

1

aproach của tôi cũng tương tự như những gì tzaman tặng với một twist nhỏ

  1. ra bản đồ: (username, SiteID) => ("")
  2. giảm đầu ra: (SiteID) => (1)
  3. bản đồ: bản sắc mapper
  4. giảm: longsumreducer (tức là chỉ đơn giản là tóm tắt)

Lưu ý rằng người đầu tiên giảm không cần phải đi qua bất kỳ của r ecords được trình bày. Bạn có thể chỉ cần kiểm tra khóa và tạo đầu ra.

HTH