Hình 1.1: Mô tả dữ liệu lớn1.2 Khái niệm, đặc trưng của dữ liệu lớn và sự khác biệt với dữ liệu truyền thống 1.2.1 Khái niệm về dữ liệu lớn - Theo wikipedia: Dữ liệu lớn Big data là một
TỔNG QUAN VỀ DỮ LIỆU LỚN ( BIG DATA)
Giới thiệu qua về dữ liệu lớn
Trước đây, chúng ta mới chỉ biết đến dữ liệu có cấu trúc (structure data), ngày nay với sự kết hợp của dữ liệu và internet đã xuất hiện một dạng khác của dữ liệu - Big data (dịch là “dữ liệu lớn”) Dữ liệu này có thể từ các nguồn như: hồ sơ hành chính, giao dịch điện tử, dòng trạng thái (status), chia sẻ hình ảnh, bình luận, tin nhắn của chính chúng ta, nói cách khác chúng là dữ liệu được sản sinh qua quá trình chia sẻ thông tin trực tuyến liên tục của người sử dụng
Sự bùng nổ dữ liệu này chỉ mới xuất hiện gần đây Cách đây không lâu, vào năm 2000, chỉ mới có một phần tư lượng thông tin lưu trữ trên toàn thế giới ở dạng kỹ thuật số Ba phần tư còn lại được người ta lưu trên giấy tờ, phim, và các phương tiện analog khác Nhưng do lượng dữ liệu kỹ thuật số bùng nổ quá nhanh – cứ 3 năm lại tăng gấp đôi – cục diện trên nhanh chóng đảo ngược Ngày nay, chỉ dưới2% tổng lượng thông tin chưa được chuyển sang lưu trữ ở dạng kỹ thuật số Theo tài liệu của Intel vào tháng 09/2013, hiện nay thế giới đang tạo ra 1 petabyte dữ liệu mỗi 11 giây, tương đương với đoạn video HD dài 13 năm Nhà bán lẻ onlineAmazon.com thì phải xử lí hàng triệu hoạt động mỗi ngày, cũng như yêu cầu từ khoảng nữa triệu đối tác bán hàng Tương tự, Facebook cũng phải quản lí 50 tỉ bức ảnh từ người dùng tải lên, YouTube hay Google thì phải lưu lại hết các lượt truy vấn và video của người dùng cùng nhiều loại thông tin khác có liên quan.
Hình 1.1: Mô tả dữ liệu lớn
Khái niệm, đặc trưng của dữ liệu lớn và sự khác biệt với dữ liệu truyền thống
1.2.1 Khái niệm về dữ liệu lớn
- Theo wikipedia: Dữ liệu lớn (Big data) là một thuật ngữ chỉ bộ dữ liệu lớn hoặc phức tạp mà các phương pháp truyền thống không đủ các ứng dụng để xử lý dữ liệu này
- Theo Gartner: Dữ liệu lớn là những nguồn thông tin có đặc điểm chung khối lượng lớn, tốc độ nhanh và dữ liệu định dạng dưới nhiều hình thức khác nhau, do đó muốn khai thác được đòi hỏi phải có hình thức xử lý mới để đưa ra quyết định, khám phá và tối ưu hóa quy trình.
1.2.2 Nguồn hình thành và phương pháp khai thác, quản lý dữ liệu lớn
Qua thống kê và tổng hợp, dữ liệu lớn được hình thành chủ yếu từ 6 nguồn:
1) Dữ liệu hành chính ( phát sinh từ chương trình của một tổ chức, có thể là chính phủ hay phi chính phủ )
Ví dụ, hồ sơ y tế điện tử ở bệnh viện, hồ sơ bảo hiểm, hồ sơ ngân hàng
2) Dữ liệu từ hoạt động thương mại ( phát sinh từ các giao dịch giữa hai thực thể) Ví dụ, các giao dịch thẻ tín dụng, giao dịch trên mạng, bao gồm cả các giao dịch từ các thiết bị di động;
3) Dữ liệu từ các thiết bị cảm biến như thiết bị chụp hình ảnh vệ tinh, cảm biến đường, cảm biến khí hậu;
4) Dữ liệu từ các thiết bị theo dõi, ví dụ theo dõi dữ liệu từ điện thoại di động, GPS;
5) Dữ liệu từ các hành vi, ví dụ như tìm kiếm trực tuyến (tìm kiếm sản phẩm, dịch vụ hay thông tin khác), đọc các trang mạng trực tuyến ;
6) Dữ liệu từ các thông tin về ý kiến, quan điểm của các cá nhân, tổ chức, trên các phương tiện thông tin xã hội.
Phương pháp khai thác và quản lý dữ liệu lớn hiện nay được thiết kế phù hợp dựa theo các nguồn hình thành dữ liệu lớn Mỗi nguồn dữ liệu lớn khác nhau sẽ có phương pháp khai thác và quản lý dữ liệu lớn khác nhau Tuy nhiên, hiện nay phần lớn các tổ chức trên thế giới đều dùng Hadoop ecosystem là giải pháp tối ưu để khai thác và quản lý dữ liệu lớn.
1.2.3 Đặc trưng 5V của dữ liệu lớn
Mô hình 5Vs do Gartner xây dựng Gartner là công ty nghiên cứu và tư vấn về công nghệ thông tin hàng đầu thế giới do một người Mỹ tên là Gideon Gartner sáng lập năm 1979.
Dữ liệu lớn có 5 đặc trưng cơ bản như sau (mô hình 5V9 ):
(1) Khối lượng dữ liệu (Volume) Đây là đặc điểm tiêu biểu nhất của dữ liệu lớn, khối lượng dữ liệu rất lớn Kích cỡ của Big data đang từng ngày tăng lên, và tính đến năm 2012 thì nó có thể nằm trong khoảng vài chục terabyte cho đến nhiều petabyte (1 petabyte = 1024 terabyte) chỉ cho một tập hợp dữ liệu Dữ liệu truyền thống có thể lưu trữ trên các thiết bị đĩa mềm, đĩa cứng Nhưng với dữ liệu lớn chúng ta sẽ sử dụng công nghệ
“đám mây” mới đáp ứng khả năng lưu trữ được dữ liệu lớn
Tốc độ có thể hiểu theo 2 khía cạnh:
(a) Khối lượng dữ liệu gia tăng rất nhanh (mỗi giây có tới 72.9 triệu các yêu cầu truy cập tìm kiếm trên web bán hàng của Amazon);
(b) Xử lý dữ liệu nhanh ở mức thời gian thực (real-time), có nghĩa dữ liệu được xử lý ngay tức thời ngay sau khi chúng phát sinh (tính đến bằng mili giây) Các ứng dụng phổ biến trên lĩnh vực Internet, Tài chính, Ngân hàng, Hàng không, Quân sự, Y tế – Sức khỏe như hiện nay phần lớn dữ liệu lớn được xử lý real-time. Công nghệ xử lý dữ liệu lớn ngày nay đã cho phép chúng ta xử lý tức thì trước khi chúng được lưu trữ vào cơ sở dữ liệu
(3) Đa dạng (Variety) Đối với dữ liệu truyền thống chúng ta hay nói đến dữ liệu có cấu trúc, thì ngày nay hơn 80% dữ liệu được sinh ra là phi cấu trúc (tài liệu, blog, hình ảnh, vi deo, bài hát, dữ liệu từ thiết bị cảm biến vật lý, thiết bị chăm sóc sức khỏe…) Big data cho phép liên kết và phân tích nhiều dạng dữ liệu khác nhau
Ví dụ, với các bình luận của một nhóm người dùng nào đó trên Facebook với thông tin video được chia sẻ từ Youtube và Twitter.
(4) Độ tin cậy/chính xác (Veracity)
Một trong những tính chất phức tạp nhất của Dữ liệu lớn là độ tin cậy/chính xác của dữ liệu Với xu hướng phương tiện truyền thông xã hội (Social Media) và mạng xã hội (Social Network) ngày nay và sự gia tăng mạnh mẽ tính tương tác và chia sẻ của người dùng Mobile làm cho bức tranh xác định về độ tin cậy
& chính xác của dữ liệu ngày một khó khăn hơn Bài toán phân tích và loại bỏ dữ liệu thiếu chính xác và nhiễu đang là tính chất quan trọng của Big data
Giá trị là đặc điểm quan trọng nhất của dữ liệu lớn, vì khi bắt đầu triển khai xây dựng dữ liệu lớn thì việc đầu tiên chúng ta cần phải làm đó là xác định được giá trị của thông tin mang lại như thế nào, khi đó chúng ta mới có quyết định có nên triển khai dữ liệu lớn hay không Nếu chúng ta có dữ liệu lớn mà chỉ nhận được 1% lợi ích từ nó, thì không nên đầu tư phát triển dữ liệu lớn Kết quả dự báo chính xác thể hiện rõ nét nhất về giá trị của dữ liệu lớn mang lại
Ví dụ, từ khối dữ liệu phát sinh trong quá trình khám, chữa bệnh sẽ giúp dự báo về sức khỏe được chính xác hơn, sẽ giảm được chi phí điều trị và các chi phí liên quan đến y tế.
Hình 1.2: Đặc trưng 5V của dữ liệu lớn
1.2.4 Sự khác biệt giữa dữ liệu lớn với dữ liệu truyền thống
Dữ liệu lớn khác với dữ liệu truyền thống (ví dụ, kho dữ liệu - Data Warehouse) ở 4 điểm cơ bản: Dữ liệu đa dạng hơn; lưu trữ dữ liệu lớn hơn; truy vấn dữ liệu nhanh hơn; độ chính xác cao hơn a) Dữ liệu đa dạng hơn:
Khi khai thác dữ liệu truyền thống (dữ liệu có cấu trúc), chúng ta thường phải trả lời các câu hỏi: Dữ liệu lấy ra kiểu gì? định dạng dữ liệu như thế nào? Đối với dữ liệu lớn, không phải trả lời các câu hỏi trên Hay nói khác, khi khai thác, phân tích dữ liệu lớn chúng ta không cần quan tâm đến kiểu dữ liệu và định dạng của chúng; điều quan tâm là giá trị mà dữ liệu mang lại có đáp ứng được cho công việc hiện tại và tương lai hay không b) Lưu trữ dữ liệu lớn hơn:
Lưu trữ dữ liệu truyền thống vô cùng phức tạp và luôn đặt ra câu hỏi lưu như thế nào? dung lượng kho lưu trữ bao nhiêu là đủ? gắn kèm với câu hỏi đó là chi phí đầu tư tương ứng Công nghệ lưu trữ dữ liệu lớn hiện nay đã phần nào có thể giải quyết được vấn đề trên nhờ những công nghệ lưu trữ đám mây, phân phối lưu trữ dữ liệu phân tán và có thể kết hợp các dữ liệu phân tán lại với nhau một cách chính xác và xử lý nhanh trong thời gian thực c) Truy vấn dữ liệu nhanh hơn:
Bức tranh tổng thể ứng dụng dữ liệu lớn
Dữ liệu lớn đã được ứng dụng trong nhiều lĩnh vực như: hoạt động chính trị, giao thông, y tế, thể thao, tài chính, thương mại, thống kê dưới đây là một số ví dụ về ứng dụng dữ liệu lớn.
1.3.1 Ứng dụng dữ liệu lớn trong hoạt động chính trị
Tổng thống Mỹ Obama đã sử dụng dữ liệu dữ liệu lớn để phục vụ cho cuộc tranh cử Tổng thống của mình Ông xây dựng một đội ngũ nhân viên chuyên đi thu thập thông tin và phân tích dữ liệu thu được trong dự án triển khai về dữ liệu lớn. Đội ngũ nhân viên này thu thập tất cả thông tin về người dân ở các khu vực, sau đó phân tích và chỉ ra một số thông tin quan trọng về người dân Mỹ như: Thích đọc sách gì, thích mua loại thuốc gì, thích sử dụng phương tiện gì… Thậm chí còn biết được cả thông tin về mẹ của cử tri đó đã bỏ phiếu tín nhiệm ai ở lần bầu cử trước.
Trên cơ sở những thông tin này, tổng thống Obama đã đưa ra kế hoạch vận động phù hợp, giúp ông tái đắc cử Tổng thống nước Mỹ lần thứ 2
Ngoài ra một số ứng dụng khác trong lĩnh vực chính trị mà dữ liệu lớn được áp dụng như: hệ thống chính phủ điện tử, phân tích quy định và việc tuân thủ quy định, phân tích, giám sát, theo dõi và phát hiện gian lận, mối đe dọa, an ninh mạng.
1.3.2 Ứng dụng dữ liệu lớn trong giao thông
Sử dụng số liệu CDR trong quá khứ để ước lượng các dòng giao thông trong thành phố vào các giờ cao điểm, từ đó có những kế hoạch phân luồng giao thông chi tiết, hợp lý giúp giảm thiểu kẹt xe Ngoài ra còn đưa ra thông tin cho người tham gia giao thông được biết nếu muốn đi từ nơi này đến nơi khác thì nên đi vào giờ nào để tránh kẹt xe, hoặc đi đường nào là ngắn nhất, v.v
Ngoài ra, dữ liệu lớn còn giúp phân tích định vị người dùng thiết bị di động, ghi nhận chi tiết cuộc gọi trong thời gian thực; và giảm thiểu tình trạng ùn tắc giao thông.
1.3.3 Ứng dụng dữ liệu lớn trong y tế
Trong y học các bác sĩ dựa vào số liệu trong các bệnh án để đưa ra dự đoán về nguy cơ mắc bệnh Đồng thời cũng đưa ra được xu hướng lây lan của bệnh
Ví dụ, ứng dụng Google Flu Trend là một trong những ứng dụng thành công của Google ứng dụng này dựa trên từ khóa tìm kiếm ở một khu vực nào đó, sau đó bộ máy phân tích của Google sẽ phân tích và đối chiếu kết quả tìm kiếm đó, sau cùng là đưa ra dự báo về xu hướng dịch cúm tại khu vực đó Qua đó cho biết tình hình cúm tại khu vực đó sẽ diễn ra như thế nào để đưa ra các giải pháp phòng tránh Những kết quả mà Google Flu Trend đưa ra, hoàn toàn phù hợp với báo cáo của Tổ chức Y tế Thế giới WHO về tình hình bệnh cúm tại các khu vực đó.
1.3.4 Ứng dụng dữ liệu lớn trong thể thao
Ngày nay, tất cả các sân vận động chuẩn bị cho giải bóng đá Ngoại hạng Anh đều được trang bị một bộ camera kỹ thuật số theo dõi mọi cầu thủ trên sân Mười điểm dữ liệu được thu thập mỗi giây trên mỗi người trong số 22 cầu thủ trên sân, tạo ra 1,4 triệu điểm dữ liệu sau mỗi trận Sau đó, các nhà phân tích giải mã mớ dữ liệu đó để xác định mọi cú tắc bóng, cú sút hoặc đường chuyền rồi người quản lý và nhà phân tích hiệu suất sẽ có được cái nhìn sâu sắc hơn về những gì đã xảy ra trong mỗi trận đấu Trong các buổi tập, cầu thủ cũng đeo thiết bị theo dõi GPS,cảm biến gia tốc và máy theo dõi nhịp tim để phân tích hiệu suất tập luyện và tối ưu hóa sự chuẩn bị của họ Các thiết bị theo dõi như vậy hiện không được phép trong các trận đấu chính nhưng lại cung cấp số các liệu thống kê quan trọng Một số câu lạc bộ thậm chí đã bắt đầu kết hợp việc phân tích hiệu suất tập luyện và các trận đấu của họ với dữ liệu từ việc theo dõi các khía cạnh khác trong cuộc sống của cầu thủ, chẳng hạn như chế độ ăn uống và thói quen ngủ của anh ta Kết quả của một trận đấu đương nhiên phụ thuộc nhiều vào các cầu thủ, nhưng sự cạnh tranh khốc liệt trong các bộ môn thể thao đang đòi hỏi các nhà quản lý áp dụng khoa học dữ liệu cũng như các công cụ hỗ trợ khác nhằm giành lấy nhiều lợi thế hơn nữa. Thỏa thuận hợp tác giữa SAP và Hiệp hội bóng đá Đức (DFB) chắc chắn đã thu hút nhiều sự chú ý hơn sau khi Đội tuyển Quốc gia Đức vô địch FIFA World Cup
2014 Nó đã dẫn đến SAP Match Insight được phép sử dụng trong việc phân tích đào tạo, chuẩn bị cho các giải đấu SAP Match Insight cho phép các huấn luyện viên và tuyển trạch viên xử lý lượng lớn dữ liệu để tìm và đánh giá các tình huống chính trong mỗi trận đấu nhằm cải thiện hiệu suất của cầu thủ và đội Các thống kê còn chỉ ra rằng mười người chơi với ba quả bóng có thể tạo ra hơn bảy triệu điểm dữ liệu chỉ trong mười phút
1.3.5 Ứng dụng dữ liệu lớn trong tài chính
Từ những dữ liệu chính xác, kịp thời thu thập được thông qua các giao dịch của khách hàng, tiến hành phân tích, xếp hạng và quản lý các rủi ro trong đầu tư tài chính, tín dụng.
1.3.6 Ứng dụng dữ liệu lớn trong thương mại
Trong thương mại dữ liệu lớn giúp cho chúng ta thực hiện được một số công việc sau:
- Phân khúc thị trường và khách hàng
- Phân tích hành vi khách hàng tại cửa hàng
- Tiếp thị trên nền tảng định vị
- Phân tích tiếp thị chéo kênh, tiếp thị đa kênh
- Quản lý các chiến dịch tiếp thị và khách hàng thân thiết
- Phân tích và quản lý chuỗi cung ứng
- Phân tích hành vi, thói quen người tiêu dùng
1.3.7 Ứng dụng dữ liệu lớn trong thống kê
Nhận thấy những lợi ích to lớn và thách thức của Bigdata đối với thống kê nhà nước, Ủy ban Thống kê Liên hợp quốc cũng như các tổ chức thống kê khu vực và Cơ quan thống kê quốc gia của nhiều nước đã triển khai hàng loạt các hoạt động về Bigdata như: Hàn Quốc sử dụng ảnh vệ tinh để thống kê nông nghiệp và một số lĩnhvực khá, Australia sử dụng ảnh vệ tinh để thống kê diện tích đất nông nghiệp và năng suất, Italia sử dụng dữ liệu điện thoại di động để thống kê di cư, Bhutan dùng thiết bị di động để tính toán chỉ số giá tiêu dùng, Estonia dùng điện thoại di động định vị vệ tinh để thống kê du lịch, EuroStat sử dụng dữ liệu về sử dụng điện thoại di động để thống kê du lịch
Cơ hội và thách thức khi ứng dụng dữ liệu lớn
1) Tiếp cận và nghiên cứu về dữ liệu lớn sẽ giúp cho chúng ta có thêm phương án giải quyết, xử lý và đối phó với những thách thức đối sản xuất số liệu thống kê nhà nước trong hiện tại và tương lai Những nghiên cứu thực nghiệm cần phải được tiến hành để khám phá những ứng dụng tiềm năng của dữ liệu lớn trong số liệu thống kê nhà nước, và nghiên cứu thực nghiệm đó phải là một phần trong Quy trình sản xuất số liệu thống kê
2) Nghiên cứu về dữ liệu lớn cần phải có cơ sở hạ tầng công nghệ thông tin hiện đại, đáp ứng các yêu cầu xử lý khối lượng lớn dữ liệu và nhanh, đồng thời có thể tập hợp dữ liệu từ nhiều nguồn khác nhau Thực hiện được điều này chúng ta có được đội ngũ nguồn nhân lực về quản lý và khai thác Big data vững vàng về chuyên môn và được trải qua kinh nghiệm thực tế
3) Tiếp cận và nghiên cứu về dữ liệu lớn sẽ giúp chúng ta có được những văn bản pháp lý bổ sung có thể giúp cho Cơ quan thống kê nhà nước có điều kiện để thực hiện được khai thác dữ liệu thông qua hồ sơ hành chính, ngoài ra dữ liệu cũng được bảo đảm và giữ bí mật nhờ những văn bản pháp lý bổ sung này
4) Sử dụng dữ liệu lớn đem lại niềm tin của cộng đồng với thống kê nhà nước do quá trình trình sản xuất số liệu thống kê nhà nước với dữ liệu lớn hoàn toàn không có sự tác động chủ ý của con người.
Nhiều đơn vị, tổ chức không đo lường được vấn đề sẽ phát sinh trong quá trình triển khai thực hiện, dự toán kinh phí chưa chính xác, do vậy dự án không thực hiện được Để triển khai được thành công, yếu tố tài chính có ý nghĩa rất quan trọng, một số tập đoàn thương mại lớn có tiềm lực tài chính vững chắc đã xây dựng thuận lợi hệ thống dữ liệu Big data như IBM, website bán hàng thương mại điện tử Amazon
Chính sách, quy định Luật pháp về truy cập và sử dụng dữ liệu
Việc sử dụng và khai thác dữ liệu lớn phụ thuộc vào Luật quy định của mỗi quốc gia.
Ví dụ: ở Canada người dùng có thể được tiếp cận dữ liệu từ cả hai tổ chức chính phủ và phi chính phủ, nhưng ở những nước khác như Ireland thì phải được sự cho phép từ các cơ quan chính phủ Điều này có thể dẫn đến những hạn chế để truy cập vào một số loại dữ liệu lớn.
Trình độ khai thác và quản lý dữ liệu
Do Luật quy định sử dụng và khai thác ở mỗi quốc gia là khác nhau nên cách quản lý là cũng khác nhau tuy nhiên, một vấn đề liên quan đến quản lý thông tin hiện nay là nguồn nhân lực Khoa học dữ liệu lớn đang phát triển mạnh trong những tổ chức tư nhân, trong khi đó bộ phận này chưa được liên kết với những tổ chức của chính phủ một cách chặt chẽ dẫn đến việc quản lý vẫn còn nhiều vướng mắc
Hạ tầng công nghệ thông tin
Cần phải cải thiện tốc độ dữ liệu truy cập vào các dữ liệu hành chính nghĩa là có thể sử dụng giao diện ứng dụng của Chương trình chuyên sâu tiêu chuẩn (API) để truy cập dữ liệu Bằng cách này, nó có thể kết nối các ứng dụng cho dữ liệu thu về và xử lý dữ liệu trực tiếp với dữ liệu hành chính Ngoài ra hệ thống khai thác dữ liệu lớn cũng cần phải được tính toán để có thể kết nối vào được kho cơ sở dữ liệu truyền thống, đó cũng là một trong những thách thức lớn cần được giải quyết.
XỬ LÝ PHÂN TÁN HADOOP-MAPREDUCE
Giới thiệu nền tảng Hadoop
Apache Hadoop hay Hadoop là một phương pháp hỗ trợ các ứng dụng phân tán dữ liệu chuyên sâu theo một giấy phép miễn phí Nó cho phép các ứng dụng làm việc với hàng ngàn máy tính tính toán độc lập và petabyte dữ liệu Hadoop được bắt nguồn từ các bài báo MapReduce của Google và Google File System (GFS).
Hadoop là một trong những dự án hàng đầu của Apache, được xây dựng và được sử dụng bởi một cộng đồng những người đóng góp toàn cầu, viết bằng ngôn ngữ lập trình Java Yahoo! đã đóng góp lớn nhất cho dự án, và Hadoop được sử dụng rộng rãi trên khắp các doanh nghiệp của nó
Nguồn gốc của Hadoop đến từ các bài viết File System Google được xuất bản vào tháng 10 năm 2003 Bài viết này là một bài nghiên cứu được sản sinh ra từ Google - MapReduce: Xử lý dữ liệu đơn giản trên các cluster lớn Bắt đầu phát triển trên dự án Apache Nutch, nhưng đã được chuyển qua dự án con Hadoop mới trong tháng 1 năm 2006 Doug Cutting đã làm việc tại Yahoo! vào thời điểm đó, đặt tên Hadoop theo tên của con voi đồ chơi của con trai mình
Hadoop 0.1.0 được phát hành vào tháng 4 năm 2006 và tiếp tục phát triển bởi nhiều người đóng góp đến dự án Apache Hadoop
2.1.3 Các thành phần của Hadoop
Hadoop framework gồm hai layer chính :
Hadoop Distriduted file system (HDFS):
HDFS được thiết kế và tối ưu hóa để lưu trữ các tập tin rất lớn và với một mô hình truy cập trực tuyến Kể từ khi nó được dự kiến sẽ chạy trên phần cứng thương mại, nó được thiết kế để tính đến và xử lý sự cố trên máy cá nhân HDFS thông thường không lưu trữ dữ liệu chính Thay vào đó, trong một việc điển hình, dữ liệu được sao chép sang HDFS cho mục đích thực hiện MapReduce, và kết quả sau đó sẽ được sao chép sang HDFS Từ khi HDFS được tối ưu hóa cho các luồng truy cập thông tin lớn, truy cập ngẫu nhiên vào các thành phần của các tập tin thì tốn kém hơn truy cập tuần tự rõ ràng, và nó cũng không hỗ trợ cập nhật các tập tin, chỉ có thể gắn thêm Các kịch bản điển hình của các ứng dụng sử dụng HDFS sau mô hình truy cập ghi một lần đọc nhiều lần
Các tập tin trong HDFS được chia thành một số khối lớn (thường là 64Mb) và được lưu trong Data Node Một tập tin điển hình được phân phối trên một số DataNodes nhằm thúc đẩy băng thông cao và xử lý song song Để nâng cao độ tin cậy, các khối dữ liệu trong HDFS (data blocks) được nhân bản và lưu trỡ trong 3 máy, với một trong những bản sao trong mỗi giá khác nhau để tăng sự sẵn có hơn nữa của dữ liệu Việc duy trì các tập tin siêu dữ liệu được xử lý bởi một NameNode riêng biệt Siêu dữ liệu này bao gồm ánh xạ từ tập tin vào khối và vị trí của khối (DataNode) NameNode theo định kì sẽ truyền đạt siêu dữ liệu của nó cho Secondary NameNode khi cần cấu hình lại để làm nhiệm của NameNode khi xảy ra trường hợp lỗi.
Trong Hadoop, JobTracker (công việc theo dõi) là một điển truy cập cho clients Nhiệm vụ của JobTracker là đảm báo kế hoạch và lập kế hoạch công việc sắp tới của MR, và giao nhiệm vụ cho các TaskTrackers mà nó có trách nhiệm thực hiện Một TaskTracker có thể chạy một số của nhiệm vụ phụ thuộc trong các nguồn lực có sẵn (một ví dụ 2 nhiệm vụ Map và 2 nhiệm vụ reduce) và sẽ phân bố cho các nhiệm vụ mới bằng JogTracker khi nó sẵn sàng Các kích thước tương đối nhỏ của từng công việc so với số lượng lớn các nhiệm vụ trong tổng số giúp đảm bảo cân bằng tải giữa các máy Cần lưu ý rằng trong khi số lượng công việc Map được thực hiện dựa trên kích thước dầu vào của dữ liệu (số lượng phân chia) thì số lượng công việc REDUCE là do người dùng chỉ định.
Trong một cụm lớn, việc các máy xảy ra sự cố là thường xuyên, và để xử lý vấn đề này, thông điệp này thường được gửi từ TaskTracker tới JobTracker định kì và từ công việc Map tới công việc REDUCE Bằng cách này, lỗi có thể được phát hiện và JobTracker có thể sắp xếp lại những nhiệm vụ lỗi cho các TaskTracker khác Hadoop theo một mô hình thực hiện suy đoán để xử lý sự cố Thay vì cố định một nhiệm vụ thất bại hoặc chạy chậm, nó thực hiện một nhiệm vụ tương đương mới như sao lưu Thất bại của JobTracker tự nó không thể được xử lý tự động,nhưng xác suất thất bại của một máy cụ thể là thấp để điều này không nên trình bày một vấn đề nói chung.
Hình 2.1: Mô hình Hadoop MapReduce
2.1.4 Hadoop hoạt động như thế nào?
Giai đoạn 1: Một user hay một ứng dụng có thể submit một job lên Hadoop
(hadoop job client) với yêu cầu xử lý cùng các thông tin cơ bản:
Nơi lưu (location) dữ liệu input, output trên hệ thống dữ liệu phân tán.
Các java class ở định dạng jar chứa các dòng lệnh thực thi các hàm map và reduce. Các thiết lập cụ thể liên quan đến job thông qua các thông số truyền vào.
Giai đoạn 2: Hadoop job client submit job (file jar, file thực thi) và các thiết lập cho JobTracker Sau đó, master sẽ phân phối tác vụ đến các máy slave để theo dõi và quản lý tiến trình các máy này, đồng thời cung cấp thông tin về tình trạng và chẩn đoán liên quan đến job-client.
Giai đoạn 3: TaskTrackers trên các node khác nhau thực thi tác vụ MapReduce và trả về kết quả output được lưu trong hệ thống file.
Khi “chạy Hadoop” có nghĩa là chạy một tập các trình nền – daemon, hoặc các chương trình thường trú, trên các máy chủ khác nhau trên mạng của bạn Những trình nền có vai trò cụ thể, một số chỉ tồn tại trên một máy chủ, một số có thể tồn tại trên nhiều máy chủ.
Công nghệ Hadoop có tính linh hoạt rất cao Bởi vậy, framework này được ứng dụng rất rộng rãi trong hoạt động của các doanh nghiệp Công ty có thể mở rộng, sửa đổi dữ liệu vào bất cứ thời điểm có nhu cầu.
Hiện tại, hệ thống lưu trữ và xử lý dữ liệu Hadoop được sử dụng trên các phần cứng Việc ứng dụng Hadoop cũng giúp các doanh nghiệp tối ưu được chi phí đầu tư Bởi các hệ thống sẵn có được kết nối với nhau, bổ trợ cho nhau.
Hình 2.3: Hệ sinh thái Hadoop
2.1.6 Cụm máy tính Hadoop(Hadoop cluster)
HDFS và MapReduce là hai thành phần chính của một cụm máy tính Hadoop Nhìn chung, kiến trúc của Hadoop là kiến trúc master-slave, và cả hai thành phần HDFS và MapReduce đều tuân theo kiến trúc master-slave này Kiến trúc của một cụm máy tính Hadoop như sau:
Hình 2.4: Tổng quan một Hadoop cluster
Hệ thống file phân tán Hadoop (Hadoop Distributed File System)
2.2.1 Giới thiệu hệ thống file phân tán Hadoop
HDFS (Hadoop Distributed File System) :
- Là hệ thống file phân tán, cung cấp khả năng lưu trữ dữ liệu khổng lồ và tính năng tối ưu hoá việc sử dụng băng thông giữa các node HDFS có thể được sử dụng để chạy trên một cluster lớn với hàng chục ngàn node.
- Cho phép truy xuất nhiều ổ đĩa như là 1 ổ đĩa Nói cách khác, chúng ta có thể sử dụng một ổ đĩa mà gần như không bị giới hạn về dung lượng Muốn tăng dung lượng chỉ cần thêm node (máy tính) vào hệ thống
- Có kiến trúc Master-Slave
- NameNode chạy trên máy chủ Master, có tác vụ quản lý Namespace và điều chỉnh truy cập tệp của client
- DataNode chạy trên các nút Slave có tác vụ lưu trữ business data thực tế
- Một tập tin với định dạng HDFS được chia thành nhiều block và những block này được lưu trữ trong một tập các DataNodes
- Kích thước 1 block thông thường là 64MB, kích thước này có thể thay đổi được bằng việc cấu hình
Hình 2.5: Quá trính các nodes đọc một file trên HDFS
Mô hình tính toán MapReduce
2.3.1 Giới thiệu mô hình tính toán mapreduce
Trước thời điểm Google công bố mô hình MapReduce, với sự bùng nổ của dữ liệu (hàng petrabyte), cùng lúc đó nhu cầu thực hiện xử lý các nghiệp vụ trên lượng dữ liệu khổng lồ là thách thức lớn lúc bấy giờ Cùng với nhu cầu ấy, các doanh nghiệp đang gặp vấn đề tương tự khi muốn tìm một giải pháp tốn ít chi phí
Hình 2.6: Quá trình các nodes ghi trên HDFS và hiệu năng thể hiện cao Trong khi nghiên cứu, một nhóm nhân viên của Google đã khám phá ra một ý tưởng để giải quyết nhu cầu xử lý lượng dữ liệu lớn là việc cần phải có hệ thống nhiều các máy tính và cần có các thao tác để xử lý đồng bộ trên hệ thống đó Và họ đã xác định được 2 thao tác cơ bản là Map và Reduce, nó được lấy cảm hứng từ phong cách lập trình hàm (Functional Programming)
Với ý tưởng trên, Google đã phát triển thành công mô hình MapReduce, là mô hình dùng cho xử lý tính toán song song và phân tán trên hệ thống phân tán. Nói một cách đơn giản hơn, mô hình này sẽ phân rã từ nghiệp vụ chính (do người dùng muốn thể hiện) thành các công việc con để chia từng công việc con này về các máy tính trong hệ thống thực hiện xử lý một cách song song, sau đó thu thập lại các kết quả Với mô hình này, các doanh nghiệp đã cải thiện được đáng kể về hiệu suất xử lý tính toán trên dữ liệu lớn, chi phí đầu tư rẻ và độ an toàn cao.
2.3.2 Tổng quan về mô hình tính toán Mapreduce
Hình 2.7: Tổng quan về mô hình tính toán mapreduce
2.3.3 Cơ chế hoạt động của MapReduce
MapReduce hoạt động bằng cách xử lý dữ liệu đầu vào trong hai giai đoạn,
Tác vụ Map lấy một tập dữ liệu và chuyển đổi nó thành một tập dữ liệu khác, trong đó các phần tử riêng lẻ được chia nhỏ thành các bộ giá trị (cặp key- value).
Tác vụ Reduce lấy output từ Map làm input và kết hợp các bộ dữ liệu đó (cặp key-value) thành một bộ bộ giá trị nhỏ hơn.
Tác vụ Reduce luôn được thực hiện sau tác vụ Map.
Bây giờ, chúng ta hãy xem xét kỹ từng giai đoạn (phase) và cách hoạt động của chúng qua hình minh hoạt dưới đây.
Hình 2.8: Cơ chế hoạt động của mapreduce
Input - Ở đây chúng ta có Record Reader dịch từng bản ghi (record) trong tệp input và gửi parsed data tới mapper dưới dạng các cặp key-value.
Map - Map là một chức năng do người dùng định nghĩa, lấy một loạt các cặp key-value và xử lý từng cặp một để tạo ra 0 hoặc nhiều cặp key-value.
Intermediate Keys - Các cặp key-value do mapper tạo ra được gọi là các Intermediate Key.
Combiner - Combiner là một loại local Reducer, nó nhóm dữ liệu tương tự từ giai đoạn Map thành các tập hợp có thể xác định được Nó lấy các Intermediate Key từ mapper làm input và apply mã do người dùng xác định (user-defined code) để tổng hợp các giá trị trong một phạm vi nhỏ của một mapper Combiner là tùy chọn, không phải là một phần bắt buộc của thuật toán MapReduce chính.
Shuffle & Sort - Tác vụ Reduce bắt đầu với bước Shuffle & Sort Nó tải các cặp key-value đã nhóm vào máy cục bộ (local machine), nơi Reducer đang chạy. Các cặp key-value riêng lẻ được sắp xếp theo key thành một danh sách dữ liệu lớn hơn Danh sách dữ liệu nhóm các key tương đương với nhau để các value của chúng có thể được lặp lại một cách dễ dàng trong tác vụ Reducer.
Reducer - Reducer lấy dữ liệu được ghép cặp key-value được nhóm làm input và chạy chức năng Reducer trên một trong số chúng Tại đây, dữ liệu có thể được tổng hợp, lọc và kết hợp theo một số cách và nó yêu cầu nhiều quá trình xử lý Khi quá trình thực thi kết thúc, nó không cung cấp hoặc cung cấp nhiều cặp key-value cho bước cuối cùng.
Output - Trong giai đoạn này, chúng ta có một output formatter để dịch các cặp key-value cuối cùng từ chức năng Reducer và ghi chúng vào một tệp bằng record writer.
2.3.4 Quá trình xử lý MapReduce
MapReduce được xây dựng từ mô hình lập trình hàm và lập trình song song.Tăng tốc độ thực thi xử lý dữ liệu là mục đích quan trọng nhất của MapReduce. Quy trình này gồm 2 phần:
Map: Đầu vào là nút chủ (master node) và sau đó chia nhỏ nó ra thành các vấn đề bé hơn Gọi là các split 0, split 1, split 2, …
Reduce: Từ các đầu ra trung gian sẽ tổng hợp lại để đưa ra các kết quả cuối cùng cho vấn đề master Để xử lý khối dữ liệu bao gồm rất nhiều cặp (key, value), lập trình viên viết hai hàm Map và Reduce.
- Trộn và sắp xếp các kết quả thu được từ các máy tính làm sao để được kết quả tiện lợi nhất so với mục đích của quá trình.
- Tổng hợp các kết quả trung gian thu được từ các máy tính phân tán
Thực hiện hàm Reduce Đưa ra kết quả cuối cùng.
Lấy ý tưởng từ lập trình hàm, mô hình MapReduce dựa trên hai hàm Map và Reduce Để xử lý khối dữ liệu bao gồm nhiều cặp (key, value), lập trình viên viết hai hàm Map và Reduce Hàm Map có đầu vào là một cặp (k1,v1) và đầu ra là một danh sách các cặp (k2, v2), như vậy hàm Map có thể viết một cách hình thức như sau:
Hình 2.10: Mô hình làm việc của hàm Map
Mô hình MapReduce áp dụng hàm Map (do người dùng viết) vào từng cặp (key, value) trong khối dữ liệu vào, chạy rất nhiều phiên bản của hàm Map song song với nhau trên các node của cluster Sau khi giai đoạn này kết thúc, kết quả thu được là một tập hợp rất nhiều cặp (key, value) gọi là các cặp (key, value) trung
Hình 2.9: Mô hình làm việc của một công việc mapreduce gian Các cặp này lại được nhóm một lần nữa theo khóa, như vậy các cặp (key, value) trung gian có cùng khóa sẽ nằm cùng một nhóm trung gian.
Sau đó, hàm Reduce (cũng do người dùng viết) sẽ được áp dụng vào từng nhóm trung gian để tạo thành kết quả cuối cùng tùy theo yêu cầu đặt ra Một cách hình thức, hàm Reduce có thể được mô tả như sau:
Hình 2.11: Mô hình làm việc của hàm Reduce
SỬ DỤNG HADOOP MAPREDUCE TRONG PHÂN TÍCH THỐNG KÊ MÔ TẢ TRÊN DỮ LIỆU LỚN
Các bước thực hiện của chương trình
Python là một ngôn ngữ lập trình phổ biến và mạnh mẽ được sử dụng rộng rãi trong lĩnh vực phân tích dữ liệu, trí tuệ nhân tạo, phát triển web và nhiều lĩnh vực khác Với cú pháp đơn giản và dễ hiểu, Python là một trong những ngôn ngữ lập trình thân thiện với người mới học, đồng thời cũng cung cấp nhiều tính năng mạnh mẽ và thư viện phong phú giúp các nhà phát triển xây dựng ứng dụng đa dạng.
Google Colab là một môi trường phát triển và chạy mã nguồn mở dựa trên trình duyệt, được cung cấp bởi Google Nó cho phép người dùng viết và chạy mã Python một cách trực tuyến, mà không cần cài đặt Python trên máy tính cá nhân
Google Colab cung cấp một máy chủ máy tính đám mây mạnh mẽ để thực thi mã, cho phép xử lý dữ liệu và huấn luyện mô hình trí tuệ nhân tạo với tốc độ nhanh Google Colab cung cấp môi trường Jupyter Notebook, cho phép người dùng viết và chia sẻ mã nguồn, kết hợp với các khối mã, lời giải thích và kết quả hiển thị trực quan Colab cũng hỗ trợ việc cài đặt và sử dụng các thư viện phổ biến của Python, giúp người dùng tiếp cận và sử dụng các công cụ và tài nguyên phát triển phong phú
Sử dụng Python và Google Colab, bạn có thể tận dụng sức mạnh của ngôn ngữ lập trình Python và khả năng tính toán mạnh mẽ của Google Colab để phát triển và chạy các chương trình, thực hiện phân tích dữ liệu, xây dựng mô hình trí tuệ nhân tạo và nhiều nhiệm vụ khác một cách thuận tiện và hiệu quả.
Dữ liệu phân tích thống kê file dados.csv https://drive.google.com/drive/folders/
1wELVc6jhMC_MGxszgiUOxcQl41ViXD_I? fbclid=IwAR2XG91j2L95zOi9g_i283e_02GZxmIqQGN1oJBAwnSNDqSXQT6D 5zcE_P4
3.1.3 Code chương trình, kết quả thực hiện import pandas as pd
#dados = pd.read_csv('dados.csv') dados = pd.read_csv('dados.csv', encoding='utf-8', header=0, sep=',') dados.head(10) # Xem 5 bản ghi đầu tiên
# Sắp xếp và lấy giá trị duy nhất từ cột "UF" unique_uf_sorted = dados['UF'].drop_duplicates().sort_values() print(unique_uf_sorted)
#in ra danh sách các giá trị duy nhất trong cột 'Sexo', 'Cor', 'Anos de
Estudo' đã được sắp xếp theo thứ tự tăng dần. unique_sexo_sorted = dados['Sexo'].drop_duplicates().sort_values() print(unique_sexo_sorted) unique_cor_sorted = dados['Cor'].drop_duplicates().sort_values() print(unique_cor_sorted) unique_Anos_sorted = dados['Anos de
Estudo'].drop_duplicates().sort_values() print(unique_Anos_sorted)
#tính giá trị nhỏ nhất và lớn nhất trong cột "Renda" của đối tượng dữ liệu dados. min_age = dados["Renda"].min() max_age = dados["Renda"].max() result = f"From {min_age} to {max_age} reais"
#tính giá trị nhỏ nhất và lớn nhất trong cột "Renda" của đối tượng dữ liệu dados. min_age = dados["Altura"].min() max_age = dados["Altura"].max() result = f"From {min_age} to {max_age} meters" print(result)
#tính giá trị nhỏ nhất và lớn nhất trong cột " Altura " của đối tượng dữ liệu dados. min_age = dados["Altura"].min() max_age = dados["Altura"].max() result = f"From {min_age} to {max_age} meters" print(result)
#hiển thị phân phối (số lần xuất hiện) và phần trăm của mỗi giá trị trong cột 'UF', được gán nhãn bằng tên của từng địa phương. uf = ['Rondônia', 'Acre', 'Amazonas', 'Roraima', 'Pará', 'Amapá',
'Tocantins', 'Maranhão', 'Piauí', 'Ceará', 'Rio Grande do Norte', 'Paraíba',
'Pernambuco', 'Alagoas', 'Sergipe', 'Bahia', 'Minas Gerais', 'Espírito Santo', 'Rio de Janeiro', 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul', 'Mato Grosso do Sul',
'Mato Grosso', 'Goiás', 'Distrito Federal'] dist_perct_uf = pd.DataFrame({"Frequency": dados['UF'].value_counts(),
"Percent": dados['UF'].value_counts(normalize=True) * 100}) dist_perct_uf.index = uf dist_perct_uf
#tính toán phân phối (frequência) và phần trăm (percentual) của các giá trị trong cột 'Sexo', 'Cor' của đối tượng dữ liệu dados. freq_perct_sexo = pd.DataFrame({"Frequência": dados['Sexo'].value_counts(), "Percentual": dados['Sexo'].value_counts(normalize=True) * 100}) freq_perct_sexo.index = ["Masculino", "Feminino"] freq_perct_sexo freq_perct_cor = pd.DataFrame({"Frequency": dados['Cor'].value_counts(),
"Percent": dados['Cor'].value_counts(normalize=True) * 100}) freq_perct_cor.index = ["Indígena", "Branca", "Preta", "Amarela", "Parda"] freq_perct_cor breaks = [0, 1576, 3152, 7880, 15760, 200000] labels = ['E', 'D', 'C', 'B', 'A'] dados['Income_Class'] = pd.cut(dados['Renda'], bins=breaks, labels=labels, include_lowest=True) freq_renda = dados['Income_Class'].value_counts() perct_renda = (freq_renda / len(dados)) * 100 freq_perct_renda = pd.DataFrame({'Frequency': freq_renda, 'Percent': freq_perct_renda.sort_index(inplace=True) print(freq_perct_renda) labels = [
# Create a new column with income class labels dados['Income_Class'] = pd.cut(dados['Renda'], bins=k, labels=labels, include_lowest=True)
# Calculate the frequency of each income class freq_renda = dados['Income_Class'].value_counts()
# Calculate the percentage of each income class perct_renda = (freq_renda / len(dados)) * 100
# Create a DataFrame with frequency and percentage freq_perct_renda = pd.DataFrame({'Frequency': freq_renda, 'Percent': perct_renda}) print(freq_perct_renda) import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
# Assuming 'dados' is your data frame containing the 'Altura' column plt.figure(figsize=(14, 6))
# Histogram plt.subplot(1, 2, 1) sns.histplot(dados['Altura'], binsP, color='yellow', edgecolor='black', alpha=0.7) plt.title("Altura Histogram") plt.xlabel("Altura") plt.ylabel("Frequency") plt.subplot(1, 2, 2) sns.kdeplot(dados['Altura'], color='yellow', fill=True, alpha=0.7, linewidth=1.2) plt.title("Altura Density") plt.xlabel("Altura") plt.ylabel("Density") plt.tight_layout() plt.show() import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
# Assuming 'dados' is your data frame containing the 'Renda' column plt.figure(figsize=(14, 6))
# Histogram plt.subplot(1, 2, 1) sns.histplot(dados['Renda'], binsP, color='green', edgecolor='black', alpha=0.7) plt.title("Renda Histogram") plt.xlabel("Renda") plt.ylabel("Frequency")
# Density plot plt.subplot(1, 2, 2) sns.kdeplot(dados['Renda'], color='green', fill=True, alpha=0.7, linewidth=1) plt.title("Renda Density") plt.xlabel("Renda") plt.ylabel("Density") plt.tight_layout() plt.show() import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
# Assuming 'dados' is your data frame plt.figure(figsize=(14, 6))
# Histogram plt.subplot(1, 2, 1) sns.histplot(dados['Idade'], binsP, color='#00BFFF', alpha=0.7, edgecolor='black') plt.title("Idade Histogram") plt.xlabel("Idade") plt.ylabel("Frequency")
# Density plot plt.subplot(1, 2, 2) sns.kdeplot(dados['Idade'], color='#00BFFF', fill=True, alpha=0.7, linewidth=1) plt.title("Idade Density") plt.xlabel("Idade") plt.ylabel("Density") plt.show() import pandas as pd