2009-06-02 27 views
7

Tôi đã xem xét MapReduce một thời gian, và nó có vẻ là một cách rất tốt để thực hiện tính toán phân tán chịu lỗi. Tôi đã đọc rất nhiều bài báo và bài viết về chủ đề đó, cài đặt Hadoop trên một loạt các máy ảo và đã thực hiện một số thử nghiệm rất thú vị. Tôi thực sự nghĩ rằng tôi hiểu các bước Bản đồ và Giảm.MapReduce là phương pháp tốt để phân tích nhật ký máy chủ http như thế nào?

Nhưng đây là vấn đề của tôi: Tôi không thể tìm ra cách nó có thể giúp phân tích nhật ký máy chủ http.

Hiểu biết của tôi là các công ty lớn (ví dụ trên Facebook) sử dụng MapReduce cho mục đích tính toán nhật ký http của họ để tăng tốc quá trình trích xuất số liệu thống kê của khán giả. Công ty tôi làm việc cho, trong khi nhỏ hơn Facebook, có một khối lượng lớn nhật ký web để tính toán hàng ngày (100Go tăng từ 5 đến 10 phần trăm mỗi tháng). Ngay bây giờ chúng tôi xử lý các bản ghi này trên một máy chủ duy nhất và nó hoạt động tốt. Nhưng phân phối các công việc tính toán ngay lập tức trở thành tâm điểm như là một tối ưu hóa hữu ích sớm.

Dưới đây là những câu hỏi tôi không thể trả lời ngay bây giờ, bất kỳ trợ giúp sẽ được đánh giá cao:

  • thể khái niệm MapReduce thực sự được áp dụng để phân tích weblog?
  • MapReduce là cách thông minh nhất để làm điều đó?
  • Bạn sẽ chia các tệp nhật ký web giữa các phiên bản tính toán khác nhau như thế nào?

Cảm ơn bạn.
Nicolas

Trả lời

16

Khái niệm MapReduce có thực sự được áp dụng cho phân tích nhật ký web không?

Có.

Bạn có thể chia nhật ký hudge thành các đoạn 10.000 hoặc 1.000.000 dòng (bất kỳ phần nào tốt cho loại tệp nhật ký của bạn - đối với nhật ký apache tôi muốn có số lớn hơn), cấp chúng cho một số người lập bản đồ trích xuất một cái gì đó cụ thể (như Trình duyệt, Địa chỉ IP, ..., Username, ...) từ mỗi dòng nhật ký, sau đó giảm bằng cách đếm số lần mỗi người xuất hiện (giản thể):

192.168.1.1,FireFox x.x,username1 
    192.168.1.1,FireFox x.x,username1 
    192.168.1.2,FireFox y.y,username1 
    192.168.1.7,IE 7.0,username1 

Bạn có thể trích xuất các trình duyệt, bỏ qua phiên bản, sử dụng một hoạt động bản đồ để có được danh sách này :

FireFox 
FireFox 
FireFox 
IE 

Sau đó giảm để có được điều này: FireFox, 3 IE, 1

là MapReduce cách thông minh nhất để làm việc đó?

Thông minh, nhưng bạn sẽ cần phải rất lớn để có được bất kỳ lợi ích nào ... Tách PETABYTES bản ghi. Để làm điều này, tôi muốn sử dụng Hàng đợi Tin nhắn và một công cụ lưu trữ nhất quán (như cơ sở dữ liệu), với các khách hàng xử lý kéo công việc từ hàng đợi, thực hiện công việc và đẩy kết quả vào hàng đợi khác , với các công việc không được thực hiện trong một khoảng thời gian nào đó, sẵn sàng cho người khác xử lý. Những khách hàng này sẽ là những chương trình nhỏ làm điều gì đó cụ thể.

Bạn có thể bắt đầu với 1 máy khách và mở rộng thành 1000 ... Bạn thậm chí có thể có ứng dụng khách chạy trên màn hình trên tất cả các máy tính trên mạng LAN và chạy 8 máy khách trên máy chủ 8 lõi của mình. các máy tính lõi kép của bạn ...

Với Pull: Bạn có thể có 100 hoặc 10 máy khách hoạt động, máy đa lõi có thể có nhiều khách hàng đang chạy và bất kỳ máy khách nào hoàn tất sẽ có sẵn cho bước tiếp theo. Và bạn không cần phải làm bất kỳ băm hoặc phân công nào cho công việc phải làm. Đó là 100% năng động.

http://img355.imageshack.us/img355/7355/mqlogs.png

Làm thế nào bạn sẽ chia các tập tin web log giữa các trường hợp máy tính khác nhau?

Theo số lượng thành phần hoặc dòng nếu đó là tệp nhật ký dựa trên văn bản.

Để kiểm tra MapReduce, tôi muốn đề xuất bạn nên chơi với Hadoop.

+1

Trước hết, xin lỗi vì sự chậm trễ. Cảm ơn rất nhiều vì câu trả lời rất chất lượng của bạn. Nó giúp rất nhiều ! – Nicolas

+1

Để thay thế cho việc tách các tệp nhật ký, bạn có thể song song tập lệnh "phân tích nhật ký" của mình trên n lõi. Và nếu bạn chạy tập lệnh này trên một cụm ảo hóa (có nghĩa là 96 lõi), mã của bạn sẽ chạy hoàn hảo mà không có bất kỳ thay đổi nào. Bạn cần xác định và tách biệt đơn vị công việc "nhỏ nhất" có tác dụng phụ miễn phí và xử lý dữ liệu bất biến. Điều này có thể yêu cầu bạn phải thiết kế lại mã, có thể. Bên cạnh đó Hadoop tương đối khó thiết lập hơn (và nơi tôi sống, chuyên môn khó tìm hơn). –

1
  • Khái niệm MapReduce có thực sự được áp dụng cho phân tích nhật ký web không?

Chắc chắn. Bạn đang lưu trữ loại dữ liệu nào?

  • MapReduce là cách thông minh nhất để làm điều đó?

Nó sẽ cho phép bạn truy vấn trên nhiều máy hàng cùng một lúc, vì vậy có nó có thể hữu ích. Ngoài ra, bạn có thể thử Sharding.

  • Bạn sẽ chia tệp nhật ký web giữa các phiên bản tính toán khác nhau như thế nào?

Nói chung, bạn sẽ phân phối dữ liệu của mình bằng cách sử dụng consistent hashing algorithm, vì vậy bạn có thể dễ dàng thêm nhiều phiên bản sau này. Bạn nên băm bởi bất cứ điều gì sẽ là khóa chính của bạn trong một cơ sở dữ liệu thông thường. Nó có thể là một id người dùng, một địa chỉ ip, referer, page, advert; chủ đề đăng nhập của bạn là gì.

+0

Ở đây bạn tìm thấy giải thích tuyệt vời về băm đồng nhất: http://michaelnielsen.org/blog/?p=613 – tuinstoel

Các vấn đề liên quan