3.1 Lịch sử ra đời của thuật ngữ BigData

Thuật ngữ Dữ liệu lớn xuất hiện tương đối gần đây. Google Xu hướng cho thấy sự khởi đầu của sự tăng trưởng tích cực trong việc sử dụng cụm từ kể từ năm 2011:

Đồng thời, chỉ có kẻ lười biếng không sử dụng thuật ngữ này bây giờ. Đặc biệt, thuật ngữ này thường được các nhà tiếp thị sử dụng không phù hợp. Vậy Big Data thực sự là gì? Vì tôi quyết định nêu một cách có hệ thống và làm nổi bật vấn đề nên cần phải xác định khái niệm.

Trong thực tế của tôi, tôi đã gặp các định nghĩa khác nhau:

  • Dữ liệu lớn là khi có hơn 100GB dữ liệu (500GB, 1TB, tùy thích).
  • Dữ liệu lớn là dữ liệu không thể xử lý trong Excel.
  • Dữ liệu lớn là dữ liệu không thể được xử lý trên một máy tính.

Và thậm chí những điều này:

  • Dữ liệu lớn nói chung là bất kỳ dữ liệu nào.
  • Dữ liệu lớn không tồn tại, nó được phát minh bởi các nhà tiếp thị.

Tôi sẽ tuân theo định nghĩa từ wikipedia:

Dữ liệu lớn là một loạt các phương pháp, công cụ và phương pháp để xử lý dữ liệu có cấu trúc và phi cấu trúc với khối lượng lớn và đa dạng đáng kể nhằm thu được kết quả mà con người có thể cảm nhận được, hiệu quả trong điều kiện tăng trưởng liên tục, phân phối trên nhiều nút của mạng máy tính, được hình thành vào cuối những năm 2000, thay thế cho các hệ thống quản lý cơ sở dữ liệu truyền thống và các giải pháp kinh doanh thông minh.

Do đó, với Dữ liệu lớn , tôi sẽ hiểu không phải một số lượng dữ liệu cụ thể và thậm chí không phải chính dữ liệu, mà là các phương pháp xử lý chúng, cho phép xử lý thông tin phân tán. Các phương pháp này có thể được áp dụng cho các tập dữ liệu lớn (chẳng hạn như nội dung của tất cả các trang trên Internet) cũng như các tập dữ liệu nhỏ (chẳng hạn như nội dung của bài giảng này).

Dưới đây là một số ví dụ về nguồn dữ liệu có thể yêu cầu các kỹ thuật dữ liệu lớn:

  • Nhật ký hành vi của người dùng trên Internet
  • Tín hiệu GPS từ ô tô cho một công ty vận tải
  • Dữ liệu được lấy từ các cảm biến trong Máy Va chạm Hadron Lớn
  • Sách số hóa tại Thư viện Nhà nước Nga
  • Thông tin về giao dịch của tất cả các khách hàng của ngân hàng
  • Thông tin về tất cả các giao dịch mua trong một chuỗi bán lẻ lớn, v.v.

Số lượng nguồn dữ liệu đang tăng lên nhanh chóng, điều đó có nghĩa là các công nghệ xử lý dữ liệu ngày càng được yêu cầu nhiều hơn.

3.2 Nguyên tắc dữ liệu lớn

Dựa trên định nghĩa về Dữ liệu lớn, chúng ta có thể xây dựng các nguyên tắc cơ bản để làm việc với dữ liệu đó:

1. Khả năng mở rộng theo chiều ngang. Vì có thể có một lượng dữ liệu lớn tùy ý, nên bất kỳ hệ thống nào liên quan đến việc xử lý dữ liệu lớn đều phải có khả năng mở rộng. Khối lượng dữ liệu tăng gấp 2 lần - lượng sắt trong cụm tăng gấp 2 lần và mọi thứ tiếp tục hoạt động.

2. Khả năng chịu lỗi. Nguyên tắc mở rộng theo chiều ngang ngụ ý rằng có thể có nhiều máy trong một cụm. Ví dụ: cụm Hadoop của Yahoo có hơn 42.000 máy (bạn có thể xem kích thước cụm trong các tổ chức tại liên kết này). Điều này có nghĩa là một số máy này sẽ được bảo đảm không hỏng hóc. Thực hành dữ liệu lớn cần phải nhận thức được những gián đoạn này và tồn tại chúng mà không có bất kỳ hậu quả đáng kể nào.

3. Vị trí dữ liệu. Trong các hệ thống phân tán lớn, dữ liệu được phân phối trên một số lượng lớn máy. Nếu dữ liệu thực tế nằm trên một máy chủ và được xử lý trên một máy chủ khác, chi phí truyền dữ liệu có thể vượt quá chi phí xử lý. Do đó, một trong những nguyên tắc quan trọng nhất để thiết kế các giải pháp BigData là nguyên tắc định vị dữ liệu - nếu có thể, chúng tôi xử lý dữ liệu trên cùng một máy mà chúng tôi lưu trữ dữ liệu đó.

Tất cả các công cụ dữ liệu lớn hiện đại đều tuân theo ba nguyên tắc này theo cách này hay cách khác. Để làm theo chúng, cần phải đưa ra một số phương pháp, phương pháp và mô hình để phát triển các công cụ phát triển dữ liệu. Một trong những phương pháp cổ điển nhất mà tôi sẽ phân tích trong bài giảng hôm nay.

3.3 Giảm bản đồ

MapReduce là mô hình xử lý dữ liệu phân tán do Google đề xuất để xử lý lượng lớn dữ liệu trên các cụm máy tính. MapReduce được minh họa rõ ràng bằng hình ảnh sau:

MapReduce giả định rằng dữ liệu được sắp xếp thành một số bản ghi. Xử lý dữ liệu xảy ra trong 3 giai đoạn:

1. Giai đoạn bản đồ . Ở giai đoạn này, dữ liệu được xử lý trước bằng hàm map() do người dùng xác định. Công việc của giai đoạn này là tiền xử lý và lọc dữ liệu. Thao tác này rất giống với thao tác bản đồ trong các ngôn ngữ lập trình chức năng - một chức năng tùy chỉnh được áp dụng cho từng bản ghi đầu vào.

Hàm map() được áp dụng cho một bản ghi đầu vào sẽ tạo ra nhiều cặp khóa-giá trị. Đặt - nghĩa là, nó chỉ có thể trả về một bản ghi, có thể không trả về gì cả hoặc có thể trả về một vài cặp khóa-giá trị. Điều gì sẽ có trong khóa và giá trị tùy thuộc vào người dùng, nhưng khóa là một thứ rất quan trọng, vì dữ liệu có một khóa trong tương lai sẽ rơi vào một phiên bản của hàm rút gọn.

2. Xáo trộn sân khấu. Nó không được chú ý bởi người dùng. Trong giai đoạn này, đầu ra của chức năng bản đồ là "binned" - mỗi ngăn tương ứng với một khóa đầu ra của giai đoạn bản đồ. Trong tương lai, những giỏ này sẽ đóng vai trò là đầu vào để giảm.

3. Giai đoạn Giảm. Mỗi "giỏ" có giá trị được tạo ở giai đoạn xáo trộn sẽ được đưa vào đầu vào của hàm reduce().

Hàm rút gọn do người dùng đưa ra và tính toán kết quả cuối cùng cho một "giỏ" duy nhất . Tập hợp tất cả các giá trị được trả về bởi hàm reduce() là kết quả cuối cùng của tác vụ MapReduce.

Một số thông tin bổ sung về MapReduce:

  1. Tất cả các lần chạy của chức năng bản đồ đều hoạt động độc lập và có thể chạy song song, kể cả trên các máy cụm khác nhau.
  2. Tất cả các lần chạy của hàm rút gọn đều hoạt động độc lập và có thể chạy song song, kể cả trên các máy cụm khác nhau.
  3. Xáo trộn bên trong đại diện cho một sắp xếp song song, vì vậy nó cũng có thể hoạt động trên các máy cụm khác nhau. Điểm 1-3 cho phép bạn thực hiện nguyên tắc khả năng mở rộng theo chiều ngang .
  4. Chức năng bản đồ thường được sử dụng trên cùng một máy lưu trữ dữ liệu - điều này làm giảm việc truyền dữ liệu qua mạng (nguyên tắc định vị dữ liệu).
  5. MapReduce luôn quét toàn bộ dữ liệu, không có chỉ mục. Điều này có nghĩa là MapReduce được áp dụng kém khi yêu cầu phản hồi rất nhanh.

3.4 Ví dụ về các nhiệm vụ được giải quyết hiệu quả với MapReduce

Số từ

Hãy bắt đầu với nhiệm vụ cổ điển - Đếm từ. Nhiệm vụ được xây dựng như sau: có một kho tài liệu lớn. Nhiệm vụ là tính tổng số lần nó xuất hiện trong kho văn bản cho mỗi từ xuất hiện ít nhất một lần trong kho văn bản.

Giải pháp:

Vì chúng tôi có một kho tài liệu lớn, hãy để một tài liệu là một bản ghi đầu vào cho tác vụ MapRreduce. Trong MapReduce, chúng tôi chỉ có thể xác định các chức năng do người dùng xác định mà chúng tôi sẽ thực hiện (chúng tôi sẽ sử dụng mã giả giống như python):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

Hàm map biến tài liệu đầu vào thành một tập hợp các cặp (từ, 1), xáo trộn trong suốt đối với chúng tôi để biến nó thành các cặp (từ, [1,1,1,1,1,1]), giảm tổng những cái này, trả về câu trả lời cuối cùng cho từ .

Xử lý nhật ký hệ thống quảng cáo

Ví dụ thứ hai được lấy từ thực tiễn của Liên minh Data-Centric.

Nhiệm vụ: có một nhật ký csv của hệ thống quảng cáo có dạng:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

Cần phải tính toán chi phí hiển thị quảng cáo trung bình tại các thành phố của Nga.

Giải pháp:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

Chức năng bản đồ kiểm tra xem chúng tôi có cần mục nhập này hay không - và nếu có, nó chỉ để lại thông tin cần thiết (thành phố và số tiền thanh toán). Hàm rút gọn tính toán câu trả lời cuối cùng cho một thành phố được cung cấp danh sách tất cả các khoản thanh toán trong thành phố đó.