You are on page 1of 68

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC SAO ĐỎ


*********

DỮ LIỆU LỚN - BIG DATA


Dùng cho sinh viên đại học
Ngành đào tạo: Công nghệ thông tin
(Tài liệu lưu hành nội bộ)

Năm 2022
LỜI NÓI ĐẦU

Dữ liệu lớn là một lĩnh vực mới nghiên cứu việc xử lý một tập hợp dữ liệu rất
lớn và phức tạp mà các ứng dụng xử lý dữ liệu truyền thống không xử lý được.
Trong các cơ sở dữ liệu truyền thống, hầu hết các thông tin được lưu giữ và truy
cập là văn bản hoặc số. Những năm gần đây, những tiến bộ về kỹ thuật đã đưa đến
những ứng dụng mới của cơ sở dữ liệu. Các cơ sở dữ liệu đa phương tiện bây giờ có
thể lưu trữ hình ảnh, video, âm thanh... Các hệ thống thông tin địa lý có thể lưu trữ và
phân tích các bản đồ, các dữ liệu về thời tiết và các ảnh vệ tinh. Kho dữ liệu và các hệ
thống phân tích trực tuyến được sử dụng trong nhiều công ty để lấy ra và phân tích
những thông tin có lợi từ các cơ sở dữ liệu rất lớn nhằm đưa ra các quyết định. Các kỹ
thuật cơ sở dữ liệu động và thời gian thực được sử dụng trong việc kiểm tra các tiến
trình công nghiệp và sản xuất. Các kỹ thuật tìm kiếm cơ sở dữ liệu đang được áp dụng
cho World Wide Web để cung cấp việc tìm kiếm các thông tin cần thiết cho người sử
dụng bằng cách duyệt qua internet.
Xử lý dữ liệu trên máy tính đã trở thành một thành phần thiết yếu trong cuộc
sống hằng ngày của xã hội hiện đại. Con người có thể có nhiều hoạt động cần có sự
giao tiếp với cơ sở dữ liệu như: Đến ngân hàng để rút tiền và gửi tiền, đăng ký chỗ trên
máy bay hoặc khách sạn, truy cập vào thư viện đã tin học hoá để tìm sách báo, đặt mua
tạp chí ở một nhà xuất bản… Tại các ngân hàng, các cửa hàng, người ta cũng cập nhật
tự động việc quản lý tiền bạc, hàng hoá.
Dữ liệu lớn bao gồm các thách thức như phân tích, thu thập, giám sát dữ liệu,
tìm kiếm, chia sẻ, lưu trữ, truyền nhận, trực quan, truy vấn và tính riêng tư. Thuật ngữ
này thường chỉ đơn giản đề cập đến việc việc sử dụng các phân tích dự báo, phân tích
hành vi người dùng, hoặc một số phương pháp phân tích dữ liệu tiên tiến khác trích
xuất giá trị từ dữ liệu mà ít khi đề cập đến kích thước của bộ dữ liệu. Số lượng của dữ
liệu có sẵn hiện nay thực sự lớn, nhưng đó không phải là đặc trưng phù hợp nhất cùa
hệ sinh thái dữ liệu mới.
Phân tích tập dữ hợp liệu có thể tìm ra tương quan mới tới "xu hướng kinh
doanh hiện tại, phòng bệnh tật, chống tội phạm...". Các nhà khoa học, điều hành doanh
nghiệp, y bác sĩ, quảng cáo và các chính phủ cũng thường xuyên gặp những khó khăn
với các tập hợp dữ liệu lớn trong các lĩnh vực bao gồm tìm kiếm internet, thông tin tài
chính doanh nghiệp. Các nhà khoa học gặp giới hạn trong công việc cần tính toán rất
lớn, bao gôm khí tượng học, bộ gen, mạng thần kinh, các mô phỏng vật lý phức tạp,
sinh vật học và nghiên cứu môi trường. [DLL]
"Dữ liệu lớn - Big data" cho ta nhìn thấy sự thay đổi của dữ liệu lớn đối với
khoa học công nghệ cũng như những ảnh hưởng của nó đối với mọi hoạt động của con
người.
Giáo trình Dữ liệu lớn - Big data dành cho sinh viên ngành Công nghệ thông tin
trường Đại học Sao Đỏ được chia thành 5 chương:

0
Chương 1. Giới thiệu về Big data
Chương 2. Hbase cho hệ thống Big data
Chương 3. Apache hadoop cho hệ thống Big data
Chương 4. Mô hình lập trình Bapreduce
Chương 5. Apache spark cho hệ thống Big data
Trong mỗi chương các khái niệm, mô hình, thuật toán được trình bày chi tiết,
trong các phần có nhiều ví dụ cụ thể minh hoạ. Cuối của mỗi chương là những bài tập
để tổng kết và khắc sâu kiến thức nội dung của chương đó.
Tôi xin bày tỏ lòng biết ơn sâu sắc đến các tác giả về các tài liệu tôi đã sử dụng
làm tài liệu tham khảo để soạn ra giáo trình lưu hành nội bộ này.
Xin được đón nhận sự đóng góp ý kiến chân thành từ bạn đọc gửi về bộ môn
Công nghệ thông tin trường Đại học Sao Đỏ để giáo trình được hoàn thiện hơn. Xin
chân thành cảm ơn!

1
Chương 1. GIỚI THIỆU VỀ BIG DATA

1.1. Khái niệm Big data


Dữ liệu lớn (Tiếng Anh: Big data) là một thuật ngữ cho việc xử lý một tập hợp
dữ liệu rất lớn và phức tạp mà các ứng dụng xử lý dữ liệu truyền thống không xử lý
được. Dữ liệu lớn bao gồm các thách thức như phân tích, thu thập, giám sát dữ liệu,
tìm kiếm, chia sẻ, lưu trữ, truyền nhận, trực quan, truy vấn và tính riêng tư. Thuật ngữ
này thường chỉ đơn giản đề cập đến việc việc sử dụng các phân tích dự báo, phân tích
hành vi người dùng, hoặc một số phương pháp phân tích dữ liệu tiên tiến khác trích
xuất giá trị từ dữ liệu mà ít khi đề cập đến kích thước của bộ dữ liệu.
Phân tích tập dữ hợp liệu có thể tìm ra tương quan mới tới "xu hướng kinh
doanh hiện tại, phòng bệnh tật, chống tội phạm...". Các nhà khoa học, điều hành doanh
nghiệp, y bác sĩ, quảng cáo và các chính phủ cũng thường xuyên gặp những khó khăn
với các tập hợp dữ liệu lớn trong các lĩnh vực bao gồm tìm kiếm internet, thông tin tài
chính doanh nghiệp. Các nhà khoa học gặp giới hạn trong công việc cần tính toán rất
lớn, bao gôm khí tượng học, bộ gen, mạng thần kinh, các mô phỏng vật lý phức tạp,
sinh vật học và nghiên cứu môi trường.

Hình 1.1. Mô hình Big Data


Dữ liệu lớn được định nghĩa là tập hợp các bộ dữ liệu có khối lượng, tốc độ
hoặc sự đa dạng lớn đến mức khó lưu trữ, quản lý, xử lý và phân tích dữ liệu bằng cơ
sở dữ liệu và công cụ xử lý dữ liệu truyền thống. Trong những năm gần đây, đã có sự
tăng trưởng theo cấp số nhân về cả dữ liệu có cấu trúc và phi cấu trúc do công nghệ
thông tin, công nghiệp, chăm sóc sức khỏe, Internet vạn vật và các hệ thống khác tạo
ra.
Theo ước tính của IBM, 2,5 triệu byte dữ liệu được tạo ra mỗi ngày [9]. Một
báo cáo gần đây của DOMO ước tính lượng dữ liệu được tạo ra mỗi phút trên các nền
tảng trực tuyến phổ biến [10]. Dưới đây là một số dữ liệu chính từ báo cáo:
- Người dùng Facebook chia sẻ gần 4,16 triệu mẩu nội dung
- Người dùng Twitter gửi gần 300.000 tweet

2
- Người dùng Instagram thích gần 1,73 triệu bức ảnh
- Người dùng YouTube tải lên 300 giờ nội dung video mới
- Người dùng Apple tải gần 51.000 ứng dụng
- Người dùng Skype thực hiện gần 110.000 cuộc gọi mới
- Amazon nhận được 4300 khách truy cập mới
- Hành khách Uber đi 694 chuyến
- Người đăng ký Netflix phát gần 77.000 giờ video
Dữ liệu lớn có tiềm năng cung cấp năng lượng cho các ứng dụng thông minh
thế hệ tiếp theo sẽ tận dụng sức mạnh của dữ liệu để làm cho các ứng dụng trở nên
thông minh. Các ứng dụng của dữ liệu lớn trải rộng trên nhiều lĩnh vực như web, bán
lẻ và tiếp thị, ngân hàng và tài chính, công nghiệp, chăm sóc sức khỏe, môi trường,
Internet of Things và các hệ thống thực-ảo.
Phân tích Dữ liệu lớn liên quan đến việc thu thập, lưu trữ, xử lý và phân tích dữ
liệu quy mô lớn này. Cần có các công cụ và khung chuyên dụng để phân tích dữ liệu
lớn khi: (1) khối lượng dữ liệu liên quan quá lớn nên khó lưu trữ, xử lý và phân tích dữ
liệu trên một máy duy nhất, (2) tốc độ truyền dữ liệu rất cao và dữ liệu cần được phân
tích theo thời gian thực, (3) có nhiều loại dữ liệu liên quan, có thể có cấu trúc, phi cấu
trúc hoặc bán cấu trúc và được thu thập từ nhiều nguồn dữ liệu, (5) cần có nhiều loại
phân tích khác nhau được thực hiện để trích xuất giá trị từ dữ liệu, chẳng hạn như phân
tích mô tả, chẩn đoán, dự đoán và quy định. Các công cụ và khung Dữ liệu lớn có kiến
trúc xử lý song song và phân tán, đồng thời có thể tận dụng tài nguyên lưu trữ và tính
toán của một cụm máy lớn.
Phân tích dữ liệu lớn bao gồm một số bước bắt đầu từ làm sạch dữ liệu, trộn dữ
liệu (hoặc sắp xếp lại dữ liệu), xử lý dữ liệu và trực quan hóa. Vòng đời phân tích dữ
liệu lớn bắt đầu từ việc thu thập dữ liệu từ nhiều nguồn dữ liệu. Các công cụ và khung
chuyên dụng được yêu cầu để nhập dữ liệu từ các nguồn khác nhau vào phần phụ trợ
phân tích dữ liệu đào. Dữ liệu được lưu trữ trong các giải pháp lưu trữ chuyên dụng
(chẳng hạn như hệ thống tệp phân tán và cơ sở dữ liệu không liên quan) được thiết kế
để mở rộng quy mô. Dựa trên các yêu cầu phân tích (theo lô hoặc thời gian thực) và
loại phân tích được thực hiện (mô tả, chẩn đoán, dự đoán hoặc dự đoán), các khung
chuyên biệt được sử dụng. Phân tích dữ liệu lớn được kích hoạt bởi một số công nghệ
như điện toán đám mây, khung xử lý song song và phân tán, cơ sở dữ liệu phi quan hệ,
điện toán trong bộ nhớ chẳng hạn.
Một số ví dụ về dữ liệu lớn được liệt kê như sau:
- Dữ liệu do mạng xã hội tạo ra bao gồm dữ liệu văn bản, hình ảnh, âm thanh và
video.
- Dữ liệu luồng nhấp chuột được tạo bởi các ứng dụng web như Thương mại
điện tử để phân tích hành vi của người dùng.
- Dữ liệu cảm biến máy được thu thập từ các cảm biến được nhúng trong các hệ
thống năng lượng và công nghiệp để theo dõi tình trạng của chúng và phát hiện lỗi.

3
- Dữ liệu chăm sóc sức khỏe được thu thập trong hệ thống hồ sơ sức khỏe điện
tử (EHR).
- Nhật ký được tạo bởi các ứng dụng web.
- Dữ liệu thị trường chứng khoán.
- Dữ liệu giao dịch được tạo bởi các ứng dụng ngân hàng và tài chính.
Việc phân tích dữ liệu có liên quan đến việc kiểm tra những bộ dữ liệu để thu
thập các thông tin chi tiết hoặc rút ra các kết luận về những nội dung chúng chứa, ví dụ
như các xu hướng và dự đoán về hoạt động trong tương lai. Bằng việc phân tích dữ
liệu, các tổ chức có thể đưa ra quyết định kinh doanh hoàn hảo hơn. Ví dụ các tổ chức
có thể quyết định xem khi nào và ở đâu thì nên chạy chiến dịch tiếp thị hoặc giới thiệu
sản phẩm, dịch vụ mới. Sự phân tích có thể được tham khảo các ứng dụng kinh doanh
tiên tiến, thông minh hơn. Các tổ chức khoa học sử dụng phép phân tích dự đoán như
một ứng dụng.
Data mining là loại phân tích dữ liệu cao cấp nhất, là nơi mà các nhà phân tích
đánh giá các bộ dữ liệu lớn để xác định những mối quan hệ, mô hình và xu hướng.
Phân tích dữ liệu có thể bao gồm phân tích dữ liệu thăm dò và phân tích dữ liệu xác
nhận. Có một mảng khác chính là phân tích những dữ liệu định lượng (hoặc phân tích
dữ liệu số có các biến có thể so sánh theo thống kê) so với phân tích dữ liệu định tính
(tập trung vào các dữ liệu không phải dữ liệu cá nhân như văn bản, hình ảnh, video).
Big Data cho phép các tổ chức đưa dữ liệu vào sử dụng thực tế và giải quyết
một số các vấn đề trong kinh doanh sau:
- Các phân tích áp dụng với các dữ liệu.
- Cơ sở hạ tầng IT cần thiết để có thể hỗ trợ cho Big Data.
- Các công nghệ cần thiết cho những dự án Big Data các bộ kĩ năng có liên
quan.
- Những trường hợp thực tế có ý nghĩa đối với Big Data.
 Top 9 ứng dụng thực tế nổi bật của dữ liệu lớn big data
Trong thực tế, ứng dụng Big Data (Dữ liệu lớn) vào nhiều lĩnh vực, giúp doanh
nghiệp ở mọi quy mô tạo nên biến chuyển ấn tượng, gia tăng tính hiệu quả, năng suất
và lợi thế cạnh tranh so với đối thủ trong kỷ nguyên chuyển đổi số digital
transformation.
-  Ứng dụng big data lĩnh vực ngân hàng
Big Data đã và đang được ứng dụng hiệu quả với các hoạt động: Từ thu tiền
mặt đến quản lý tài chính. Từ đó, giúp giảm bớt rắc rối của khách hàng và gia
tăng doanh thu cho các ngân hàng.
Cách thức ứng dụng Big Data trong ngân hàng:
Sử dụng các kỹ thuật phân cụm giúp ngân hàng đưa ra quyết định quan trọng.
Hệ thống phân tích có thể xác định các địa điểm chi nhánh nơi tập trung nhiều nhu cầu
của khách hàng, để đề xuất lập chi nhánh mới.

4
Quy tắc kết hợp để dự đoán lượng tiền mặt cần thiết sẵn sàng cung ứng ở một
chi nhánh tại thời điểm cụ thể.
Khoa học dữ liệu là nền tảng của hệ thống ngân hàng kĩ thuật số.
Học máy và AI được nhiều ngân hàng sử dụng để phát hiện các hoạt động gian
lận và báo cáo cho các chuyên viên liên quan.
Khoa học dữ liệu hỗ trợ xử lý, lưu trữ và phân tích lượng dữ liệu khổng lồ từ
các hoạt động hàng ngày và giúp đảm bảo an ninh cho ngân hàng.
- Ứng dụng của big data trong Y tế
Với Big Data, người dùng có thể xác định phương hướng điều trị, cải thiện quá
trình chăm sóc sức khỏe, giảm lãng phí tiền bạc và thời gian. 
Cách thức ứng dụng của Big Data trong ngành y tế:
Cho phép người quản lý ca dự đoán các bác sĩ cần thiết vào những thời điểm
cụ thể.
Theo dõi tình trạng bệnh nhân bằng hồ sơ sức khỏe điện tử.
Sử dụng các thiết bị kỹ thuật số có thể đeo, từ đó, hệ thống Big Data có thể theo
dõi tình trạng bệnh nhân, gửi báo cáo cho các bác sĩ.
Big Data có thể đánh giá các triệu chứng và xác định nhiều bệnh ở giai đoạn
đầu.
Có thể lưu giữ các hồ sơ nhạy cảm được bảo mật và lưu trữ lượng dữ liệu
khổng lồ một cách hiệu quả.
Ứng dụng Big Data có thể báo trước khu vực có nguy cơ bùng phát dịch như:
Sốt xuất huyết hoặc sốt rét.
- Ứng dụng của Big Data trong thương mại điện tử
Big Data có thể tạo lợi thế cạnh tranh cho doanh nghiệp bằng cách cung cấp
thông tin chuyên sâu và các bản báo cáo phân tích xu hướng tiêu dùng.
Cách thức ứng dụng của Big Data trong thương mại điện tử:
Có thể thu thập dữ liệu và yêu cầu của khách hàng.
Tạo ra một mô hình tiếp thị hiệu suất cao.
Nhà quản lý có thể xác định các sản phẩm được xem nhiều nhất và tối ưu thời
gian hiển thị của các trang sản phẩm này.
Đánh giá hành vi của khách hàng và đề xuất các sản phẩm tương tự. Điều này
làm tăng khả năng bán hàng, từ đó tạo ra doanh thu cao hơn.
Nếu bất kỳ sản phẩm nào được thêm vào giỏ hàng nhưng khách hàng không
mua, Big Data có thể tự động gửi code khuyến mại cho khách hàng cụ thể đó.
Các ứng dụng Big Data còn có thể tạo một báo cáo theo các tiêu chí: độ tuổi,
giới tính, địa điểm của khách truy cập,...
- Ứng dụng Big Data vào Giáo dục
Big Data tạo ra các phương pháp tiếp cận dựa trên dữ liệu để dạy học sinh. 
Cách thức ứng dụng Big Data vào giáo dục:

5
Có thể lưu trữ, quản lý, phân tích các bộ dữ liệu lớn bao gồm hồ sơ của sinh
viên.
Duy trì bảo mật bằng cách sử dụng hệ thống quản lý big data có khả năng trích
xuất phân cấp.
Big Data giúp các bộ đề kiểm tra gần như không thể bị lộ
Big Data cung cấp dữ liệu về các hoạt động trong lớp và giúp đưa ra quyết định
cho giáo viên hay người điều hành tổ chức.
Big Data có thể đánh giá biểu cảm khuôn mặt và di chuyển của học sinh trong
lớp từ đó giáo viên có thể đánh giá được chất lượng giảng dạy bằng máy ảnh độ phân
giải cao, cảnh quay video và xử lý hình ảnh.
- Big Data và Cloud (Điện toán đám mây) 
Với cơ sở dữ liệu quá lớn thì đám mây là phương tiện được sử dụng để cung
cấp cơ sở hạ tầng cần thiết cho việc tính toán dữ liệu lớn. Trong cuộc sống thực, nhiều
tổ chức đang kết hợp hai công nghệ này để cải thiện hoạt động điều phối kinh doanh
của mình.
Cách thức ứng dụng Big Data:
Cloud cung cấp các công cụ để trích xuất dữ liệu. Từ đó, bằng việc phân tích dữ
liệu lớn, thì mục tiêu và các quyết định của kinh doanh được xác định.
Ứng dụng Big Data trong kinh doanh trên nền tảng Cloud giúp các tổ chức quản
lý hiệu quả nhiều công cụ phần mềm và phần cứng.
Cloud đã tăng tốc độ quản lý và truy cập cơ sở dữ liệu chứa hàng lượng lớn 
hồ sơ.
- Dịch vụ khách hàng sử dụng Big Data
Để thành công thì doanh nghiệp cần làm hài lòng khách hàng và hiểu nhu cầu của họ.
Trong giai đoạn mới gia nhập thị trường và tìm lợi thế cạnh tranh, thì sẽ rất khó để bạn
biết khách hàng đang tìm kiếm điều gì. Big Data sẽ giúp chủ doanh nghiệp tìm ra giải
pháp và đưa ra đề xuất tốt nhất.
- Cách thức ứng dụng của Big Data vào dịch vụ khách hàng:
Xác định các yêu cầu của khách hàng, tập trung thực hiện nhu cầu của họ.
Phân tích hành vi, sự quan tâm của khách hàng tạo ra các sản phẩm hướng đến
khách hàng.
Có thể thu thập nhiều dữ liệu về hành vi khách hàng để thiết kế mô hình tiếp thị
tối ưu.
Tìm ra sự tương đồng giữa khách hàng và nhu cầu của họ, từ đó, việc nhắm
mục tiêu các chiến dịch quảng cáo có thể chính xác và đạt hiệu quả cao.
- Big Data đối với ngành bán lẻ:
Big Data mang lại cơ hội cho lĩnh vực bán lẻ bằng việc giúp xác định hành trình
trải nghiệm, xu hướng mua sắm và sự hài lòng của khách hàng từ cách thu thập dữ liệu
đa dạng. Từ những dữ liệu thu thập được có thể cải thiện hiệu suất và hiệu quả bán
hàng.

6
Cách thức ứng dụng Big Data trong bán lẻ:
Big data giúp nhà quản lý xây dựng mô hình chi tiêu của từng khách hàng
Với các phân tích dự đoán, ngành công nghiệp có thể so sánh tỷ lệ cung – cầu
và có thể tránh tung ra sản phẩm không được đón nhận
Ngành bán lẻ có thể xác định vị trí bố trí sản phẩm trên kệ hàng tùy vào thói
quen và nhu cầu mua hàng của khách hàng và thiết lập chiến lược kinh doanh để cải
thiện
Kết hợp phân tích cùng lúc các dữ liệu về thời điểm, giao dịch, truyền thông xã
hội, dự báo thời tiết để xác định chính xác sản phẩm phù hợp cung ứng cho khách
hàng.
- Ứng dụng Big Data trong Digital Marketing:
Digital Marketing là chìa khóa để doanh nghiệp tiếp cận gần nhất với khách
hàng. Quan trọng, với Digital Marketing, tất cả các doanh nghiệp ở mọi quy mô lớn
nhỏ... đều có thể tiến hành các hoạt động quảng cáo tiếp thị trên các nền tảng truyền
thông xã hội.
Cách thức ứng dụng Big Data trong Digital Marketing:
Phân tích thị trường, đối thủ cạnh tranh và đánh giá mục tiêu kinh doanh. Điều
này giúp xác định cơ hội tốt để tiếp tục tiến hành các kế hoạch kinh doanh tiếp theo.
Có thể xác định người dùng trên các phương tiện truyền thông xã hội và nhắm
mục tiêu cho họ dựa trên nhân khẩu học, giới tính, thu nhập, tuổi tác và sở thích.
Tạo báo cáo cho chiến dịch quảng cáo:hiệu suất, khách hàng và giải pháp để tạo
kết quả tốt hơn.
Khoa học dữ liệu được sử dụng cho các khách hàng nhắm mục tiêu và nuôi
dưỡng chu trình khách hàng.
Tập trung vào các chủ đề được tìm kiếm cao và tư vấn cách để nội dung để xếp
hạng trang web doanh nghiệp cao hơn trên google (SEO).
Có thể tạo đối tượng tương tự bằng cách sử dụng cơ sở dữ liệu đối tượng hiện
có để nhắm mục tiêu các khách hàng tương tự và kiếm được lợi nhuận.
- Lĩnh vực truyền thông & Giải trí:
Các công ty truyền thông cần thúc đẩy chuyển đổi kỹ thuật số để phân phối sản
phẩm và nội dung của họ nhanh nhất có thể tại thị trường hiện tại. Đối với những
người ảnh hưởng trên các phương tiện truyền thông đại chúng, Big Data có thể giúp
tìm ra quan điểm hoặc lượt thích của một nghệ sĩ để đo lường mức độ phổ biến trong
lĩnh vực truyền thông số.
Cách thức ứng dụng Big Data trong truyền thông và giải trí:
Giúp thu thập thông tin và nhu cầu của cá nhân.
Xác định thiết bị và thời gian tạo hiệu quả cao nhất thông qua các dữ liệu để
phân tích.
Có thể xác định lý do đăng ký và hủy đăng ký một nội dung và đánh giá sự
quan tâm của khán giả đối với một kiểu nội dung cụ thể.

7
Ứng dụng Big Data còn giúp đặt nhóm mục tiêu quảng cáo cho các công ty
truyền thông.
Có thể tạo thêm các tính năng mới để phân tích nhu cầu.
Nhà quảng cáo (công ty truyền thông, người nổi tiếng, người phụ trách truyền
thông) có thể chọn địa điểm tần xuất phân phối.
Tùy mức độ phổ biến, nghệ sĩ có thể chọn thiết bị, hệ điều hành để phân phối
bài hát hoặc video của mình.
Ở thời đại số, với sự phát triển của AI, thuật toán, kỹ thuật khai thác dữ liệu và
xử lý hình ảnh đã giúp dữ liệu lớn (Big Data) trở nên vô cùng hữu ích trong đời sống
và hoạt động kinh doanh của doanh nghiệp của mọi tổ chức. 
1.2. Nguồn gốc và sự phát triển của Big Data
Đối với nhiều người hiện nay thì thuyết trình về Big Data là một thuật ngữ còn
khá mới mẻ những thực ra, nguồn gốc của Big Data đã bắt đầu từ những năm 1960 và
1970. Đó là thời điểm mà thế giới dữ liệu chỉ mới bắt đầu với các trung tâm dữ liệu
đầu tiên cùng với đó là sự phát triển của cơ sở dữ liệu SQL.
Năm 1984, Tập đoàn Teradata đã cho ra thị trường hệ thống xử lý dữ liệu song
song DBC 1012. Đây chính là những hệ thống đầu tiên phân tích và lưu trữ tới 1
terabyte dữ liệu. Cho đến năm 2017, có hàng chục cơ sở dữ liệu dựa trên hệ thống của
Teradata với dung lượng lên đến hàng petabyte. Trong đó dữ liệu lớn nhất đã vượt qua
ngưỡng 50 pentabytes.
Năm 2000, Seisint Inc. (nay là Tập đoàn LexisNexis) đã phát triển thành công
khung chia sẻ dữ liệu dựa theo cấu trúc C ++ để truy vấn và lưu trữ dữ liệu. Năm 2004,
Gooogle cho ra bài báo về quá trình có tên gọi MapReduce sử dụng một kiến trúc
tương tự. MapReduce cung cấp mô hình xử lý song song, cho ra những ứng dụng liên
quan để có thể xử lý nhanh lượng dữ liệu khổng lồ. Google triển khai mẫu MapReduce
thông qua mã nguồn mở Apache Hadoop.
Năm 2005, con người bắt đầu nhận ra rằng số lượng người dùng được tạo ra
thông qua Youtube, Facebook và các dịch vụ trực tuyến khác là cực kỳ lớn. Cùng năm
đó, Hadoop (một framework open source được tạo riêng với nhiệm vụ lưu trữ và phân
tích BigData) đã được phát triển. Cũng trong khoảng thời gian này, NoSQL cũng bắt
đầu trở nên phổ biến. Sự phát triển của các framework ví dụ như Hadoop (hoặc gần
đây là Spark) là cần thiết cho sự phát triển của Big Data. Lý do là vì chúng khiến cho
Big Data hoạt động dễ dàng hơn và lưu trữ rẻ hơn.
Hiện nay thì khối lượng Big Data đã tăng một cách nhanh chóng, những người
sử dụng vẫn đang hàng ngày tạo ra một lượng dữ liệu vô cùng lớn. Tuy nhiên, có một
điều thú vị là lượng dữ liệu đó không chỉ của con người mà còn do máy móc tạo ra,
thậm chí còn là chủ yếu. Sự ra đời của IoT (Internet of Things), nhiều thiết bị và đối
tượng được kết nối với internet, từ đó thu thập dữ liệu về mô hình sử dụng của người
dùng và hiệu suất của sản phẩm. Chính sự có mặt của IoT đã tạo ra nhiều dữ liệu hơn.

8
1.3. Các đặc trưng của Big data
- Đầu tiên Big data được đề cập đến với 3 đặc trưng bởi 3V gồm:
+ Volume (Dung lượng dữ liệu).
+ Velocity (Tốc độ dữ liệu: Vận tốc mà dữ liệu cần xử lý được và phân tích).
+ Variety (Đa dạng dữ liệu ).

Hình 1.2. Đặc trưng 3V của Big Data


- Rồi tiếp đến Big data được đề cập đến với 5 đặc trưng bởi 5V:
(3V + Variability, Veracity).
- Hiện nay Big data được đề cập đến với 6 đặc trưng bởi 6V gồm:

Đặc tính của Big Data

9
- Volume: khối lượng dữ liệu được tạo ra, lưu trữ và xử lý. Bao nhiêu thì là
lớn? Ít nhất nó nên được tính bằng hàng tram Terabyte, còn thông thường thì nó là
Petabyte hoặc Exabyte, thậm chí Zettabyte. Một số ví dụ: Facebook tạo ra khoảng
500TB dữ liệu mỗi ngày, con số này ở Twitter là khoảng 8TB.
- Velocity: tốc độ dữ liệu được tạo ra. Câu hỏi cũ, bao nhiêu thì là lớn? Câu
trả lời thì rất đa dạng, vì nó phụ thuộc vào loại dữ liệu mà bạn đang xử lý, nhưng có
thể lấy một vài ví dụ trực quan của các tên tuổi lớn như 90 triệu bức ảnh được upload
lên Facebook mỗi ngày, con số cho Twitter là 500 triệu tweets được post, 0.4 triệu giờ
video được upload lên Youtube hay 3.5 tỷ lượt tìm kiếm được thực hiện mỗi ngày
trên Google.
- Variety: tính đa dạng của dữ liệu. Cái này chắc dễ hiểu rồi, Big Data là
không ngán dạng nào, từ dữ liệu có cấu trúc (structure) như các bảng nơi có hàng và
cột trong cơ sở dữ liệu quan hệ RDBMS hay bảng tính excel; đến dữ liệu phi cấu trúc
(unstructured) như văn bản (text), ảnh (pictures), video, audio, …; và thậm chí cả dữ
liệu bán cấu trúc (semi-structure) như file json hay file xml.
- Variability: tính biến thiên của dữ liệu phản ánh sự không nhất quán trong
dữ liệu, đặc biệt là trong xử lý ngôn ngữ tự nhiên, cùng một từ vựng nhưng trong các
ngữ cảnh khác nhau nó sẽ mang các ý nghĩa khác nhau. Tính biến thiên của dữ liệu
cũng còn được thể hiện qua sự biến thiên về kích thước và tốc độ dữ liệu được sinh
ra, do dữ liệu được thu thập từ nhiều nguồn khác nhau.
- Veracity: mức độ tin cậy của dữ liệu. Đặc tính này đi ngược chiều với các
đặc tính khác của Big Data, khi khối lượng dữ liệu ngày càng tăng, tính đa dạng của
dữ liệu ngày càng phong phú và tính biến thiên của dữ liệu ngày càng lớn thì mức độ
tin cậy của dữ liệu ngày càng giảm xuống.
- Value: giá trị của dữ liệu. Sẽ không thể nhắc đến Big Data nếu không thể get
value từ dữ liệu. Hàng loạt các công ty đã khai thác “mỏ vàng mới” dữ liệu và phát
triển mạnh mẽ: Google, Facebook, Amazon, …

10
1.4. Các thành phần Big data

Hình 1.3. Kiến trúc Big data


1.4.1. Quản lý dữ liệu
Quản lý cơ sở hạ tầng lưu trữ dữ liệu, và nguồn để thao tác nó. Có 3 hệ cơ sở dữ
liệu Big data: Hệ dữ liệu có cấu trúc, hệ dữ liệu không có cấu trúc, hệ dữ liệu bán
cấu trúc.
 Hệ dữ liệu có cấu trúc
- Hệ thống quản lý cơ sở dữ liệu quan hệ(RDBMS): để lưu trữ và thào tác dữ
liệu có cấu trúc.
- Hệ thống MPP: tập hợp dữ liệu đồ sộ ngày càng lớn thèm vá tăng cường dữ
liệu tàng trương.
- Kho dữ liệu: tập hợp và lưu trữ dữ liệu cho các báo cáo sau này.
- Hạn chế:
+ Khó mở rộng, hiệu suất chậm lại.
 Hệ dữ liệu không có cấu trúc
+ Phù hợp cho việc lưu trữ dữ liệu có cấu trúc phức tạp và dễ dàng mở rộng.
 Hệ dữ liệu bán cấu trúc
Hệ dữ liệu bán cấu trúc gồm cả dữ liệu có cấu trúc và không có cấu trúc.
 Dữ liệu
- Dữ liệu có cấu trúc và không có cấu trúc. Lấy từ nhiều nguồn với kích cỡ khác
nhau. Dữ liệu thường rất lớn, yêu cầu tốc độ xử lý cao.
- Tổ chức dữ liệu để đáp ứng: Apche Hadoop.
1.4.2. Phân tích dữ liệu
Phân tích công nghệ và các công cụ đề phân tích các dữ liệu và thu thập hiểu
biết sâu sắc từ nó.
- Là nơi mà các công tỵ băt đâu trích xuât giá trị dữ liệu lớn.

11
- Liên quan tới việc phát triển các ứng dụng và sử dụng các ứng dụng đề đạt
được cái nhìn sâu sắc vào dữ liệu lớn.
- Xây dựng các tool phân tích dữ liệu
Phân tích dữ liệu mang lại giá trị thực sự từ các tổ chức dữ liệu lớn. Nếu không
có sự phân tích thì đây chỉ là những dữ liệu được sử dụng vô cùng hạn chế trong kinh
doanh. Với việc phân tích những dữ liệu lớn, các công ty có thể thu về cho mình
những lợi ích như dịch vụ khách hàng được cải thiện, từ đó mang lại hiệu quả cao hơn,
tăng doanh thu và tăng khả năng cạnh tranh.
1.4.3. Sử dụng dữ liệu
Sử dụng dữ liệu là hoạt động trên dữ liệu được phân tích.
Đưa dữ liệu lớn đã phân tích để phục vụ trong Kinh doanh thông minh và các
ứng dụng của người dùng cuối.

12
1.4.4. Cơ sở hạ tầng cần thiết để hỗ trợ Big Data

Hình 1.4. Mô hình cơ sở hạ tầng cần thiết để hỗ trợ Big Data


Đối với khái niệm Big Data để có thể làm việc, các tổ chức cần phải xây dựng
được cơ sở hạ tầng để thu thập và chứa dữ liệu, cung cấp quyền truy cập và đảm bảo
thông tin trong khi chuyển tiếp và lưu trữ. Cấp độ cao hơn, bao gồm hệ thống lưu trữ
và máy chủ được thiết kế cho Big Data, tích hợp dữ liệu và phần mềm quản lý, phần
mềm phân tích dữ liệu, thông tin kinh doanh và các ứng dụng Big Data.
Phần lớn các cơ sở hạ tầng này sẽ tập trung tại một chỗ vì các công ty muốn
tiếp tục tận dụng những khoản đầu tư vào trung tâm dữ liệu của mình. Tuy nhiên, ngày
càng có nhiều những tổ chức dựa vào các dịch vụ điện toán đám mây để xử lý nhiều
yêu cầu Big Data của họ.

Hình 1.5. Mô hình cơ sở hạ tầng điện toán cần thiết để hỗ trợ Big Data
Thu thập dữ liệu đòi hỏi bắt buộc là phải có nguồn. Một số ứng dụng như các
ứng dụng web, ứng dụng di động, các kênh truyền thông xã hội và lưu trữ email đã

13
được cài đặt sẵn. Tuy nhiên, khi mà IoT trở nên phổ biến, các công ty có thể cần phải
triển khai cảm biến trên tất cả các loại thiết bị, sản phẩm và phương tiện để có thể thu
thập dữ liệu, cũng như những ứng dụng mới tạo ra dữ liệu người dùng. Tất nhiên, phân
tích dữ liệu theo định hướng IoT có những kỹ thuật và công cụ chuyên biệt của riêng
nó. Để lưu giữ được tất cả những dữ liệu trên, các tổ chức bắt buộc phải có đủ dung
lượng lưu trữ tại chỗ. Những tùy chọn lưu trữ bao gồm kho dữ liệu truyền thống, lưu
giữ trên đám mây và data lakes (một kho lưu trữ tập trung cho phép bạn lưu trữ tất cả
dữ liệu có cấu trúc và không cấu trúc của bạn ở bất kỳ quy mô nào).
Những công cụ cơ sở hạ tầng bảo mật bao gồm việc mã hóa dữ liệu, hệ thống
giám sát, tường lửa, xác thực người dùng và những điều khiển truy cập khác, quản lý
di động của doanh nghiệp và các sản phẩm khác để có thể bảo vệ được hệ thống và dữ
liệu.

14
Chương 2. HBASE CHO HỆ THỐNG BIG DATA

2.1. Giới thiệu về Hbase


HBase là một hệ cơ sở dữ liệu mã nguồn mở được xây dựng dựa trên BigTable
được mô tả trong nghiên cứu: “BigTable: A Distributed Storage Systemystem for
Structure Data”. HBase cung cấp khả năng lưu trữ dữ liệu lớn lên tới hàng tỷ dòng,
hàng triệu cột khác nhau cũng như hàng petabytes dung lượng. HBase là 1 NoSQL
điển hình bởi vậy các tables của HBase không có 1 schemas cố định và không có các
quan hệ giữa các bảng, không cung cấp phép join giữa các bảng. Hadoop có khả năng
mở rộng tốt và được thiết kế để mở rộng theo chiều ngang (Scale horizontally).
Hiện nay HBase đang là 1 trong các top-level project của tổ chức Apache
Software Foundation và được cung cấp dưới giấy phép: Apache Lisence 2.0.
Từ những năm 1970, các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) đã
thống trị toàn cảnh dữ liệu. Nhưng khi các doanh nghiệp thu thập, lưu trữ và xử lý dữ
liệu ngày càng nhiều, cơ sở dữ liệu quan hệ sẽ ngày càng khó mở rộng hơn. Lúc đầu,
bạn có thể đi từ một máy chủ duy nhất đến thiết lập chính / phụ và thêm các lớp bộ
đệm vào trước cơ sở dữ liệu để giảm tải khi ngày càng nhiều lần đọc / ghi vào cơ sở dữ
liệu. Khi hiệu suất của các truy vấn bắt đầu giảm, thường thì điều đầu tiên bị loại bỏ là
các chỉ mục, nhanh chóng theo sau là không chuẩn hóa để tránh tham gia khi chúng trở
nên tốn kém hơn. Sau đó, bạn có thể bắt đầu tính toán trước (hoặc cụ thể hóa) các truy
vấn tốn kém nhất để các truy vấn sau đó thực sự trở thành tra cứu chính và có thể phân
phối dữ liệu trong các bảng lớn trên nhiều phân đoạn cơ sở dữ liệu. Tại thời điểm này
nếu bạn lùi lại, nhiều lợi ích chính của RDBMS đã bị mất - tính toàn vẹn tham chiếu,
giao dịch ACID, chỉ mục,... Tất nhiên, kịch bản vừa mô tả cho rằng bạn trở nên rất
thành công, rất nhanh và cần xử lý nhiều dữ liệu hơn với tốc độ nhập dữ liệu liên tục
tăng. 
2.2. Các tính năng của Hbase
Big data và các nỗ lực phân tích big data yêu cầu kỹ năng cụ thế, cho dù là từ
bên trong tỗ chức hay thông qua các chuyên gia bên ngoài.
Nhiều tính năng có liên quan đến các thành phần công nghệ dữ liệu quan trọng
như Hadoop, Spark, NoSQL, cơ sờ dữ liệu trong bộ nhớ và phần mềm phân tích.
Các lĩnh vực khác cụ thế là về các nguyên tắc như khoa học dữ liệu, khai thác
dữ liệu, phân tích thống kê và định lượng, data visualization, lập trình mục đích chung
(general-purpose programming) và cấu trúc dữ liệu và giải thuật (data structure and
algorithms). Ngoài ra, cũng cần có những người có kỹ năng quản lý tồng thế để quản
lý tiến độ của các dự án big data.
Với độ phố biến của các dự án phân tích dữ liệu và sự thiếu hụt nhân lực về các
kỹ năng trên, việc tìm kiếm các chuyên gia có kinh nghiệm là
Đặc trưng của Apache Hbase:
- Khả năng mở rộng tuyến tính và modul.

15
- Đọc và viết nhất quán nghiêm ngặt.
- Bảo vệ bảng tự động và có thể định cấu hình.
- Hỗ trợ chuyển đổi dự phòng tự động giữa các Máy chủ Vùng.
- Các lớp cơ sở thuận tiện để sao lưu các công việc Hadoop MapReduce với các
bảng HBase của Apache.
- Dễ dàng sử dụng API Java để truy cập ứng dụng khách.
- Chặn bộ đệm và Bộ lọc Bloom cho các truy vấn thời gian thực.
- Vị từ truy vấn đẩy xuống thông qua Bộ lọc phía máy chủ.
- Cổng tiết kiệm và dịch vụ Web REST-ful hỗ trợ XML, Protobuf và các tùy
chọn mã hóa dữ liệu nhị phân.
- Shell dựa trên jruby có thể mở rộng (JIRB).
- Hỗ trợ xuất số liệu qua hệ thống con số liệu Hadoop sang tệp hoặc
Ganglia; hoặc thông qua JMX.
2.3. Mô hình của Hbase
HBase được xây dựng dựa trên thiết kế của Google BigTable cho nên nó cũng
có nhiều điểm giống với BigTable. Dữ liệu được lưu trong 1 table của HBase được xác
định bởi các từ khóa: Table, Rowkey, Column 1, Column 2, Timestamp  Value.

Hình 2.1. Một mô hình Table HBase


Mỗi table bao gồm rất nhiều row, có thể lên tới hàng tỷ rows trong 1 table của
HBase, các row được xác định với nhau bởi 1 khóa duy nhất “rowkey”, rowkey trong
HBase có chức năng tương tự với Primary key trong các hệ cơ sở dữ liệu thông
thường .Các row trong cùng 1 talbe luôn được sắp xếp theo thứ tự tự điển
theo rowkey. Hình sau cho thấy cách mà HBase sắp xếp dữ liệu khi ta thêm các row
với các rowkey khác nhau.

16
Hình 2.1. HBase sắp xếp dữ liệu khi ta thêm các row với các rowkey
Trong khi trong nghiên cứu gốc BigTable chỉ miêu tả về single index, tuy nhiên
trong HBase còn hỗ trợ Secondary IndexIndexes.
Mỗi row lại bao gồm nhiều columns khác nhau, các column này lại được gộp
thành “column families”. Chúng giúp ta nhóm các dữ liệu có cùng điểm chung lại với
nhau, phân nhóm các loại dữ liệu và thực hiện các chính sách áp dụng lên từng nhóm,
ví dụ: nén… Tất cả các columns ở trong cùng 1 column families đều được lưu trữ cùng
nhau ở trong storage file được gọi là HFile. Các column families này cần phải được
khai báo khi ta tạo mới tables bên trong HBase và trong 1 table HBase không nên có
quá nhiều column families, hiện tại HBase vẫn chưa hoạt động tốt với các table có
nhiều hơn 2 hay  3 columns families.
Không giống như các hệ cơ sở dữ liệu quan hệ,  column trong HBase không cần
thiết phải khởi tạo từ khi khởi tạo bảng mà ta có thể tạo mới column ngay trong quá
trình hoạt động. Trong 1 table có thể có số lượng column lên tới hàng nghìn hoặc
nhiều hơn. 1 column của Hbase được khai báo dưới dạng:”families: qualifier”, trong
đó families là tên của columns families mà colums được nhóm vào trong
đó, qualifier để xác định column.
Giá  trị của mỗi columns được gọi là cell, mỗi cells chứa nhiều cặp
“version(timestamp, value)”. Trong đó timestamp là giá trị được sinh ra bởi hệ thống
hoăc được xác định bởi người dùng. Các version khác nhau được phân biệt với nhau
bởi timestamp, trong 1 cells có thể lưu trữ nhiều version của data ứng với thời gian
được đưa vào hệ thống khác nhau. Các version này được sắp xếp theo thứ tự từ mới
đến cũ. Bởi vậy ta sẽ đọc các version mới của data trước sau đó đọc đến các version cũ
hơn
của nó…
Một điểm khác biệt nữa của HBase so với các hệ cơ sở dữ liệu thông thường
khác là các giá trị “null” sẽ không được lưu trữ trong cơ sở dữ liệu HBase.

17
Auto-sharding: Đơn vị lưu trữ cơ bản của HBase là region, việc phân chia
tables thành các region đảm bảo khả năng phân tán và cân bảng tải của HBase. Mỗi
region chứa 1 dải các row xếp liền nhau và chúng sẽ được tự động chia làm 2 nếu dữ
liệu trong nó trở lên quá lớn.
Mỗi region nằm trong 1 RegionServer duy nhất, nhưng mỗi RegionServer lại có
thể chứa cùng 1 lúc nhiều region khác nhau.
2.4. Kiến trúc Hbase
Kiến trúc phân cụm (Architect of HBase Cluster):
- HMaster: thành phần phản lý hệ thống
- Zookeeper: lưu trữ các metadata, region info.
- HRegionServer: quản lý và lưu trữ các region.
- HFile: lưu trữ dữ liệu của HBase.
- HLog: lưu trữ các Log để có thể recovery lại quá trình ghi dữ liệu nếu có sự
cố.
- HDFS: distributed file system mà HBase sử dụng.
Khi có yêu cầu get hoặc scan:
- Client kết nối tới Zookeeper để tìm địa chỉ của ROOT table.
- Client sử dụng ROOT Table để tìm ra địa chỉ của META table chứa thông tin
của region mà nó cần tìm.
- Client sử dụng META table để tìm kiếm thông tin của region mà nó cần tìm
2.4.1. Kiến trúc HBase: Các thành phần của kiến trúc HBase
HBase có ba thành phần chính, tức là Máy chủ HMaster , Máy chủ khu vực
HBase, Khu vực và Người giữ vườn thú .
Hình dưới đây giải thích cấu trúc phân cấp của Kiến trúc HBase. Chúng tôi sẽ
nói về từng người một trong số họ.
Bây giờ trước khi đi đến HMaster, chúng ta sẽ hiểu về Khu vực vì tất cả các
Máy chủ này (HMaster, Máy chủ khu vực, Zookeeper) được đặt để điều phối và quản
lý Khu vực và thực hiện các hoạt động khác nhau bên trong Khu vực. Vì vậy, bạn sẽ tò
mò muốn biết các vùng là gì và tại sao chúng lại quan trọng như vậy?
2.4.2. Kiến trúc HBase: Khu vực
Một vùng chứa tất cả các hàng giữa khóa bắt đầu và khóa kết thúc được gán cho
vùng đó. Bảng HBase có thể được chia thành một số vùng theo cách mà tất cả các cột
của họ cột được lưu trữ trong một vùng. Mỗi vùng chứa các hàng theo thứ tự được
sắp xếp.
Nhiều khu vực được chỉ định cho một Máy chủ khu vực , chịu trách nhiệm xử
lý, quản lý, thực hiện các thao tác đọc và ghi trên tập hợp các vùng đó.
Vì vậy, kết luận theo một cách đơn giản hơn:
- Một bảng có thể được chia thành một số vùng. Vùng là một phạm vi hàng
được sắp xếp lưu trữ dữ liệu giữa khóa bắt đầu và khóa kết thúc.

18
- Vùng có kích thước mặc định là 256MB có thể được cấu hình tùy theo nhu
cầu.
- Một Nhóm các khu vực được phục vụ cho các máy khách bởi một Máy chủ
Khu vực.
- Máy chủ Vùng có thể phục vụ khoảng 1000 vùng cho máy khách.
Bây giờ bắt đầu từ đầu phân cấp, trước tiên tôi muốn giải thích cho bạn về Máy
chủ HMaster hoạt động tương tự như một Mã tên trong HDFS . Sau đó, chuyển xuống
trong hệ thống phân cấp, tôi sẽ đưa bạn qua ZooKeeper và Máy chủ vùng.
2.4.3. Kiến trúc HBase: HMaster
Như trong hình ảnh bên dưới, bạn có thể thấy HMaster xử lý một tập hợp Máy
chủ Vùng nằm trên DataNode. Hãy để chúng tôi hiểu HMaster làm điều đó như thế
nào.
- HBase HMaster thực hiện các thao tác DDL (tạo và xóa bảng) và gán các
vùng cho các máy chủ Vùng như bạn có thể thấy trong hình trên.
- Nó điều phối và quản lý Máy chủ Vùng (tương tự như NameNode quản lý
DataNode trong HDFS).
- Nó chỉ định các vùng cho Máy chủ Vùng khi khởi động và chỉ định lại các
vùng cho Máy chủ Vùng trong quá trình khôi phục và cân bằng tải.
- Nó giám sát tất cả các phiên bản của Máy chủ Vùng trong cụm (với sự trợ
giúp của Zookeeper) và thực hiện các hoạt động khôi phục bất cứ khi nào Máy chủ
Vùng nào gặp sự cố.
- Nó cung cấp một giao diện để tạo, xóa và cập nhật bảng.
HBase có một môi trường phân tán và rộng lớn, nơi HMaster không đủ để quản
lý mọi thứ. Vì vậy, bạn sẽ tự hỏi điều gì giúp HMaster quản lý môi trường rộng lớn
này? Đó là nơi ZooKeeper xuất hiện trong bức tranh. Sau khi chúng ta hiểu cách
HMaster quản lý môi trường HBase, chúng ta sẽ hiểu cách Zookeeper giúp HMaster
trong việc quản lý môi trường.
2.4.4. Kiến trúc HBase: ZooKeeper - Cơ chế điều phối
Zookeeper hoạt động giống như một điều phối viên bên trong môi trường phân
tán HBase. Nó giúp duy trì trạng thái máy chủ bên trong cụm bằng cách giao tiếp
thông qua các phiên.
Mỗi Máy chủ Vùng cùng với Máy chủ HMaster gửi nhịp tim liên tục theo chu
kỳ đều đặn đến Zookeeper và nó kiểm tra máy chủ nào còn sống và khả dụng như đã
đề cập trong hình trên. Nó cũng cung cấp thông báo lỗi máy chủ để các biện pháp khôi
phục có thể được thực hiện.
Từ hình ảnh trên, bạn có thể thấy, có một máy chủ không hoạt động, đóng vai
trò như một bản sao lưu cho máy chủ đang hoạt động. Nếu máy chủ hoạt động không
thành công, nó sẽ được giải cứu.
HMaster đang hoạt động gửi nhịp tim đến Zookeeper trong khi HMaster không
hoạt động sẽ lắng nghe thông báo do HMaster đang hoạt động gửi. Nếu HMaster đang

19
hoạt động không gửi được nhịp tim, phiên sẽ bị xóa và HMaster không hoạt động sẽ
hoạt động.
- Trong khi nếu Máy chủ vùng không gửi được nhịp tim, phiên sẽ hết hạn và
tất cả người nghe sẽ được thông báo về điều đó. Sau đó HMaster thực hiện các hành
động khôi phục phù hợp mà chúng ta sẽ thảo luận sau trong blog này.
- Zookeeper cũng duy trì đường dẫn của Máy chủ .META, đường dẫn này giúp
mọi khách hàng tìm kiếm bất kỳ vùng nào. Trước tiên, Máy khách phải kiểm tra với
Máy chủ .META trong đó Máy chủ khu vực thuộc một khu vực nào và nó sẽ lấy
đường dẫn của Máy chủ khu vực đó.
Như tôi đã nói về .META Server, trước tiên hãy để tôi giải thích cho
bạn .META server là gì? Vì vậy, bạn có thể dễ dàng liên kết công việc của ZooKeeper
và .META Server với nhau. Sau đó, khi tôi sẽ giải thích cho bạn cơ chế tìm kiếm
HBase trong blog này, tôi sẽ giải thích cách thức hoạt động của hai cơ chế này.
2.4.5. Kiến trúc HBase: Bảng Meta
- Bảng META là một bảng danh mục HBase đặc biệt. Nó duy trì một danh sách
tất cả các Máy chủ Khu vực trong hệ thống lưu trữ HBase, như bạn có thể thấy trong
hình trên.
Nhìn vào hình bạn có thể thấy, .META tệp duy trì bảng ở dạng khóa và giá trị.
Khóa đại diện cho khóa bắt đầu của vùng và id của nó trong khi giá trị chứa đường dẫn
của Máy chủ vùng.
Như tôi đã thảo luận, Máy chủ Vùng và các chức năng của nó trong khi tôi giải
thích cho bạn về các Vùng do đó, bây giờ chúng ta đang chuyển xuống phân cấp và tôi
sẽ tập trung vào thành phần của Máy chủ Vùng và các chức năng của chúng. Phần sau
tôi sẽ thảo luận về cơ chế tìm kiếm, đọc, viết và hiểu cách tất cả các thành phần này
hoạt động cùng nhau.
2.4.6. Kiến trúc HBase: Các thành phần của Máy chủ vùng
Máy chủ Vùng duy trì các vùng khác nhau chạy trên đầu . Các thành phần của
Máy chủ Vùng là:
- WAL: Như bạn có thể kết luận từ hình trên, Write Ahead Log (WAL) là một
tệp được đính kèm với mọi Máy chủ Vùng bên trong môi trường phân tán. WAL lưu
trữ dữ liệu mới chưa được duy trì hoặc cam kết lưu trữ vĩnh viễn. Nó được sử dụng
trong trường hợp không khôi phục được các tập dữ liệu.
- Chặn bộ nhớ đệm: Từ hình ảnh trên, có thể thấy rõ ràng Block Cache nằm ở
trên cùng của Region Server. Nó lưu trữ dữ liệu thường đọc trong bộ nhớ. Nếu dữ liệu
trong BlockCache ít được sử dụng gần đây nhất, thì dữ liệu đó sẽ bị xóa khỏi
BlockCache.
- MemStore: Nó là bộ nhớ đệm ghi. Nó lưu trữ tất cả dữ liệu đến trước khi đưa
vào đĩa hoặc bộ nhớ vĩnh viễn. Có một Kho lưu trữ cho mỗi họ cột trong một vùng.
Như bạn có thể thấy trong hình, có nhiều Kho lưu trữ cho một vùng vì mỗi vùng chứa
nhiều họ cột. Dữ liệu được sắp xếp theo thứ tự từ vựng trước khi đưa vào đĩa.

20
- HFile: Từ hình trên, bạn có thể thấy HFile được lưu trữ trên HDFS. Do đó, nó
lưu trữ các ô thực tế trên đĩa. MemStore cam kết dữ liệu thành HFile khi kích thước
của MemStore vượt quá.
Bây giờ chúng ta đã biết các thành phần chính và phụ của Kiến trúc HBase, tôi
sẽ giải thích cơ chế và nỗ lực hợp tác của chúng trong việc này. Cho dù đó là đọc hay
viết, trước tiên chúng ta cần tìm kiếm nơi đọc hoặc nơi ghi tệp. Vì vậy, chúng ta hãy
hiểu quy trình tìm kiếm này, vì đây là một trong những cơ chế khiến HBase rất phổ
biến.
2.6.7. Kiến trúc HBase: Tìm kiếm, khởi tạo trong HBase
Như bạn đã biết, Zookeeper lưu trữ vị trí bảng META. Bất cứ khi nào khách
hàng tiếp cận với một yêu cầu đọc hoặc ghi tới HBase xảy ra hoạt động sau:
- Máy khách truy xuất vị trí của bảng META từ ZooKeeper.
- Sau đó máy khách yêu cầu vị trí của Máy chủ Vùng của khóa hàng tương ứng
từ bảng META để truy cập nó. Khách hàng lưu trữ thông tin này với vị trí của Bảng
META.
- Sau đó, nó sẽ nhận được vị trí hàng bằng cách yêu cầu từ Máy chủ vùng
tương ứng.
Đối với các tham chiếu trong tương lai, máy khách sử dụng bộ đệm ẩn của nó
để truy xuất vị trí của bảng META và Máy chủ Vùng của khóa hàng đã đọc trước đó.
Sau đó, khách hàng sẽ không tham chiếu đến bảng META, cho đến khi và trừ khi có
sự thiếu sót do vùng bị thay đổi hoặc di chuyển. Sau đó, nó sẽ yêu cầu lại máy chủ
META và cập nhật bộ nhớ cache.
Như mọi khi, khách hàng không mất thời gian trong việc truy xuất vị trí của
Máy chủ Vùng từ Máy chủ META, do đó, điều này tiết kiệm thời gian và làm cho quá
trình tìm kiếm nhanh hơn. Bây giờ, hãy để tôi cho bạn biết cách viết diễn ra trong
HBase. Các thành phần liên quan đến nó là gì và chúng tham gia như thế nào?
2.6.8. Kiến trúc HBase: Cơ chế ghi HBase
- Bước 1: Bất cứ khi nào client có yêu cầu ghi, client sẽ ghi dữ liệu vào WAL
(Write Ahead Log).
+ Các chỉnh sửa sau đó được thêm vào cuối tệp WAL.
+ Tệp WAL này được duy trì trong mọi Máy chủ Vùng và Máy chủ Vùng sử
dụng nó để khôi phục dữ liệu không được gắn vào đĩa.
- Bước 2: Sau khi dữ liệu được ghi vào WAL, sau đó nó được sao chép vào
MemStore.
- Bước 3: Sau khi dữ liệu được đặt trong MemStore, sau đó máy khách sẽ nhận
được xác nhận.
- Bước 4: Khi MemStore đạt đến ngưỡng, nó kết xuất hoặc chuyển dữ liệu vào
HFile.

21
2.5. Cách thức lưu trữ và tìm kiếm của Hbase
2.5.1. Cách thức lưu trữ
Hbase lưu trữ các row nằm trong các table, mỗi table có thể định nghĩa nhiều
column families (cf). Mỗi row phải được quản lý bởi một khóa chính duy nhất.
Xem thêm: Hộ khẩu thường trú tiếng anh là gì, hộ khẩu thường trú dịch
Có thể xem lịch sử lưu dữ liệu trên mỗi row, được quản lý bởi các timestamp
Chúng ta có thể giới hạn history lưu tối đa là bao nhiêu lần (giúp tiết kiệm dung
lượng dữ liệu sau một thời gian sử dụng, mỗi lần update dữ liệu thì history cũ hơn sẽ
bị xóa).
2.5.2. Cách thức tìm kiếm
Phương pháp phổ biến nhất để tìm kiếm dữ liệu trong Hbase là dùng thrift, bình
thường thrift không được khởi động khi chạy Hbase nên sẽ cần khởi động bằng
lệnh “./bin/hbase thrift start”.
Thrift cung cấp 4 comparator để lọc dữ liệu đó là: “binary, binary prefix,
regexstring, substring”.
Một cách khác để dễ dàng sử dụng truy vấn dữ liệu trong Hbase hơn là dùng
câu lệnh sql để truy vấn, để làm được điều này, bạn cần phải cài đặt thêm Hive. Sau
khi cài đặt xong, thì mọi thao tác xử lý dữ liệu đều có thể dùng thông qua câu lệnh sql,
trong đó hỗ trợ cả join.

22
Chương 3. APACHE HADOOP CHO HỆ THỐNG BIG DATA

3.1. Giới thiệu về mô hình GFS


Con người luôn có tham vọng biết thời tiết và dự đoán nó. Nhờ sự phát triển
của công nghệ, ngày càng có nhiều mẫu máy tính khác nhau giúp dự đoán thời tiết
diễn ra trong vài ngày sau đó. Hôm nay chúng ta sẽ nói về Mô hình GFS. Đây là một
trong những mô hình quan trọng nhất và có mức độ liên quan lớn nhất trên khắp hành
tinh.
Do đó, chúng tôi sẽ dành bài viết này để cho bạn biết mọi thứ bạn cần biết về
mô hình GFS, các đặc điểm và tầm quan trọng của nó.

on người
Hình 3.1. Mô hình GFS dự báo thời tiết
Các chữ cái đầu tương ứng với Hệ thống Dự báo Toàn cầu. Trong tiếng Tây
Ban Nha, nó có nghĩa là một hệ thống cấm toàn cầu, mặc dù nó được biết đến nhiều
hơn bởi các từ viết tắt khác. Nó là một loại mô hình toán học số được sử dụng để dự
báo thời tiết. Nó đã được tạo ra và hiện đang được sử dụng bởi Cục Quản lý Khí quyển
và Đại dương Quốc gia Hoa Kỳ. Nó là một mô hình toán học được cập nhật trong
khoảng thời gian 4 lần một ngày. Tùy thuộc vào dữ liệu thu được từ các biến số khí
tượng khác nhau, các dự đoán có thể được tạo trước 16 ngày.
Ai cũng biết rằng những dự đoán này không hoàn toàn đáng tin cậy vì các động
lực học trong khí quyển có thể dễ dàng thay đổi. Các đặc tính của khí quyển và thời
tiết thịnh hành phụ thuộc vào giá trị của nhiều biến cùng một lúc. Hầu hết các biến này
đều bị ảnh hưởng trực tiếp bởi lượng bức xạ mặt trời ảnh hưởng đến hành tinh của
chúng ta. Dựa theo lượng bức xạ mặt trời mà phần còn lại của các biến đang thay đổi
bắt đầu từ nhiệt độ và chế độ gió.
Có thể thừa nhận rằng các dự đoán của mô hình GFS không mang lại độ tin cậy
cao cho chúng tôi sau 7 ngày. Thậm chí có thể nói rằng sau 3-4 ngày nó không còn

23
hoàn toàn chính xác nữa. Hầu hết các viện và cơ quan khí tượng quốc gia phân phối
hầu hết các kết quả từ mô hình này, đặc biệt là những kết quả vượt quá 10 ngày sau đó.
 Các mô hình dự báo thời tiết dạng số
Để có thể dự đoán thời tiết, cần có nhiều mô hình số khác nhau. Các mô hình số
này đang lấy giá trị của các biến khí quyển và bằng các phương trình phức tạp, trạng
thái của các biến này có thể được biết trong tương lai gần. Có 4 mô hình số dự đoán
thời tiết được sử dụng nhiều nhất trên hành tinh:
Hệ thống dự báo tích hợp của Trung tâm Dự báo Thời tiết Tầm trung Châu Âu.
Môi trường toàn cầu đa cấp độ Mô hình Canada.
Hệ thống Dự báo Khí quyển Toàn cầu Hoạt động của Hải quân của Lực lượng
vũ trang Hoa Kỳ.
GFS (Hệ thống Dự báo toàn cầu).
Đây là những mô hình được sử dụng nhiều nhất để dự báo khí tượng trong
trung hạn và trên quy mô khái quát.
 Mô hình GFS Châu Âu

Hình 3.2. Mô hình GFS dự báo thời tiết ở châu Âu


Một khi chúng ta biết chức năng của loại mô hình dự báo khí tượng này, chúng
ta phải dựa trên sự khác biệt tồn tại ở các khu vực khác nhau của các quốc gia trên thế
giới. Cụ thể, bạn phải nhìn vào mô hình GFS của Châu Âu. Và đó là mô hình này  Nó

24
có rất nhiều lợi ích so với ứng cử viên hàng đầu được tạo ra bởi chính phủ Hoa
Kỳ. Nếu chúng ta hiện tại so sánh cả hai mô hình, nó là một cuộc tranh luận sẽ có hồi
kết. Cả hai đều có những đặc điểm rất tốt và dự đoán khá chặt chẽ. Hiện chưa có bài
kiểm tra khách quan nào được thực hiện bởi một tập đoàn hoạt động độc lập để xác
định xem mẫu nào trong số hai mẫu là tốt nhất để có thể dự đoán thời tiết.
Mặc dù thực tế là cả hai mô hình đều không phải là người chiến thắng so với
mô hình kia, hầu hết các chuyên gia trong lĩnh vực này đều lựa chọn mô hình châu Âu.
Một trong những điểm khác biệt chính giữa mô hình này và mô hình Mỹ là công nghệ
của nó. Nó có nhiều hệ thống máy tính phức tạp và đắt tiền hơn cho phép chúng hoạt
động theo cách hiệu quả hơn. Với công nghệ phức tạp hơn này, các phép chiếu trong
khí quyển chính xác hơn, được điều chỉnh và độ phân giải cao hơn sẽ đạt được.
Hầu hết các chuyên gia cho rằng mô hình GFS của châu Âu tốt hơn nhiều so
với Hoa Kỳ về mặt mô phỏng dữ liệu. Lập luận mà họ sử dụng là nó đầy đủ hơn đáng
kể và nó cung cấp một lượng lớn thông tin được xác minh hơn. Để đưa ra một ví dụ để
có thể thấy sự khác biệt giữa các mô hình Châu Âu và Châu Mỹ, Châu Âu là có khả
năng thực hiện 50 mô phỏng bầu khí quyển mỗi chu kỳ dự báo, trong khi Bắc Mỹ chỉ
có thể thực hiện 20 mô phỏng cùng một lúc.
 Mô hình GFS ở Tây Ban Nha

Hình 3.3. Mô hình GFS dự báo thời tiết ở Tây Ban Nha

25
Ở nước ta cũng có mô hình dự báo thời tiết này. Mô hình này chạy mỗi mô hình
của nó trong nhiều phần. Hãy xem những phần này là gì:
- Đầu tiên được thực hiện với độ phân giải cao hơn và tốt hơn nó thường lên
đến 192 giờ, tương đương với 8 ngày với bản đồ dự đoán sau mỗi 6 giờ.
- Phần khác của dự đoán có độ phân giải thấp hơn. Và nó chỉ bao gồm từ 204
đến 384 giờ, tức là 16 ngày với bản đồ 12 giờ một lần. Theo dự đoán, dự đoán này có
độ phân giải thấp hơn, vì nó kéo dài nhiều ngày hơn, nên nó không thể thực hiện với
độ chính xác tương tự.
Trên lãnh thổ Tây Ban Nha, mô hình này thường được sử dụng khoảng 4 lần
một ngày để có thể ước lượng tốt các dự đoán ngắn hạn. Có thể nói, nó được sử dụng
vào 0 giờ, 6 giờ 12 và 18 giờ. Về việc cập nhật các bản đồ có thể hiển thị để xem kết
quả dự đoán, chúng được thực hiện theo thời gian thực từ 3:30, 9:30, 15:30 và 21:30
UTC.
Cần phải lưu ý rằng loại mô hình dự báo khí tượng này có lỗi của chúng vì các
biến khí quyển không có hoạt động cố định. Do đó, chúng tôi thấy rằng nhiều báo cáo
thời tiết sai với dự đoán vì sự phát triển của khí quyển không phải lúc nào cũng dễ dự
đoán như vậy. Một số mô hình chẳng hạn như sự hình thành của các cơn bão hoặc các
chất chống đông có thể khá đơn giản. Tuy nhiên, dự đoán sự dịch chuyển của các khối
khí này khó dự đoán hơn.
Tôi hy vọng rằng với những thông tin này, bạn có thể hiểu thêm về mô hình
GFS, đặc điểm và tầm quan trọng của nó.
3.2. Lịch sử Hadoop
Apache Hadoop hay Hadoop là một software framework hỗ trợ các ứng dụng
phân tán dữ liệu chuyên sâu theo cấp 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.
Khi các công ty chuyên về công cụ tìm kiếm như Yahoo và Google phát triển
đã thúc đẩy Apache Hadoop ra đời, do nhu cầu xử lý một khối lượng lớn Big Data
ngày càng tăng và khả năng cung cấp kết quả trên web nhanh hơn. Lấy cảm hứng từ
Google’s MapReduce, một mô hình lập trình chia ứng dụng thành các phân số nhỏ để
chạy trên các nút khác nhau, Doug Cutting và Mike Cafarella bắt đầu triển khai
Hadoop vào năm 2002 khi đang làm việc trong dự án Apache Nutch.
Theo một bài báo trên New York Times, Doug đặt tên Hadoop theo tên con voi
đồ chơi của con trai mình. Vài năm sau, Hadoop bị tách khỏi Nutch. Khi Cutting gia
nhập Yahoo, ông đã phát hành Hadoop dưới dạng một dự án mã nguồn mở vào năm

26
2008. Và cuối cùng, Apache Software Foundation (ASF) đã đưa Hadoop ra mắt công
chúng vào tháng 11 năm 2012 với tên gọi Apache Hadoop.

3.3. Đặc trưng của Hadoop


 Khả năng xử lý một lượng lớn dữ liệu
Hadoop cung cấp khả năng lưu trữ và xử lý một lượng lớn bất kỳ loại dữ liệu
nào. Điều này đặc biệt quan trọng khi khối lượng và sự đa dạng của dữ liệu không
ngừng tăng lên, đặc biệt là từ các phương tiện truyền thông xã hội và Internet of
Things (IoT).
 Khả năng tính toán
Mô hình điện toán phân tán của Hadoop xử lý Big Data một cách nhanh chóng.
Bạn sử dụng càng nhiều nút máy tính, bạn càng có thêm nhiều sức mạnh để xử lý.
 Khả năng chịu lỗi
Xử lý dữ liệu và ứng dụng sẽ được bảo vệ khỏi các lỗi phần cứng. Nếu một nút
gặp trục trặc, các công việc sẽ tự động được chuyển sang các nút khác để đảm bảo tính
toán phân tán không bị lỗi. Đồng thời các bản sao của dữ liệu đều được lưu trữ tự
động.
 Tính linh hoạt
Không giống như các hệ quản trị cơ sở dữ liệu truyền thống, Hadoop có thể
giúp bạn lưu trữ bao nhiêu dữ liệu tùy thích và được phép quyết định cách sử dụng
chúng sau này. Bao gồm dữ liệu phi cấu trúc như văn bản, hình ảnh và video.
 Miễn phí và dễ mở rộng
Đây là một framework mã nguồn mở nên hoàn toàn miễn phí. Ngoài ra, bạn
cũng có thể dễ dàng phát triển hệ thống của mình để xử lý nhiều dữ liệu hơn bằng cách
thêm các nút.
3.4. Cấu trúc của Hadoop
Hadoop được tạo thành từ các modules, mỗi modules sẽ thực hiện một nhiệm
vụ cụ thể cần thiết cho hệ thống máy tính đã được thiết kế để phân tích Big Data.

27
Hình 3.4. Mô hình cấu trúc của Hadoop
Hadoop là một trong những công nghệ liên quan chặt chẽ với Big data. Dự án
Apache Hadoop phát triển phần mềm mã nguồn mở cho máy tính có khả năng mở
rộng và phân phối.
Thư viện phần mềm Hadoop là một framework cho phép xử lý phân phối các
bộ dữ liệu lớn trên nhóm máy tính sử dụng mô hình lập trình đơn giản. Nó được thiết
kế để mở rộng từ một máy chủ duy nhất sang hàng ngàn máy khác, mỗi máy cung cấp
tính toán và lưu trữ cục bộ.
- Hadoop Distributed FileSystem (HDFS): Hệ thống file lưu trữ và quản lý của
Hadoop.
Hệ thống bao gồm:
- Hadoop Common: Các tiện ích phồ biến hỗ trợ các phần Hadoop khác;
- Hadoop Distributed File System: Cung cấp khả năng truy cập dữ liệu ứng
dụng cao;
- Hadoop YARN: Một framework cho kế hoạch làm việc và quản lý tài nguyên;
- Hadoop MapReduce, một hệ thống dựa trên YARN đề xử lý song song bộ dữ
liệu lớn.
3.4.1. Hadoop Common
Hadoop Common còn được gọi là Hadoop Core, là một phần thiết yếu của
Hadoop Apache. Nó cũng cung cấp mã nguồn và tài liệu, cũng như phần đóng góp bao
gồm các dự án khác nhau từ cộng đồng Hadoop (hệ thống tệp phân tán Hadoop
(HDFS), Hadoop YARN và Hadoop MapReduce). 
Hadoop Common đề cập đến tập hợp các tiện ích và thư viện phổ biến hỗ trợ
các modul Hadoop khác. Hadoop Common cũng chứa các tập lệnh và tập lệnh Lưu trữ
Java (JAR) cần thiết để khởi động Hadoop. 
Hadoop Common giả định rằng lỗi phần cứng là phổ biến và những lỗi này sẽ
được Hadoop Framework tự động xử lý trong phần mềm.

28
3.4.2. MapReduce
MapReduce được đặt tên theo hai hoạt động cơ bản mà modules này thực hiện,
bao gồm đọc dữ liệu từ cơ sở dữ liệu, đưa chúng vào định dạng phù hợp để phân tích
(bản đồ) và thực hiện các thuật toán.
3.4.3. Hadoop Common
Hadoop Common cung cấp các công cụ (bằng Java) cần thiết cho hệ thống máy
tính của người dùng (Windows, Unix hoặc hệ điều hành khác) để đọc dữ liệu được lưu
trữ trong hệ thống tệp Hadoop.
3.4.4. YARN
Là modules cuối cùng của Hadoop có chức năng quản lý tài nguyên của hệ
thống lưu trữ dữ liệu và thực hiện các phân tích.

29
3.4.5. HDFS
HDFS (Hadoop Distributed FileSystem): Hệ thống file lưu trữ và quản lý của
Hadoop.
 Giới thiệu
Hệ thống tệp phân tán HDFS là một hệ thống tệp phân tán được thiết kế để chạy
trên phần cứng hàng hóa (commodity). Nó có nhiều điểm tương đồng với các hệ thống
tệp phân tán hiện có. Tuy nhiên, sự khác biệt so với các hệ thống tệp phân tán khác là
rất đáng kể. HDFS có khả năng chịu lỗi cao và được thiết kế để triển khai trên phần
cứng giá rẻ. HDFS cung cấp quyền truy cập thông lượng cao vào dữ liệu ứng dụng và
phù hợp với các ứng dụng có tập dữ liệu lớn. HDFS nới lỏng một số yêu cầu POSIX
để cho phép truy cập trực tuyến vào dữ liệu hệ thống tệp. HDFS ban đầu được xây
dựng làm cơ sở hạ tầng cho dự án công cụ tìm kiếm web Apache Nutch. HDFS hiện là
một tiểu dự án Apache Hadoop.
 Giả định và Mục tiêu
- Lỗi phần cứng
Lỗi phần cứng là bình thường chứ không phải là ngoại lệ. Một phiên bản HDFS
có thể bao gồm hàng trăm hoặc hàng nghìn máy chủ, mỗi máy lưu trữ một phần dữ
liệu của hệ thống tệp. Thực tế là có một số lượng lớn các thành phần và mỗi thành
phần có xác suất hỏng hóc không hề nhỏ có nghĩa là một số thành phần của HDFS
luôn không hoạt động. Do đó, việc phát hiện lỗi và phục hồi nhanh chóng, tự động từ
chúng là mục tiêu kiến trúc cốt lõi của HDFS.
- Truy cập dữ liệu trực tuyến
Các ứng dụng chạy trên HDFS cần truy cập trực tuyến vào bộ dữ liệu của
chúng. Chúng không phải là các ứng dụng có mục đích chung thường chạy trên các hệ
thống tệp có mục đích chung. HDFS được thiết kế nhiều hơn để xử lý hàng loạt hơn là
sử dụng tương tác của người dùng. Trọng tâm là thông lượng truy cập dữ liệu cao thay
vì truy cập dữ liệu có độ trễ thấp. POSIX áp đặt nhiều yêu cầu khó không cần thiết cho
các ứng dụng được nhắm mục tiêu cho HDFS. Ngữ nghĩa POSIX trong một số lĩnh
vực chính đã được giao dịch để tăng tốc độ truyền dữ liệu.
- Tập dữ liệu lớn
Các ứng dụng chạy trên HDFS có bộ dữ liệu lớn. Một tệp điển hình trong
HDFS có kích thước từ gigabyte đến terabyte. Do đó, HDFS được điều chỉnh để hỗ trợ
các tệp lớn. Nó sẽ cung cấp băng thông dữ liệu tổng hợp cao và mở rộng quy mô thành
hàng trăm nút trong một cụm. Nó sẽ hỗ trợ hàng chục triệu tệp trong một trường hợp
duy nhất.
- Mô hình mạch lạc đơn giản
Các ứng dụng HDFS cần mô hình truy cập ghi một lần đọc nhiều tệp cho các
tệp. Một tệp sau khi được tạo, ghi và đóng không cần phải thay đổi. Giả định này đơn
giản hóa các vấn đề liên kết dữ liệu và cho phép truy cập dữ liệu thông lượng cao. Ứng

30
dụng MapReduce hoặc ứng dụng trình thu thập dữ liệu web hoàn toàn phù hợp với mô
hình này. Có kế hoạch hỗ trợ thêm-ghi vào tệp trong tương lai.
- “Di chuyển tính toán rẻ hơn di chuyển dữ liệu”
Một tính toán được yêu cầu bởi một ứng dụng sẽ hiệu quả hơn nhiều nếu nó
được thực thi gần dữ liệu mà nó hoạt động. Điều này đặc biệt đúng khi kích thước của
tập dữ liệu là rất lớn. Điều này giảm thiểu tắc nghẽn mạng và tăng thông lượng tổng
thể của hệ thống. Giả định là di chuyển tính toán đến gần vị trí dữ liệu thường tốt hơn
là di chuyển dữ liệu đến nơi ứng dụng đang chạy. HDFS cung cấp các giao diện cho
các ứng dụng tự di chuyển đến gần vị trí dữ liệu hơn.
- Tính di động trên các nền tảng phần cứng và phần cứng không đồng nhất
HDFS đã được thiết kế để dễ dàng di chuyển từ nền tảng này sang nền tảng
khác. Điều này tạo điều kiện cho việc áp dụng rộng rãi HDFS như một nền tảng được
lựa chọn cho một bộ ứng dụng lớn.
 NameNode và DataNode
HDFS có kiến trúc chủ/tớ. Một cụm HDFS bao gồm một NameNode duy nhất,
một máy chủ chính quản lý không gian tên hệ thống tệp và điều chỉnh quyền truy cập
vào các tệp của máy khách. Ngoài ra, có một số DataNodes, thường là một DataNodes
trên mỗi nút trong cụm, quản lý lưu trữ gắn liền với các nút mà chúng chạy trên
đó. HDFS hiển thị không gian tên hệ thống tệp và cho phép lưu trữ dữ liệu người dùng
trong tệp. Bên trong, một tệp được chia thành một hoặc nhiều khối và các khối này
được lưu trữ trong một tập hợp các DataNode. NameNode thực thi các hoạt động
không gian tên hệ thống tệp như mở, đóng và đổi tên tệp và thư mục. Nó cũng xác
định ánh xạ của các khối tới DataNode. Các DataNode chịu trách nhiệm phục vụ các
yêu cầu đọc và ghi từ các máy khách của hệ thống tệp.

Hình 3.5. Kiến trúc HDFS

31
NameNode và DataNode là những phần mềm được thiết kế để chạy trên các
máy thương mại. Những máy này thường chạy hệ điều hành GNU/Linux (OS). HDFS
được xây dựng bằng ngôn ngữ Java; bất kỳ máy nào hỗ trợ Java đều có thể chạy phần
mềm NameNode hoặc DataNode. Việc sử dụng ngôn ngữ Java có tính di động cao có
nghĩa là HDFS có thể được triển khai trên nhiều loại máy. Một triển khai điển hình có
một máy chuyên dụng chỉ chạy phần mềm NameNode. Mỗi máy khác trong cụm chạy
một phiên bản của phần mềm DataNode. Kiến trúc không loại trừ việc chạy nhiều
DataNodes trên cùng một máy nhưng trong một triển khai thực tế hiếm khi xảy ra
trường hợp đó.
Sự tồn tại của một NameNode duy nhất trong một cụm giúp đơn giản hóa đáng
kể kiến trúc của hệ thống. NameNode là người phân xử và kho lưu trữ cho tất cả siêu
dữ liệu HDFS. Hệ thống được thiết kế sao cho dữ liệu người dùng không bao giờ chảy
qua NameNode.
 Không gian tên hệ thống tệp
HDFS hỗ trợ tổ chức tệp phân cấp truyền thống. Người dùng hoặc ứng dụng có
thể tạo thư mục và lưu trữ tệp bên trong các thư mục này. Hệ thống phân cấp không
gian tên hệ thống tệp tương tự như hầu hết các hệ thống tệp hiện có khác; người ta có
thể tạo và xóa tệp, di chuyển tệp từ thư mục này sang thư mục khác hoặc đổi tên
tệp. HDFS chưa triển khai hạn ngạch người dùng. HDFS không hỗ trợ liên kết cứng
hoặc liên kết mềm. Tuy nhiên, kiến trúc HDFS không loại trừ việc triển khai các tính
năng này.
NameNode duy trì không gian tên hệ thống tệp. Bất kỳ thay đổi nào đối với
không gian tên hệ thống tệp hoặc thuộc tính của nó đều được ghi lại bởi
NameNode. Một ứng dụng có thể chỉ định số lượng bản sao của tệp sẽ được HDFS
duy trì. Số bản sao của một tệp được gọi là hệ số sao chép của tệp đó. Thông tin này
được lưu trữ bởi NameNode.
 Sao chép dữ liệu
HDFS được thiết kế để lưu trữ các tệp rất lớn một cách đáng tin cậy trên các
máy trong một cụm lớn. Nó lưu trữ mỗi tệp dưới dạng một chuỗi các khối; tất cả các
khối trong một tệp ngoại trừ khối cuối cùng có cùng kích thước. Các khối của tệp được
sao chép để có khả năng chịu lỗi. Kích thước khối và hệ số sao chép có thể định cấu
hình cho mỗi tệp. Một ứng dụng có thể chỉ định số lượng bản sao của một tệp. Hệ số
sao chép có thể được chỉ định tại thời điểm tạo tệp và có thể thay đổi sau này.  Các tệp
trong HDFS được ghi một lần và có một người ghi bất cứ lúc nào.
NameNode đưa ra tất cả các quyết định liên quan đến việc sao chép các
khối. Nó định kỳ nhận được Heartbeat và Blockreport từ mỗi DataNode trong
cụm. Nhận được Heartbeat ngụ ý rằng DataNode đang hoạt động bình thường. Báo
cáo khối chứa danh sách tất cả các khối trên DataNode.

32
Hình 3.6. Mô hình sao chép dữ liệu của HDFS
- Vị trí bản sao: Những bước nhỏ đầu tiên (The First Baby Steps)
Vị trí của các bản sao rất quan trọng đối với độ tin cậy và hiệu suất của
HDFS. Việc tối ưu hóa vị trí bản sao phân biệt HDFS với hầu hết các hệ thống tệp
phân tán khác. Đây là một tính năng cần nhiều điều chỉnh và trải nghiệm. Mục đích
của chính sách sắp xếp bản sao nhận biết giá đỡ là để cải thiện độ tin cậy, tính khả
dụng và sử dụng băng thông mạng của dữ liệu. Việc triển khai chính sách sắp xếp bản
sao hiện tại là nỗ lực đầu tiên theo hướng này. Các mục tiêu ngắn hạn của việc triển
khai chính sách này là xác thực chính sách này trên các hệ thống sản xuất, tìm hiểu
thêm về hành vi của chính sách này và xây dựng nền tảng để thử nghiệm và nghiên
cứu các chính sách tinh vi hơn.
Các phiên bản HDFS lớn chạy trên một cụm máy tính thường trải rộng trên
nhiều giá đỡ. Giao tiếp giữa hai nút trong các giá đỡ khác nhau phải thông qua các
công tắc. Trong hầu hết các trường hợp, băng thông mạng giữa các máy trong cùng
một giá lớn hơn băng thông mạng giữa các máy trong các giá khác nhau.
NameNode xác định ID nó phụ thuộc mà mỗi DataNode thuộc về. Một chính
sách đơn giản nhưng không tối ưu là đặt các bản sao trên các giá đỡ độc nhất. Điều
này giúp tránh mất dữ liệu khi toàn bộ giá bị lỗi và cho phép sử dụng băng thông từ
nhiều giá khi đọc dữ liệu. Chính sách này phân phối đồng đều các bản sao trong cụm,
giúp dễ dàng cân bằng tải khi lỗi thành phần. Tuy nhiên, chính sách này làm tăng chi
phí ghi vì một lần ghi cần chuyển các khối sang nhiều giá đỡ.
Đối với trường hợp phổ biến, khi hệ số sao chép là ba, chính sách sắp xếp của
HDFS là đặt một bản sao trên một nút trong giá đỡ cục bộ, một bản sao khác trên một
nút trong giá đỡ (từ xa) khác và bản sao cuối cùng trên một nút khác trong cùng một

33
giá đỡ giá đỡ từ xa. Chính sách này cắt giảm lưu lượng ghi giữa các giá, điều này
thường cải thiện hiệu suất ghi. Khả năng xảy ra sự cố giá đỡ thấp hơn nhiều so với khả
năng xảy ra sự cố nút; chính sách này không ảnh hưởng đến độ tin cậy và đảm bảo tính
khả dụng của dữ liệu. Tuy nhiên, nó làm giảm băng thông mạng tổng hợp được sử
dụng khi đọc dữ liệu do một khối chỉ được đặt trong hai giá duy nhất thay vì ba. Với
chính sách này, các bản sao của tệp không phân bổ đều trên các giá đỡ. Một phần ba số
bản sao nằm trên một nút, hai phần ba số bản sao nằm trên một giá đỡ, và một phần ba
còn lại được phân bố đều trên các giá đỡ còn lại. Chính sách này cải thiện hiệu suất ghi
mà không ảnh hưởng đến độ tin cậy của dữ liệu hoặc hiệu suất đọc.
Chính sách vị trí bản sao mặc định, hiện tại được mô tả ở đây là một công việc
đang được tiến hành.
- Lựa chọn bản sao
Để giảm thiểu mức tiêu thụ băng thông toàn cầu và độ trễ đọc, HDFS cố gắng
đáp ứng yêu cầu đọc từ một bản sao gần đầu đọc nhất. Nếu tồn tại một bản sao trên
cùng một giá với nút người đọc, thì bản sao đó sẽ được ưu tiên đáp ứng yêu cầu
đọc. Nếu cụm angg/HDFS mở rộng trên nhiều trung tâm dữ liệu, thì một bản sao nằm
trong trung tâm dữ liệu cục bộ sẽ được ưu tiên hơn bất kỳ bản sao từ xa nào.
- Chế độ an toàn
Khi khởi động, NameNode chuyển sang trạng thái đặc biệt gọi là
Safemode. Sao chép khối dữ liệu không xảy ra khi NameNode ở trạng thái
Safemode. NameNode nhận thông báo Heartbeat và Blockreport từ DataNode. Báo
cáo khối chứa danh sách các khối dữ liệu mà DataNode đang lưu trữ. Mỗi khối có số
lượng bản sao tối thiểu được chỉ định. Một khối được coi là sao chép an toàn khi số
lượng bản sao tối thiểu của khối dữ liệu đó đã được đăng ký với NameNode. Sau khi
một tỷ lệ phần trăm có thể định cấu hình của các khối dữ liệu được sao chép an toàn
kiểm tra bằng NameNode (cộng thêm 30 giây nữa), NameNode sẽ thoát khỏi trạng thái
Chế độ an toàn. Sau đó, nó xác định danh sách các khối dữ liệu (nếu có) vẫn còn ít hơn
số lượng bản sao được chỉ định.
 Tính bền vững của siêu dữ liệu hệ thống tệp
Không gian tên HDFS được lưu trữ bởi NameNode. NameNode sử dụng nhật
ký giao dịch được gọi là EditLog để ghi lại liên tục mọi thay đổi xảy ra với siêu dữ
liệu hệ thống tệp. Ví dụ: việc tạo một tệp mới trong HDFS khiến NameNode chèn một
bản ghi vào EditLog cho biết điều này. Tương tự, việc thay đổi hệ số sao chép của tệp
sẽ khiến một bản ghi mới được chèn vào EditLog. NameNode sử dụng một tệp trong
hệ thống tệp hệ điều hành máy chủ lưu trữ cục bộ của nó để lưu trữ EditLog.  Toàn bộ
không gian tên hệ thống tệp, bao gồm ánh xạ khối tới tệp và thuộc tính hệ thống tệp,
được lưu trữ trong tệp có tên là FsImage. FsImage cũng được lưu trữ dưới dạng tệp
trong hệ thống tệp cục bộ của NameNode.
NameNode giữ một hình ảnh của toàn bộ không gian tên hệ thống tệp và Sơ đồ
khối tệp trong bộ nhớ. Mục siêu dữ liệu quan trọng này được thiết kế nhỏ gọn, sao cho

34
một NameNode có 4 GB RAM đủ để hỗ trợ một số lượng lớn tệp và thư mục. Khi
NameNode khởi động, nó đọc FsImage và EditLog từ đĩa, áp dụng tất cả các giao dịch
từ EditLog cho biểu diễn trong bộ nhớ của FsImage và đưa phiên bản mới này vào một
FsImage mới trên đĩa. Sau đó, nó có thể cắt bớt EditLog cũ vì các giao dịch của nó đã
được áp dụng cho FsImage liên tục. Quá trình này được gọi là điểm kiểm tra. Trong
quá trình triển khai hiện tại, một điểm kiểm tra chỉ xảy ra khi NameNode khởi
động. Công việc đang được tiến hành để hỗ trợ điểm kiểm tra định kỳ trong tương lai
gần.
DataNode lưu trữ dữ liệu HDFS trong các tệp trong hệ thống tệp cục bộ của
nó. DataNode không có kiến thức về các tệp HDFS. Nó lưu trữ từng khối dữ liệu
HDFS trong một tệp riêng biệt trong hệ thống tệp cục bộ của nó. DataNode không tạo
tất cả các tệp trong cùng một thư mục. Thay vào đó, nó sử dụng phương pháp phỏng
đoán để xác định số lượng tệp tối ưu cho mỗi thư mục và tạo các thư mục con một
cách thích hợp. Việc tạo tất cả các tệp cục bộ trong cùng một thư mục là không tối ưu
vì hệ thống tệp cục bộ có thể không hỗ trợ hiệu quả một số lượng lớn tệp trong một thư
mục. Khi một DataNode khởi động, nó sẽ quét qua hệ thống tệp cục bộ của nó, tạo
danh sách tất cả các khối dữ liệu HDFS tương ứng với từng tệp cục bộ này và gửi báo
cáo này tới NameNode: đây là Báo cáo khối.
 Giao thức truyền thông
Tất cả các giao thức truyền thông HDFS được xếp chồng lên trên giao thức
TCP/IP. Máy khách thiết lập kết nối với cổng TCP có thể định cấu hình trên máy
NameNode. Nó nói về ClientProtocol với NameNode. DataNode nói chuyện với
NameNode bằng Giao thức DataNode. Sự trừu tượng hóa Cuộc gọi Thủ tục Từ xa
( RPC ) bao bọc cả Giao thức Máy khách và Giao thức DataNode. Theo thiết kế,
NameNode không bao giờ khởi tạo bất kỳ RPC nào. Thay vào đó, nó chỉ đáp ứng các
yêu cầu RPC do DataNode hoặc máy khách đưa ra.
 mạnh mẽ
Mục tiêu chính của HDFS là lưu trữ dữ liệu một cách đáng tin cậy ngay cả khi
có lỗi. Ba loại lỗi phổ biến là lỗi NameNode, lỗi DataNode và phân vùng mạng.
- Lỗi đĩa dữ liệu, nhịp tim và sao chép lại
Mỗi DataNode gửi một thông báo Heartbeat đến NameNode theo định kỳ. Một
phân vùng mạng có thể khiến một tập hợp con của DataNode mất kết nối với
NameNode. NameNode phát hiện tình trạng này do không có thông báo
Heartbeat. NameNode đánh dấu DataNode không có Nhịp tim gần đây là đã chết và
không chuyển tiếp bất kỳ IO mới nàoyêu cầu đối với họ. Mọi dữ liệu đã được đăng ký
với DataNode đã chết sẽ không còn khả dụng cho HDFS nữa. Cái chết của DataNode
có thể khiến hệ số sao chép của một số khối giảm xuống dưới giá trị được chỉ định của
chúng. NameNode liên tục theo dõi những khối nào cần được sao chép và bắt đầu sao
chép bất cứ khi nào cần thiết. Sự cần thiết phải sao chép lại có thể phát sinh do nhiều

35
lý do: DataNode có thể không khả dụng, bản sao có thể bị hỏng, đĩa cứng trên
DataNode có thể bị lỗi hoặc hệ số sao chép của tệp có thể tăng lên.
- Tái cân bằng cụm
Kiến trúc HDFS tương thích với các lược đồ tái cân bằng dữ liệu. Một lược đồ
có thể tự động di chuyển dữ liệu từ DataNode này sang DataNode khác nếu dung
lượng trống trên DataNode giảm xuống dưới một ngưỡng nhất định. Trong trường hợp
có nhu cầu cao đột ngột đối với một tệp cụ thể, một lược đồ có thể tự động tạo các bản
sao bổ sung và cân bằng lại dữ liệu khác trong cụm. Các loại kế hoạch tái cân bằng dữ
liệu này chưa được triển khai.
- Toàn vẹn dữ liệu
Có thể một khối dữ liệu được tìm nạp từ DataNode bị hỏng. Lỗi này có thể xảy
ra do lỗi trong thiết bị lưu trữ, lỗi mạng hoặc phần mềm lỗi. Phần mềm máy khách
HDFS thực hiện kiểm tra tổng kiểm tra nội dung của các tệp HDFS. Khi một máy
khách tạo một tệp HDFS, nó sẽ tính toán tổng kiểm tra của từng khối của tệp và lưu
trữ các tổng kiểm tra này trong một tệp ẩn riêng biệt trong cùng một không gian tên
HDFS. Khi một khách hàng truy xuất nội dung tệp, nó sẽ xác minh rằng dữ liệu mà nó
nhận được từ mỗi DataNode khớp với tổng kiểm tra được lưu trữ trong tệp tổng kiểm
tra được liên kết. Nếu không, thì máy khách có thể chọn truy xuất khối đó từ một
DataNode khác có bản sao của khối đó.
- Lỗi đĩa siêu dữ liệu
FsImage và EditLog là cấu trúc dữ liệu trung tâm của HDFS. Việc các tệp này
bị hỏng có thể khiến phiên bản HDFS không hoạt động. Vì lý do này, NameNode có
thể được cấu hình để hỗ trợ duy trì nhiều bản sao của FsImage và EditLog. Bất kỳ cập
nhật nào đối với FsImage hoặc EditLog đều khiến mỗi FsImage và EditLog được cập
nhật đồng bộ. Việc cập nhật đồng bộ nhiều bản sao của FsImage và EditLog này có thể
làm giảm tốc độ giao dịch không gian tên mỗi giây mà NameNode có thể hỗ trợ. Tuy
nhiên, sự xuống cấp này có thể chấp nhận được vì mặc dù các ứng dụng HDFS có bản
chất rất sử dụng nhiều dữ liệu nhưng chúng không sử dụng nhiều siêu dữ liệu. Khi một
NameNode khởi động lại, nó sẽ chọn FsImage và EditLog nhất quán mới nhất để sử
dụng.
Máy NameNode là một điểm lỗi duy nhất đối với cụm HDFS. Nếu máy NameNode bị lỗi thì cần
can thiệp thủ công. Hiện tại, tính năng tự động khởi động lại và chuyển đổi dự phòng của
phần mềm NameNode sang máy khác không được hỗ trợ.

- ảnh chụp nhanh


Ảnh chụp nhanh hỗ trợ lưu trữ một bản sao dữ liệu tại một thời điểm cụ
thể. Một cách sử dụng tính năng chụp nhanh có thể là khôi phục phiên bản HDFS bị
hỏng về thời điểm tốt đã biết trước đó. HDFS hiện không hỗ trợ ảnh chụp nhanh
nhưng sẽ có bản phát hành trong tương lai.
 Tổ chức dữ liệu
- Khối dữ liệu

36
HDFS được thiết kế để hỗ trợ các tệp rất lớn. Các ứng dụng tương thích với
HDFS là những ứng dụng xử lý các tập dữ liệu lớn. Các ứng dụng này chỉ ghi dữ liệu
một lần nhưng chúng đọc dữ liệu đó một hoặc nhiều lần và yêu cầu các lần đọc này
phải được đáp ứng ở tốc độ truyền phát. HDFS hỗ trợ ngữ nghĩa ghi một lần đọc nhiều
trên các tệp. Kích thước khối thông thường được HDFS sử dụng là 64 MB. Do đó, một
tệp HDFS được chia nhỏ thành các khối 64 MB và nếu có thể, mỗi khối sẽ nằm trên
một DataNode khác nhau.
- dàn dựng
Yêu cầu của khách hàng để tạo tệp không đến được NameNode ngay lập
tức. Trên thực tế, ban đầu, ứng dụng khách HDFS lưu trữ dữ liệu tệp vào một tệp cục
bộ tạm thời. Việc ghi ứng dụng được chuyển hướng rõ ràng đến tệp cục bộ tạm thời
này. Khi tệp cục bộ tích lũy dữ liệu có giá trị trên một kích thước khối HDFS, máy
khách sẽ liên hệ với NameNode. NameNode chèn tên tệp vào hệ thống phân cấp tệp và
phân bổ một khối dữ liệu cho nó. NameNode đáp ứng yêu cầu của khách hàng với
danh tính của DataNode và khối dữ liệu đích. Sau đó, máy khách xóa khối dữ liệu từ
tệp tạm thời cục bộ sang DataNode đã chỉ định. Khi một tệp được đóng, dữ liệu chưa
được xóa còn lại trong tệp cục bộ tạm thời sẽ được chuyển đến DataNode. Sau đó,
khách hàng nói với NameNode rằng tệp đã được đóng. Tại thời điểm này, NameNode
cam kết thao tác tạo tệp vào một cửa hàng liên tục. Nếu NameNode chết trước khi
đóng tệp, tệp sẽ bị mất.
Cách tiếp cận trên đã được áp dụng sau khi xem xét cẩn thận các ứng dụng đích
chạy trên HDFS. Các ứng dụng này cần ghi trực tuyến vào tệp. Nếu một máy khách
ghi trực tiếp vào một tệp từ xa mà không có bất kỳ bộ đệm phía máy khách nào, thì tốc
độ mạng và tình trạng tắc nghẽn trong mạng sẽ ảnh hưởng đáng kể đến thông
lượng. Cách tiếp cận này không phải là không có tiền lệ. Các hệ thống tệp phân tán
trước đó, chẳng hạn như AFS , đã sử dụng bộ nhớ đệm phía máy khách để cải thiện
hiệu suất. Yêu cầu POSIX đã được nới lỏng để đạt được hiệu suất tải lên dữ liệu cao
hơn.
- quy trình sao chép
Khi một máy khách đang ghi dữ liệu vào một tệp HDFS, dữ liệu của nó trước
tiên được ghi vào một tệp cục bộ như đã giải thích trong phần trước. Giả sử tệp HDFS
có hệ số sao chép là ba. Khi tệp cục bộ tích lũy toàn bộ khối dữ liệu người dùng, máy
khách sẽ truy xuất danh sách các DataNode từ NameNode. Danh sách này chứa các
DataNodes sẽ lưu trữ một bản sao của khối đó. Sau đó, máy khách chuyển khối dữ liệu
sang DataNode đầu tiên. DataNode đầu tiên bắt đầu nhận dữ liệu theo từng phần nhỏ
(4 KB), ghi từng phần vào kho lưu trữ cục bộ của nó và chuyển phần đó sang
DataNode thứ hai trong danh sách. DataNode thứ hai lần lượt bắt đầu nhận từng phần
của khối dữ liệu, ghi phần đó vào kho lưu trữ của nó và sau đó xóa phần đó sang
DataNode thứ ba. Cuối cùng, DataNode thứ ba ghi dữ liệu vào kho lưu trữ cục bộ của
nó. Do đó, một DataNode có thể nhận dữ liệu từ cái trước đó trong đường ống và đồng

37
thời chuyển tiếp dữ liệu tới cái tiếp theo trong đường ống. Do đó, dữ liệu được chuyển
từ DataNode này sang DataNode tiếp theo.
 khả năng tiếp cận
HDFS có thể được truy cập từ các ứng dụng theo nhiều cách khác nhau. Về bản
chất, HDFS cung cấp API Java cho các ứng dụng sử dụng. Trình bao bọc ngôn ngữ
AC cho API Java này cũng có sẵn. Ngoài ra, trình duyệt HTTP cũng có thể được sử
dụng để duyệt các tệp của phiên bản HDFS. Công việc đang được tiến hành để hiển thị
HDFS thông qua giao thức WebDAV .
- vỏ FS
HDFS cho phép dữ liệu người dùng được tổ chức dưới dạng tệp và thư mục. Nó
cung cấp một giao diện dòng lệnh gọi là FS shell cho phép người dùng tương tác với
dữ liệu trong HDFS. Cú pháp của tập lệnh này tương tự như các shell khác (ví dụ:
bash, csh) mà người dùng đã quen thuộc. Dưới đây là một số cặp hành động/lệnh mẫu:
Hoạt động Chỉ huy

Tạo một thư mục có tên /foodir bin/hadoop dfs -mkdir/foodir

Xóa thư mục có tên /foodir bin/hadoop dfs -rmr /foodir

Xem nội dung của tệp có tên /foodir/myfile.txt bin/hadoop dfs -cat


/foodir/myfile.txt

FS shell được nhắm mục tiêu cho các ứng dụng cần ngôn ngữ kịch bản để
tương tác với dữ liệu được lưu trữ.
- DFSAdmin
Bộ lệnh DFSAdmin được sử dụng để quản trị cụm HDFS. Đây là những lệnh
chỉ được sử dụng bởi quản trị viên HDFS. Dưới đây là một số cặp hành động/lệnh
mẫu:
Hoạt động Chỉ huy

Đặt cụm ở Safemode bin/hadoop dfsadmin -safemode nhập

Tạo danh sách DataNodes bin/hadoop dfsadmin -báo cáo

(Các) DataNode giới thiệu hoặc ngừng hoạt động bin/hadoop dfsadmin -refreshNodes

- Giao diện trình duyệt


Cài đặt HDFS điển hình định cấu hình máy chủ web để hiển thị không gian tên
HDFS thông qua cổng TCP có thể định cấu hình. Điều này cho phép người dùng điều
hướng không gian tên HDFS và xem nội dung của các tệp của nó bằng trình duyệt
web.
 cải tạo không gian
- File Deletes và Undeletes
Khi một tệp bị xóa bởi người dùng hoặc ứng dụng, nó sẽ không bị xóa ngay lập
tức khỏi HDFS. Thay vào đó, trước tiên HDFS đổi tên nó thành một tệp trong thư

38
mục /trash . Tệp có thể được khôi phục nhanh chóng miễn là tệp vẫn nằm
trong /trash . Tệp vẫn nằm trong /trash trong một khoảng thời gian có thể định cấu
hình. Sau khi hết hạn sử dụng trong /trash , NameNode sẽ xóa tệp khỏi không gian
tên HDFS. Việc xóa một tệp làm cho các khối liên kết với tệp được giải phóng. Lưu ý
rằng có thể có độ trễ đáng kể về thời gian giữa thời điểm người dùng xóa tệp và thời
điểm tăng dung lượng trống tương ứng trong HDFS.
Người dùng có thể Phục hồi một tệp sau khi xóa nó miễn là nó vẫn nằm trong
thư mục /trash . Nếu người dùng muốn phục hồi một tệp mà họ đã xóa, họ có thể
điều hướng thư mục /trash và truy xuất tệp. Thư mục /trash chỉ chứa bản sao mới
nhất của tệp đã bị xóa. Thư mục /trash cũng giống như bất kỳ thư mục nào khác với
một tính năng đặc biệt: HDFS áp dụng các chính sách được chỉ định để tự động xóa
các tệp khỏi thư mục này. Chính sách mặc định hiện tại là xóa các tệp khỏi /trash đã
tồn tại hơn 6 giờ. Trong tương lai, chính sách này sẽ được cấu hình thông qua một giao
diện được xác định rõ ràng.
- Giảm nhân tố sao chép
Khi hệ số sao chép của tệp bị giảm, NameNode sẽ chọn các bản sao dư thừa có
thể bị xóa. Heartbeat tiếp theo chuyển thông tin này đến DataNode. DataNode sau đó
loại bỏ các khối tương ứng và không gian trống tương ứng xuất hiện trong cụm. Một
lần nữa, có thể có độ trễ về thời gian giữa việc hoàn thành lệnh gọi
API setReplication và sự xuất hiện của không gian trống trong cụm.
3.5. Cách thức hoạt động của Hadoop
Quá trình hoạt động của Hadoop gồm 3 giai đoạn:

Hình 3.7. Mô hình hoạt động của Hadoop


 Giai đoạn 1
Một user hay một ứng dụng sẽ submit một job lên hệ thống Hadoop (hadoop
job client) cùng với những yêu cầu xử lý các thông tin cơ bản gồm:

39
- Truyền dữ liệu lên máy chủ (input) để bắt đầu phân tán dữ liệu và xuất kết quả
(output).
- Các dữ liệu sẽ được xử lý thông qua 2 hàm chính là map và reduce. Trong đó,
Map có chức năng quét qua toàn bộ dữ liệu và phân tán chúng thành các dữ liệu con.
Còn Reduce có chức năng thu thập các dữ liệu còn lại và sắp xếp chúng.
- Các thiết lập cụ thể liên quan đến job thông qua các thông số được truyền vào.
 Giai đoạn 2
Hệ thống Hadoop tiến hành submit job bao gồm file jar, file thực thi và bắt đầu
thiết lập lịch làm việc (JobTracker) sau đó đưa job vào hàng đợi .
Sau khi tiếp nhận yêu cầu từ JobTracker, Máy chủ “mẹ” (master) sẽ phân chia
công việc cho các máy chủ “con” (slave). Các máy chủ con bắt đầu thực hiện các job
được giao và trả kết quả cho máy chủ “mẹ”.
 Giai đoạn 3
TaskTrackers sẽ được dùng để kiểm tra nhằm đảm bảo các MapReduce hoạt
động bình thường và kiểm tra kết quả đã nhận (quá trình output).
Khi “chạy Hadoop” có nghĩa là đang chạy một tập các trình nền hoặc các
chương trình thường trú tại các máy chủ khác nhau trên mạng của bạn. Những trình
nền đóng một vai trò cụ thể và có một số chỉ tồn tại trên một máy chủ nhất định hoặc
có thể tồn tại trên nhiều máy chủ.
Nhờ tính linh hoạt của hệ thống Hadoop, các công ty có thể mở rộng và điều
chỉnh quá trình phân tích dữ liệu khi hoạt động kinh doanh của họ mở rộng. Những
thông tin trên bài viết đã giúp cho bạn có cái nhìn tổng quan hơn về Hadoop, hy vọng
công cụ này sẽ giúp ích cho bạn trong việc xử lý khối lượng lớn dữ liệu.
3.6. Giải pháp Hadoop cho việc quản lý và khai thác Big data
- Mỗi framework đều có những điểm nổi bật riêng, trong khi Spark có ưu điểm
là nhanh, dễ sử dụng, còn Hadoop lại vượt trội về tính năng bảo mật mạnh mẽ, lưu trữ
lớn, xử lý hàng loạt (batch process) với chi phí thấp. Do đó, việc chọn framework nào
còn phải phụ thuộc vào đặc thù dự án. Tuy nhiên, cũng có thể kết hợp cả hai để tận
dụng triệt để ưu điểm của chúng và mang lại lợi ích cho mình.
- Cấu trúc của Hadoop: Hadoop được tạo thành từ các modules, mỗi modules
sẽ thực hiện một nhiệm vụ cụ thể cần thiết cho hệ thống máy tính đã được thiết kế để
phân tích Big Data.
- Hệ thống tệp phân tán là phương thức được máy tính sử dụng để lưu trữ dữ
liệu. Thông thường hệ thống tệp được xác định bởi hệ điều hành của máy tính. Tuy
nhiên, Hadoop sử dụng một hệ thống tệp của riêng biệt nằm trên hệ thống tệp của máy
tính chủ. Điều này có nghĩa Hadoop có thể được truy cập bằng bất kỳ máy tính nào và
chạy bất kỳ hệ điều hành nào.
- Sao chép dữ liệu là một phần quan trọng của định dạng HDFS vì nó đảm bảo
dữ liệu vẫn khả dụng nếu có lỗi nút hoặc phần cứng. Như đã đề cập trước đây, dữ liệu

40
được chia thành các khối và được sao chép trên nhiều nút trong cụm. Do đó, khi một
nút ngừng hoạt động, người dùng có thể truy cập dữ liệu trên nút đó từ các máy
khác. HDFS duy trì quá trình sao chép đều đặn.

Hình 3.8. Mô hình quản lý khai thác Big data


 Những phần mềm liên quan đến Hadoop
- Apache Hive: Là phần mềm kho dữ liệu chạy trên Hadoop và cho phép người
dùng làm việc với dữ liệu trong HDFS bằng cách sử dụng ngôn ngữ truy vấn giống
SQL, được gọi là HiveQL.
- Apache Impala: Là cơ sở dữ liệu phân tích có mã nguồn mở
- Apache Pig: là một công cụ thường được sử dụng với Hadoop để phân tích
các bộ Big Data được biểu diễn dưới dạng các luồng dữ liệu. Pig cho phép các hoạt
động như nối, lọc, sắp xếp, tải,..
- Apache Zookeeper: Là một dịch vụ tập trung cho phép xử lý phân tán có độ
tin cậy cao.
- Apache Sqoop ™: Là một công cụ được thiết kế để truyền số lượng lớn dữ
liệu một cách hiệu quả giữa Apache Hadoop và các kho dữ liệu có cấu trúc như hệ cơ
sở dữ liệu.
- Apache Oozie: Là một hệ thống lập lịch các trình quy trình làm việc để quản
lý những công việc trong Apache Hadoop.
3.8. Hadoop I/O
(Hadoop Input Output System)
Không giống như bất kỳ hệ thống con I/O nào, Hadoop cũng đi kèm với một
tập hợp các nguyên mẫu. Tất nhiên, những cân nhắc ban đầu này, mặc dù chung chung
về bản chất, đi cùng với hệ thống Hadoop IO cũng như với một số ý nghĩa đặc biệt đối
với nó. Hadoop xử lý nhiều terabyte bộ dữ liệu; một sự xem xét đặc biệt về những

41
nguyên mẫu này sẽ đưa ra ý tưởng về cách Hadoop xử lý dữ liệu đầu vào và đầu
ra. Bài viết này nhanh chóng lướt qua những điều cơ bản này để đưa ra một góc nhìn
về hệ thống đầu vào đầu ra Hadoop.
 Toàn vẹn dữ liệu
Tính toàn vẹn của dữ liệu có nghĩa là dữ liệu phải chính xác và nhất quán trong
tất cả các hoạt động lưu trữ, xử lý và truy xuất. Để đảm bảo rằng không có dữ liệu nào
bị mất hoặc bị hỏng trong quá trình lưu trữ và xử lý, Hadoop duy trì các ràng buộc
nghiêm ngặt về tính toàn vẹn của dữ liệu. Mọi hoạt động đọc/ghi xảy ra trong đĩa, hơn
nữa thông qua mạng dễ bị lỗi. Và, khối lượng dữ liệu mà Hadoop xử lý chỉ làm trầm
trọng thêm tình hình. Cách thông thường để phát hiện dữ liệu bị hỏng là thông qua
tổng kiểm tra. tổng kiểm trađược tính toán khi dữ liệu lần đầu tiên được đưa vào hệ
thống và được gửi qua kênh trong quá trình truy xuất. Đầu truy xuất tính toán lại tổng
kiểm tra và khớp với tổng kiểm tra nhận được. Nếu nó khớp chính xác thì dữ liệu được
coi là không có lỗi, nếu không thì dữ liệu đó có lỗi. Nhưng vấn đề là - điều gì sẽ xảy ra
nếu tổng kiểm tra được gửi bị hỏng? Điều này rất khó xảy ra vì nó là một dữ liệu nhỏ,
nhưng không phải là một khả năng không thể phủ nhận. Sử dụng đúng loại phần cứng
như bộ nhớ ECC có thể được sử dụng để giảm bớt tình trạng này.
Đây chỉ là phát hiện. Do đó, để sửa lỗi, một kỹ thuật khác được gọi là CRC
(Kiểm tra dự phòng theo chu kỳ) được sử dụng.
Hadoop còn tiến xa hơn và tạo tổng kiểm tra riêng cho mỗi 512 byte (mặc định)
dữ liệu. Vì CRC-32 chỉ có 4 byte nên chi phí lưu trữ không phải là vấn đề. Tất cả dữ
liệu nhập vào hệ thống được xác minh bởi các nút dữ liệu trước khi được chuyển tiếp
để lưu trữ hoặc xử lý thêm. Dữ liệu được gửi đến đường ống nút dữ liệu được xác
minh thông qua tổng kiểm tra và bất kỳ lỗi nào được tìm thấy sẽ được thông báo ngay
lập tức cho khách hàng với ChecksumException . Máy khách đọc từ nút dữ liệu cũng
trải qua quá trình khoan tương tự. Các nút dữ liệu duy trì nhật ký xác minh tổng kiểm
tra để theo dõi khối đã xác minh. Nhật ký được cập nhật bởi nút dữ liệu khi nhận được
tín hiệu xác minh khối thành công từ máy khách. Loại thống kê này giúp ngăn chặn
các đĩa xấu.
Ngoài ra, việc xác minh định kỳ trên kho lưu trữ khối được thực hiện với sự trợ
giúp của DataBlockScanner chạy cùng với chuỗi nút dữ liệu trong nền. Điều này bảo
vệ dữ liệu khỏi bị hỏng trong phương tiện lưu trữ vật lý.
Hadoop duy trì một bản sao hoặc bản sao của dữ liệu. Điều này được sử dụng
đặc biệt để khôi phục dữ liệu từ tham nhũng lớn. Khi máy khách phát hiện lỗi trong
khi đọc một khối, nó sẽ ngay lập tức báo cáo cho nút dữ liệu về khối xấu từ nút tên
trước khi ném ChecksumException . Sau đó, nút tên đánh dấu nó là một khối xấu và
lên lịch cho bất kỳ tham chiếu nào khác đến khối đó với các bản sao của nó. Bằng cách
này, bản sao được duy trì cùng với các bản sao khác và khối xấu được đánh dấu sẽ bị
xóa khỏi hệ thống.

42
Đối với mọi tệp được tạo trong Hadoop LocalFileSystem , một tệp ẩn có cùng
tên trong cùng thư mục có phần mở rộng .<filename>.crc được tạo. Tệp này duy trì
tổng kiểm tra của từng đoạn dữ liệu (512 byte) trong tệp. Việc duy trì siêu dữ liệu giúp
phát hiện lỗi đọc trước khi ném ChecksumException bởi LocalFileSystem .
 Nén
Hãy ghi nhớ khối lượng dữ liệu mà Hadoop xử lý, nén không phải là một điều
xa xỉ mà là một yêu cầu. Có nhiều lợi ích rõ ràng của việc nén tệp được Hadoop sử
dụng đúng cách. Nó tiết kiệm các yêu cầu lưu trữ và là khả năng phải có để tăng tốc độ
truyền dữ liệu qua mạng và đĩa. Có nhiều công cụ, kỹ thuật và thuật toán thường được
Hadoop sử dụng. Nhiều trong số chúng khá phổ biến và đã được sử dụng trong nén tệp
qua các thời đại. Ví dụ: gzip, bzip2, LZO, zip, v.v. thường được sử dụng.
 Tuần tự hóa
Quá trình biến các đối tượng có cấu trúc thành luồng byte được gọi là tuần tự
hóa . Điều này đặc biệt cần thiết để truyền dữ liệu qua mạng hoặc duy trì dữ liệu thô
trong đĩa. Deserialization chỉ là quá trình ngược lại, trong đó một luồng byte được
chuyển đổi thành một đối tượng có cấu trúc. Điều này đặc biệt cần thiết cho việc triển
khai đối tượng của các byte thô. Do đó, không có gì đáng ngạc nhiên khi điện toán
phân tán sử dụng điều này trong một vài lĩnh vực riêng biệt: giao tiếp giữa các quá
trình và tính bền vững của dữ liệu.
Hadoop sử dụng RPC (Cuộc gọi thủ tục từ xa) để thực hiện giao tiếp giữa các
quá trình giữa các nút. Do đó, giao thức RPC sử dụng quá trình tuần tự hóa và giải
tuần tự hóa để hiển thị một thông báo thành luồng byte và ngược lại và gửi thông báo
đó qua mạng. Tuy nhiên, quy trình phải đủ nhỏ gọn để sử dụng tốt nhất băng thông
mạng, cũng như nhanh, có thể tương tác và linh hoạt để đáp ứng các cập nhật giao
thức theo
thời gian.
Hadoop có định dạng tuần tự hóa nhỏ gọn và nhanh chóng của riêng
nó, Writables, mà các chương trình MapReduce sử dụng để tạo các loại khóa và giá trị.
 Cấu trúc dữ liệu của tệp
Có một số vùng chứa cấp cao xây dựng cấu trúc dữ liệu chuyên biệt trong
Hadoop để chứa các loại dữ liệu đặc biệt. Ví dụ: để duy trì nhật ký nhị phân, bộ
chứa SequenceFile cung cấp cấu trúc dữ liệu để duy trì các cặp khóa-giá trị nhị
phân. Sau đó, chúng tôi có thể sử dụng khóa, chẳng hạn như dấu thời gian được biểu
thị bằng LongWritable và giá trị bằng Writable, dùng để chỉ số lượng đã ghi.
Có một vùng chứa khác, một dẫn xuất được sắp xếp của SequenceFile, được gọi
là MapFile . Nó cung cấp một chỉ mục để tra cứu thuận tiện theo khóa.
Hai vùng chứa này có thể tương tác với nhau và có thể được chuyển đổi sang và
từ nhau.
 Phần kết luận

43
Đây chỉ là tổng quan nhanh về hệ thống đầu vào/đầu ra của Hadoop. Không khó
để hiểu hệ thống đầu vào/đầu ra Hadoop nếu một người có hiểu biết cơ bản về hệ
thống I/O nói chung. Hadoop chỉ cần thêm một ít nước trái cây vào nó để theo kịp bản
chất phân tán hoạt động ở quy mô dữ liệu khổng lồ. Đó là tất cả.

44
Chương 4. MÔ HÌNH LẬP TRÌNH MAPREDUCE

4.1. Giới thiệu về mô hình Mapreduce-MR


Mapreduce là một trong những thành phần quan trọng hàng đầu giúp nâng cao
sức mạnh của Hadoop.
 Khái niệm về MapReduce
MapReduce là mô hình được thiết kế độc quyền bởi Google, nó có khả năng lập
trình xử lý các tập dữ liệu lớn song song và phân tán thuật toán trên một cụm máy tính.
MapReduce trở thành một trong những thành ngữ tổng quát hóa trong thời gian
gần đây. 

MapReduce sẽ bao gồm những thủ tục sau: Thủ tục 1 Map() và 1 Reduce(). Thủ
tục Map() bao gồm lọc (filter) và phân loại (sort) trên dữ liệu khi thủ tục khi thủ tục
Reduce() thực hiện quá trình tổng hợp dữ liệu. Đây là mô hình dựa vào các khái niệm
biển đối của bản đồ và reduce những chức năng lập trình theo hướng chức năng. Thư
viện của thủ tục Map() và Reduce() sẽ được viết bằng nhiều loại ngôn ngữ khác nhau.
Thủ tục được cài đặt miễn phí và được sử dụng phổ biến nhất là là Apache Hadoop.
 Các ưu điểm nổi bật của MapReduce
Mapreduce được ưa chuộng sử dụng như vậy bởi nó sở hữu nhiều ưu điểm vượt
trội như sau:
- MapReduce có khả năng xử lý dễ dàng mọi bài toán có lượng dữ liệu lớn nhờ
khả năng tác vụ phân tích và tính toán phức tạp. Nó có thể xử lý nhanh chóng cho ra
kết quả dễ dàng chỉ trong khoảng thời gian ngắn.
- Mapreduce có khả năng chạy song song trên các máy có sự phân tán  khác
nhau. Với khả năng hoạt động độc lập kết hợp  phân tán, xử lý các lỗi kỹ thuật để
mang lại nhiều hiệu quả cho toàn hệ thống. 
- MapRedue có khả năng thực hiện trên nhiều nguồn ngôn ngữ lập trình khác
nhau như: Java,C/ C++, Python, Perl, Ruby,... tương ứng với nó là những thư viện hỗ
trợ. 
- Như bạn đã biết, mã độc trên internet ngày càng nhiều hơn nên việc xử lý
những đoạn mã độc này cũng trở nên rất phức tạp và tốn kém nhiều thời gian. Chính vì
vậy, các ứng dụng MapReduce dần hướng đến quan tâm nhiều hơn cho việc phát hiện
các mã độc để có thể xử lý chúng. Nhờ vậy, hệ thống mới có thể vận hành trơn tru và
được bảo mật nhất.

45
Hình 4.1. Mapreduce có khả năng xử lý nhanh chóng lượng dữ liệu lớn
4.2. Các hàm chính của MapReduce
MapReduce có 2 hàm chính là Map() và Reduce(), đây là 2 hàm đã được định
nghĩa bởi người dùng và nó cũng chính là 2 giai đoạn liên tiếp trong quá trình xử lý dữ
liệu của MapReduce. Nhiệm vụ cụ thể của từng hàm như sau: 
- Hàm Map(): Có nhiệm vụ nhận Input cho các cặp giá trị/  khóa và output
chính là tập những cặp giá trị/khóa trung gian. Sau đó, chỉ cần ghi xuống đĩa cứng và
tiến hành thông báo cho các hàm Reduce() để trực tiếp nhận dữ liệu. 
- Hàm Reduce(): Có nhiệm vụ tiếp nhận từ khóa trung gian và những giá trị
tương ứng với lượng từ khóa đó. Sau đó, tiến hành ghép chúng lại để có thể tạo thành
một tập khóa khác nhau. Các cặp khóa/giá trị này thường sẽ thông qua một con trỏ vị
trí để đưa vào các hàm reduce. Quá trình này sẽ giúp cho lập trình viên quản lý dễ
dàng hơn một lượng danh sách cũng như  phân bổ giá trị sao cho  phù hợp nhất với bộ
nhớ
hệ thống. 
- Ở giữa Map và Reduce thì còn 1 bước trung gian đó chính là Shuffle. Sau khi
Map hoàn thành  xong công việc của mình thì Shuffle sẽ làm nhiệm vụ chính là thu
thập cũng như tổng hợp từ khóa/giá trị trung gian đã được map sinh ra trước đó rồi
chuyển qua cho Reduce tiếp tục xử lý.

46
Hình 4.2. Các hàm của Mapreduce 
4.3. Hoạt động của MapReduce
 Nguyên tắc hoạt động 
Mapreduce hoạt động dựa vào nguyên tắc chính là "Chia để trị", như sau:
- Phân chia các dữ liệu cần xử lý thành nhiều phần nhỏ trước khi thực hiện. 
- Xử lý các vấn đề nhỏ theo phương thức song song trên các máy tính rồi phân
tán hoạt động theo hướng độc lập.
- Tiến hành tổng hợp những kết quả thu được để đề ra được kết quả sau cùng. 

 Các bước hoạt động của MapReduce


- Bước 1: Tiến hành chuẩn bị các dữ liệu đầu vào để cho Map() có thể xử lý.
- Bước 2: Lập trình viên thực thi các mã Map() để xử  lý. 
- Bước 3: Tiến hành trộn lẫn các dữ liệu được xuất ra bởi Map() vào trong
Reduce Processor
- Bước 4: Tiến hành thực thi tiếp mã Reduce() để có thể xử lý tiếp các dữ liệu
cần thiết.  
- Bước 5: Thực hiện tạo các dữ liệu xuất ra cuối cùng. 

 Luồng dữ liệu nền tảng của Mapreduce


- Input Reader
- Map Function
- Partition Function
- Compare Function
- Reduce Function
- Output Writer

47
Hình 4.3. Ví dụ về tiến trình hoạt động của Mapreduce
 Ví dụ cụ thể về hoạt động của MapReduce
- Theo sơ đồ phía trên thì người dùng sẽ thực hiện nhập dữ liệu vào, các dữ liệu
đều sẽ được chia nhỏ từ 16MB đến 64MB. Ngay sau đó, thì hệ thống sẽ thực hiện khởi
động việc sao chép trên các clusters. 
- Hầu hết các máy đều có thể thực hiện xử lý các dữ liệu bao gồm như:  master
và worker. Trong số đó, máy master có nhiệm vụ điều phối cho những hoạt động bên
trong quá trình thực hiện. Các máy worker sau khi đã nhận được dữ liệu thì sẽ tiến
hành những nhiệm vụ Map và Reduce. Khi worker đã làm việc xong thì các kết quả
đầu ra sẽ xuất hiện các cặp (key và value, các khóa và giá trị) trung gian, những cặp
này sẽ được lưu tạm vào bộ nhớ đệm của máy bên trong hệ thống. 
- Nếu như Map đã thành công, thì các worker sẽ thực hiện nhiệm vụ tiếp theo là
thực hiện phân chia máy trung gian thành những vùng khác nhau. Sau đó, lưu chúng
xuống đĩa rồi thông báo kết quả ngược lại cũng như vị trí lưu trữ cho máy master biết. 
- Khi đã nhận được thông tin từ worker thì các máy master có thể gán các giá trị
trung và vị trí của tệp dữ liệu đó cho máy thực hiện công việc Reduce. Hầu hết, các
máy sẽ được nhận nhiệm vụ xử lý các hàm Reduce rồi xử lý các key, giá trị để có thể
đưa ra kết quả cuối cùng. 
- Khi quá trình MapReduce đã được hoàn tất thì các máy master đều sẽ được
kích hoạt chức năng thông báo cho lập trình viên biết. Khi kết quả đầu ra đã được lưu

48
trữ trên hệ thống thì người dùng có thể dễ dàng sử dụng chúng cũng như quản lý và
sao lưu dễ dàng hơn. 
4.4. Cách thức phát triển một ứng dụng MR
 Một số công việc có thể sử dụng MapReduce
MapReduce được ứng dụng cho việc thống kê hàng loạt những số liệu cụ thể
như sau: 
Thực hiện thống kê cho các từ khóa được xuất hiện ở trong các tài liệu, bài viết,
văn bản hoặc được cập nhật trên hệ thống fanpage, website,…
Khi số lượng các bài viết đã được thống kê thì tài liệu sẽ có chứa các từ khóa
đó. 
Sẽ có thể thống kê được những câu lệnh match, pattern bên trong các tài liệu đó
Khi thống kê được số lượng các URLs có xuất hiện bên trong một webpages. 
Sẽ thống kê được các lượt truy cập của khách hàng sao cho nó có thể tương ứng
với các URLs.
Sẽ thống kê được tất cả từ khóa có trên website, hostname,…
Những kiến thức mà ITNavi chia sẻ phía trên thì chúng ta đã hiểu được phần
nào tầm quan trọng của Mapreduce. Để có thể khẳng định được sức mạnh quan trọng
của Mapreduce với những ưu điểm vượt trội nhất của Mapreduce chúng ta tìm hiểu ở
phần tiếp theo. 
Phía trên, là mọi mặt thông tin đưa ra để lý giải Mapreduce là gì cũng như
những thông tin khác về MapReduce.
4.5. Xây dựng ứng dụng phân tích Big data trên các tập dữ liệu mẫu có sẵn
Trước tiên, nếu muốn giải quyết các bài toán Big Data thì bạn phải biết những
ngôn ngữ lập trình, Python/Java. Sau khi học được ngôn ngữ lập trình, tiếp theo bạn
hãy tìm hiểu các công nghệ sử dụng cho Big Data. Hadoop, Spark là một số sông nghệ
dữ liệu lớn. Hadoop sẽ là một sự lựa chọn tối ưu nhất khi nó cung cấp cho bạn nhiều
nền tảng hơn về mô hình lập trình MapReduce.

49
Hình 4.4. Một số ngôn ngữ lập trình
 Những kỹ thuật cơ bản Big Data
Thuật toán MapReduce là một kĩ thuật xử lý và mô hình chương trình cho tính
toán phân tán dựa trên ngôn ngữ lập trình Java.
Hai nhiệm vụ quan trọng của thuật toán MapReduce là:
- Map tức là bản đồ
- Reduce tức là giảm
Map sẽ lấy một tập hợp dữ liệu và chuyển đổi tập dữ liệu đó thành một tập hợp
dữ liệu khác, trong đó các phần tử riêng lẻ sẽ được chia thành các bộ dữ liệu (cặp
khóa/giá trị). Giảm tác vụ, đó là lấy đầu ra từ bản đồ làm đầu vào và kết hợp các bộ dữ
liệu đó thành một bộ dữ liệu nhỏ hơn. Điều đó cho thấy công việc bản đồ luôn được
thực hiện trước tác vụ rút gọn. MapReduce có một số ưu điểm chính như là có thể dễ
dàng mở rộng được quy mô xử lý dữ liệu trên nhiều nút tính toán. Các nguyên hàm xử
lý dữ liệu được gọi là trình khử và trình ánh xạ theo mô hình MapReduce. Với khả
năng mở rộng này, mô hình MapReduce là điều đã thu hút nhiều lập trình viên sử
dụng.
 Sơ lược về mô hình lập trình MapReduce
Giai đoạn bản đồ, giai đoạn xáo trộn và giai đoạn giảm là 3 giai đoạn được thực
thi trong chương trình MapReduce.
- Giai đoạn Map: là giai đoạn mà công việc ánh xạ hoặc ánh xạ là xử lý những
dữ liệu đầu vào. Dữ liệu đầu vào ở dạng thư mục hoặc dạng tệp và chúng được lưu trữ
trong hệ thống tệp Hadoop. Các tệp tin đầu vào sẽ được chuyển đến dòng chức năng
phản xạ theo dòng. Trình ánh xạ sẽ xử lý dữ liệu vào ra một số lượng nhỏ dữ liệu.

50
- Giai đoạn Reduce: Đây là giai đoạn kết hợp giữa giai đoạn Shuffle và giai
đoạn giảm. Xử lý dữ liệu xuất phát từ trình ánh xạ là công việc Reducer sườn. Sau khi
xử lý thì nó sẽ tạo ra một bộ đầu ra mới, sẽ được lữu trữ trong hệ thống tệp Hadoop.

Hình 4.5. Mô hình lập trình MapReduce trong big data


Hadoop gửi Map và giảm các tác vụ đến các máy chủ phù hợp trong cụm trong
công việc MapReduce. Khung quản lý tất cả những chi tiết truyền dữ liệu, ví dụ như
phát hành tác vụ, xác minh hoàn thành nhiệm vụ và sao chép những dữ liệu xung
quanh cụm giữa các nút. Để giảm lưu lượng mạng, hầu hết các tính toán sẽ diễn ra trên
các nút có dữ liệu trên các đĩa cục bộ. Hoàn thạnh những nhiệm vụ nhất định, cụm thu
thập và giảm dữ liệu sẽ tạo ra một kết quả phù hợp, từ đó gửi lại cho máy chủ Hadoop.

51
Chương 5. APACHE SPARK CHO HỆ THỐNG BIG DATA

5.1. Tổng quan về Apache Spark


Apache Spark là một phần của hệ thống Hadoop, Apache Spark là framework
tính toán cụm nguồn mở được sử dụng làm công cụ xử lý Big data trong Hadoop.
Spark đã trở thành một trong những framework xử lý Big data quan trọng và có thế
được triến khai theo nhiều cách khác nhau. Nó cung cấp các ràng buộc nền tảng đối
với Java, Scala, Python (đặc biệt là Anaconda Python distro) và ngôn ngữ lập trình R
(R đặc biệt phù hợp với Big data) và hỗ trợ SQL, streaming data, machine learning và
xử lý đồ thị.
Spark là một công cụ xử lý dữ liệu phân tán chung được xây dựng cho tốc độ,
tính dễ sử dụng và tính linh hoạt. Sự kết hợp của ba thuộc tính này là điều khiến Spark
trở nên phổ biến và được áp dụng rộng rãi trong ngành.
Trang web Apache Spark tuyên bố nó có thể chạy một công việc xử lý dữ liệu
nhất định nhanh hơn tới 100 lần so với Hadoop MapReduce. Trên thực tế, vào năm
2014, Spark đã giành chiến thắng trong cuộc thi Daytona GraySort, đây là tiêu chuẩn
ngành để sắp xếp 100TB dữ liệu (một nghìn tỷ bản ghi). Đệ trình từ Databricks tuyên
bố Spark có thể sắp xếp 100TB dữ liệu nhanh hơn ba lần và sử dụng tài nguyên ít hơn
mười lần so với kỷ lục thế giới trước đó do Hadoop MapReduce thiết lập.
Kể từ khi bắt đầu dự án Spark, tính dễ sử dụng là một trong những trọng tâm
chính của những người tạo Spark. Nó cung cấp hơn 80 toán tử xử lý dữ liệu cấp cao,
thường cần thiết để giúp các nhà phát triển, nhà khoa học dữ liệu và nhà phân tích dữ
liệu dễ dàng xây dựng tất cả các loại ứng dụng dữ liệu thú vị. Ngoài ra, các toán tử này
có sẵn bằng nhiều ngôn ngữ, cụ thể là Scala, Java, Python và R. Các kỹ sư phần mềm,
nhà khoa học dữ liệu và nhà phân tích dữ liệu có thể chọn và chọn ngôn ngữ yêu thích
của họ để giải quyết các vấn đề xử lý dữ liệu quy mô lớn với Spark.
Về tính linh hoạt, Spark cung cấp một ngăn xếp xử lý dữ liệu thống nhất duy
nhất có thể được sử dụng để giải quyết nhiều loại khối lượng công việc xử lý dữ liệu,
bao gồm xử lý hàng loạt, truy vấn tương tác, xử lý lặp cần thiết cho thuật toán học máy
và xử lý truyền trực tuyến theo thời gian thực để trích xuất dữ liệu có thể thực hiện
được thông tin chi tiết gần với thời gian thực. Trước khi có Spark, mỗi loại khối lượng
công việc này yêu cầu một giải pháp và công nghệ khác nhau. Giờ đây, các công ty chỉ
có thể tận dụng Spark cho hầu hết các nhu cầu xử lý dữ liệu của họ. Sử dụng một ngăn
xếp công nghệ duy nhất sẽ giúp giảm đáng kể chi phí vận hành và nguồn lực.
Một hệ sinh thái dữ liệu lớn bao gồm nhiều phần công nghệ bao gồm một công
cụ lưu trữ phân tán có tên là HDFS, một hệ thống quản lý cụm để quản lý hiệu quả một
cụm máy và các định dạng tệp khác nhau để lưu trữ một lượng lớn dữ liệu hiệu quả ở
định dạng nhị phân và cột. Spark tích hợp thực sự tốt với hệ sinh thái dữ liệu lớn. Đây
là một lý do khác khiến việc áp dụng Spark đang phát triển với tốc độ rất nhanh.

52
Một điều thực sự thú vị khác về Spark là nó là mã nguồn mở; do đó, bất kỳ ai
cũng có thể tải xuống mã nguồn để kiểm tra mã, để tìm ra cách triển khai một tính
năng nhất định hoặc để mở rộng các chức năng của nó. Trong một số trường hợp, nó
có thể giúp giảm đáng kể thời gian gỡ lỗi sự cố.
- Lịch sử phát triển Spark: Spark khởi đầu là một dự án nghiên cứu tại Berkeley
AMPLab vào năm 2009. Vào thời điểm đó, các nhà nghiên cứu của dự án này đã quan
sát thấy sự kém hiệu quả của khung Hadoop MapReduce trong việc xử lý các trường
hợp sử dụng xử lý dữ liệu tương tác và lặp lại, vì vậy họ đã tìm ra cách khắc phục
những điểm không hiệu quả đó bằng cách giới thiệu các ý tưởng như tính toán trong
bộ nhớ và cách hiệu quả để xử lý khôi phục lỗi. Sau khi dự án nghiên cứu này được
chứng minh là một giải pháp khả thi vượt trội so với MapReduce, nó đã được mã
nguồn mở vào năm 2010 và trở thành dự án cấp cao nhất của Apache vào năm 2013.
Một nhóm các nhà nghiên cứu làm việc trong dự án nghiên cứu này đã cùng nhau
thành lập một công ty có tên là Databricks; họ đã huy động được hơn 43 triệu đô la
vào năm 2013. Databricks là người quản lý thương mại chính đằng sau Spark. Vào
năm 2015, IBM đã công bố khoản đầu tư lớn vào việc xây dựng trung tâm công nghệ
Spark để phát triển Apache Spark bằng cách hợp tác chặt chẽ với cộng đồng nguồn mở
và xây dựng Spark thành cốt lõi của nền tảng phân tích và thương mại của công ty.
Kể từ khi bắt đầu, dự án mã nguồn mở Spark đã là một dự án tích cực với một
cộng đồng sôi nổi. Số lượng người đóng góp đã tăng lên hơn 1.000 vào năm 2016 và
có hơn 200.000 cuộc gặp gỡ Apache Spark. Trên thực tế, số lượng người đóng góp cho
Apache Spark đã vượt quá số lượng người đóng góp cho một trong những dự án mã
nguồn mở phổ biến nhất có tên là Apache Hadoop. Hiện tại Spark nổi tiếng đến mức
nó có hội nghị thượng đỉnh riêng gọi là Spark Summit, được tổ chức hàng năm ở Bắc
Mỹ và Châu Âu. Số người tham dự hội nghị thượng đỉnh đã tăng gấp đôi mỗi năm kể
từ khi thành lập.
Những người tạo ra Spark đã chọn ngôn ngữ lập trình Scala cho dự án của họ vì
sự kết hợp giữa tính đồng nhất của Scala và kiểu gõ tĩnh. Giờ đây, Spark được coi là
một trong những ứng dụng lớn nhất được viết bằng Scala và sự phổ biến của nó chắc
chắn đã giúp Scala trở thành ngôn ngữ lập trình chính thống.
5.2. Các thành phần của Apache Spark
Các thành phần cốt lõi khác nhau trong Spark bao gồm:
- Spark clusters
- The resource management system
- Spark applications
- Spark drivers
- Spark executors
5.2.1. Spark Clusters
Spark về cơ bản là một hệ thống phân tán được thiết kế để xử lý một lượng lớn
dữ liệu một cách hiệu quả và nhanh chóng. Hệ thống phân tán này thường được triển

53
khai trên một tập hợp các máy, được gọi là cụm Spark . Kích thước cụm có thể nhỏ
bằng một vài máy hoặc lớn bằng hàng nghìn máy. Cụm Spark được công bố rộng rãi
nhất thế giới với hơn 8.000 máy. Để quản lý hiệu quả và thông minh một bộ sưu tập
máy móc, các công ty dựa vào hệ thống quản lý tài nguyên như Apache YARN hoặc
Apache Mesos. Hai thành phần chính trong một hệ thống quản lý tài nguyên điển hình
là trình quản lý cụm và công nhân . Trình quản lý cụm biết vị trí của các công nhân, họ
có bao nhiêu bộ nhớ và số lượng lõi CPU mà mỗi công nhân có. Một trong những
trách nhiệm chính của người quản lý cụm là sắp xếp công việc bằng cách phân công
nó cho từng công nhân. Mỗi công nhân cung cấp tài nguyên (bộ nhớ, CPU,... ) cho
trình quản lý cụm và thực hiện công việc được giao. Một ví dụ về loại công việc là
khởi chạy một quy trình cụ thể và theo dõi tình trạng của nó. Spark được thiết kế để dễ
dàng tương tác với các hệ thống này. Hầu hết các công ty đã áp dụng công nghệ dữ
liệu lớn trong những năm gần đây thường đã có cụm YARN để chạy các công việc
MapReduce hoặc các khung xử lý dữ liệu khác như Apache Pig hoặc Apache Hive.
5.2.2. The resource management system
(The resource management system: Hệ thống quản lý tài nguyên)
Các công ty khởi nghiệp áp dụng hoàn toàn Spark chỉ có thể sử dụng trình quản
lý cụm Spark sẵn có để quản lý một bộ máy chuyên dụng để thực hiện xử lý dữ liệu
bằng Spark. Hình 5.1 mô tả kiểu thiết lập này.

Hình 5.1. Tương tác giữa ứng dụng Spark và trình quản lý cụm
5.2.3. Spark applications
Một ứng dụng Spark bao gồm hai phần. Đầu tiên là logic xử lý dữ liệu ứng
dụng được biểu thị bằng API Spark và cái còn lại là trình điều khiển Spark. Logic xử
lý dữ liệu của ứng dụng có thể đơn giản như một vài dòng mã để thực hiện một vài
thao tác xử lý dữ liệu hoặc có thể phức tạp như đào tạo một mô hình máy học lớn đòi
hỏi nhiều lần lặp lại và có thể chạy trong nhiều giờ để hoàn thành. Trình điều khiển
Spark là điều phối viên trung tâm của ứng dụng Spark và nó tương tác với trình quản
lý cụm để tìm ra máy nào sẽ chạy logic xử lý dữ liệu. Đối với mỗi một trong những
máy đó, trình điều khiển Spark yêu cầu trình quản lý cụm khởi chạy một quy trình có
tên là trình thực thi Spark . Một công việc quan trọng khác của trình điều khiển Spark

54
là quản lý và phân phối các tác vụ Spark cho từng người thực thi thay mặt cho ứng
dụng. Nếu logic xử lý dữ liệu yêu cầu trình điều khiển Spark hiển thị kết quả được tính
toán cho người dùng, thì trình điều khiển này sẽ phối hợp với từng người thực thi
Spark để thu thập kết quả được tính toán và hợp nhất chúng lại với nhau. Điểm vào
ứng dụng Spark là thông qua một lớp có tên là SparkSession , lớp này cung cấp các
phương tiện để thiết lập cấu hình cũng như API để thể hiện logic xử lý dữ liệu.
5.2.4. Spark drivers
(Spark drivers: Trình điều khiển Spark)
Mỗi bộ thực thi Spark là một quy trình JVM và được phân bổ riêng cho một
ứng dụng Spark cụ thể. Đây là một quyết định thiết kế có ý thức để tránh chia sẻ trình
thực thi Spark giữa nhiều ứng dụng Spark nhằm cách ly chúng với nhau để một ứng
dụng Spark hoạt động kém sẽ không ảnh hưởng đến các ứng dụng Spark khác. Thời
gian tồn tại của trình thực thi Spark là thời lượng của ứng dụng Spark, có thể chạy
trong vài phút hoặc vài ngày. Vì các ứng dụng Spark đang chạy trong các bộ thực thi
Spark riêng biệt nên việc chia sẻ dữ liệu giữa chúng sẽ yêu cầu ghi dữ liệu vào hệ
thống lưu trữ bên ngoài như HDFS.
Như được mô tả trong Hình 5.2, Spark sử dụng kiến trúc chính-phụ, trong đó
trình điều khiển Spark là chủ và trình thực thi Spark là phục vụ. Mỗi thành phần này
chạy như một quy trình độc lập trên cụm Spark. Ứng dụng Spark bao gồm một và chỉ
một trình điều khiển Spark và một hoặc nhiều trình thực thi Spark. Đóng vai nô lệ, mỗi
người thực thi Spark thực hiện những gì nó được bảo, đó là thực thi logic xử lý dữ liệu
dưới dạng tác vụ. Mỗi tác vụ được thực thi trên một lõi CPU riêng biệt. Đây là cách
Spark có thể tăng tốc độ xử lý một lượng lớn dữ liệu bằng cách xử lý song song. Ngoài
việc thực thi các tác vụ được giao, mỗi người thực thi Spark có trách nhiệm lưu vào bộ
đệm một phần dữ liệu trong bộ nhớ và/hoặc trên đĩa khi logic ứng dụng yêu cầu làm
như vậy.

Hình 5.2. Một cụm Spark nhỏ với ba người thi hành
Tại thời điểm khởi chạy ứng dụng Spark, bạn có thể yêu cầu ứng dụng cần bao
nhiêu bộ thực thi Spark cũng như dung lượng bộ nhớ và số lõi CPU mà mỗi bộ thực
thi nên có. Việc tìm ra số lượng bộ thực thi Spark thích hợp, dung lượng bộ nhớ và số
lượng CPU yêu cầu một số hiểu biết về lượng dữ liệu sẽ được xử lý, độ phức tạp của

55
logic xử lý dữ liệu và thời lượng mong muốn mà ứng dụng Spark nên hoàn thành logic
xử lý.

56
5.2.5. Spark executors
(Spark executors: Thực thi Spark)
 Giới thiệu về Spark Executor
Có một tác nhân phân phối được gọi là spark executor chịu trách nhiệm thực
hiện các tác vụ đã cho. Thực thi trong Spark là các nút thợ (worker nodes) giúp chạy
các tác vụ riêng lẻ bằng cách phụ trách một công việc Spark nhất định. Chúng được
khởi chạy khi bắt đầu các ứng dụng Spark và ngay khi tác vụ được chạy, kết quả sẽ
ngay lập tức được gửi đến trình điều khiển. Bộ nhớ trong bộ lưu trữ được cung cấp do
người thực thi cung cấp cho Spark RDD và được lưu vào bộ nhớ cache bởi các chương
trình của người dùng có trình quản lý khối. Chạy ứng dụng để có tuổi thọ hoàn chỉnh,
theo đó phân bổ tĩnh của Spark thực thi được đề dẫn.
 Hoạt động của Apache Spark Executor
Thực thi Spark bắt đầu lại một ứng dụng mỗi khi nó nhận được một sự
kiện. Spark trên YARN được sử dụng trong khi sử dụng trình thực thi này và điều này
thường không tương thích với Mesos. Việc sử dụng trình thực thi Spark có thể được
thực hiện theo bất kỳ cách nào như khi bắt đầu chạy các ứng dụng Sparkafter MapR
FS, Hadoop FS hoặc tệp đóng đích Amazon S#. Mỗi khi đích Hadoop FS đóng một
tệp, ứng dụng spark mỗi lần có thể chuyển đổi các tệp Arvo thành Parquet. Trong một
hệ thống bên ngoài, ứng dụng Spark được khởi động. Nó không đợi ứng dụng giám sát
cũng không hoàn thành. Xử lý bổ sung được thực hiện sau khi gửi ứng dụng thành
công.

Hình 5.3. Sơ đồ hoạt động của Apache Spark Executor


Chế độ máy khách hoặc cụm có thể được sử dụng để chạy một ứng dụng bằng
nó. Nhưng chế độ Máy khách chỉ được sử dụng khi việc sử dụng tài nguyên không
phải là một thỏa thuận được xem xét. Đảm bảo bạn thực hiện điều kiện tiên quyết của

57
tác vụ trước khi sử dụng trình thực thi Spark. Số lượng nút worker phải được chỉ định
trước khi định cấu hình trình thực thi. Kích hoạt phân bổ bộ nhớ động cũng có thể là
một tùy chọn bằng cách chỉ định số nút tối đa và tối thiểu cần thiết trong phạm
vi. Ngoài ra, bằng cách chỉ định dung lượng bộ nhớ tối thiểu cần thiết, được sử dụng
bởi trình điều khiển ứng dụng và trình thực thi, người ta có thể chuyển các thuộc tính
trình quản lý cụm bổ sung cho nó.
Chỉ định các thư mục Spark và trang chủ Java tùy chỉnh cũng như người dùng
proxy của Hadoop và cả thông tin đăng nhập Kerberos. Có thể chỉ định ngôn ngữ được
sử dụng để viết ứng dụng và sau đó là các thuộc tính theo ngôn ngữ cụ thể được xác
định. Người thực thi có thể tạo sự kiện cho luồng sự kiện biến thể cũng có thể được
định cấu hình.
 Điều kiện tạo Spark Executor
Khi nhậ n đượ c thông báo: RegisteredExecutor, bởi:
RawGrainedExecutorBackend, và điều này chỉ xả y ra trong YARN.
Khi khai bá o MesosExecutorBackend trong Mesos trong Spark.
Đố i vớ i chế độ cụ c bộ , mộ t điểm cuố i cụ c bộ sẽ đượ c tạ o.
- Code:
at org.apache.spark.
SparkContext$Sanonfun$assertNoOtherContextIsRunning$2.app
l Que
at org.apache.spark.SparkContext
anonfun$assertNoOtherContextIsRunning$2.apply(SparkContex
t.scala:245
at scala.Option.foreach
at org.apache.spark.SparkContext.assertNoOtherContext
IsRunning
at org.apache.spark.SparkContext.mark Partially
Constructed
at org.apache.spark. SparkContext.<init>
scala
sc.stop
val conf = new SparkConf.
setAppName("testing").
setMaster("yarn").
set("spark.executor.instances", "2") conf:
org.apache.spark.SparkConf - org.apache.spark.

58
SparkConfe69d7b1f9
val sc = new SparkContext(conf) sc: org.apache.spark.
SparkContext - org.apache.spark. SparkContext e31b4e1
sc.stop
scala import org.apache.spark.sql.SparkSession
SparkSession SparkSession Extensions
import org.apache.spark.sql.SparkSession import
org.apache.spark.sql.SparkSession
scala val spark Spark SparkConf SparkContext SparkSession
scala val spark SparkSession.
Builder clearActiveSession getactiveSession builder clear
Default Session getDefault Session
spark = SparkSession.builder.
appName config enableHiveSupport getorCreate
val spark
SparkSession.builder. // hit tab
val spark =
SparkSession.builder.config("spark.executor.instances",
"2".
master("yarn").
appName("testing).
val spark =
SparkSession.builder.config("spark.executor.instances",
"2").
master("yarn").
appName("testing").
getOrCreate
- Đầu ra:

59
Hình 5.4. Kết quả tạo Spark Executor
 Ưu điểm và cách sử dụng cần lưu ý về Apache Executor trong Spark
1. Mỗ i ứ ng dụ ng có quy trình thự c thi riêng trong khi ứ ng dụ ng đang chạ y
trong mộ t tác vụ củ a nhiề u luồ ng.
2. Đố i vớ i trình quả n lý cụ m bên dướ i, trình thự c thi spark là bấ t khả tri. nghĩa
là miễn là xong quy trình, giao tiếp vớ i nhau là xong.
3. Chấ p nhậ n các kết nố i đế n từ tấ t cả nhữ ng ngườ i thự c thi khác.
4. Ngườ i thi hành nên chạ y gầ n các nút worker hơn vì trình điều khiển lên lịch
các tác vụ trên cụ m. Chúng có thể đượ c ưu tiên chạ y trong cùng mộ t mạ ng cụ c bộ .
 Kết luận
Có thể nói rằ ng các trình thự c thi Spark trong Apache Spark có thể nâng cao
hiệu suấ t củ a hệ thố ng.
5.3.
5.4. Lập trình với RDD
5.5. Phát triển ứng dụng lưu trữ và phân tích dữ liệu lớn

60
TÀI LIỆU THAM KHẢO

[1] - By Krishna Rungta (2019), Learn Hadoop in 1 Day.


[2] - Apache HBase ™ Reference Guide, Introduction to Basic Schema Design by
Amandeep Khurana, Version 1.4.11.
[3] - Tom White (2015), Hadoop The Definitive Guide. Published by O’ Reilly Media,
Inc., Gravenstein Highway North, Sebastopol, CA 95472.
[4] - Holden Karau Andy Konwinski Matei Zaharia Patrick Wendell (2015), Learning
Spark. Published by O’ Reilly Media, Inc., 1005 Gravenstein Highway North,
Sebastopol, CA 95472.

61
MỤC LỤC

LỜI NÓI ĐẦU............................................................................................................... 1


Chương 1. GIỚI THIỆU VỀ BIG DATA......................................................................2
1.1. Khái niệm Big data.............................................................................................2
1.2. Nguồn gốc và sự phát triển của Big Data............................................................8
1.3. Các đặc trưng của Big data.................................................................................8
1.4. Các thành phần Big data...................................................................................10
1.4.1. Quản lý dữ liệu...........................................................................................11
1.4.2. Phân tích dữ liệu........................................................................................11
1.4.3. Sử dụng dữ liệu..........................................................................................11
1.4.4. Cơ sở hạ tầng cần thiết để hỗ trợ Big Data...........................................12
Chương 2. HBASE CHO HỆ THỐNG BIG DATA....................................................14
2.1. Giới thiệu về Hbase...........................................................................................14
2.2. Các tính năng của Hbase...................................................................................14
2.3. Mô hình của Hbase...........................................................................................15
2.4. Kiến trúc Hbase................................................................................................17
2.4.1. Kiến trúc HBase: Các thành phần của kiến trúc HBase..............................17
2.4.2. Kiến trúc HBase: Khu vực.........................................................................17
2.4.3. Kiến trúc HBase: HMaster.........................................................................18
2.4.4. Kiến trúc HBase: ZooKeeper - Cơ chế điều phối.......................................18
2.4.5. Kiến trúc HBase: Bảng Meta.....................................................................19
2.4.6. Kiến trúc HBase: Các thành phần của Máy chủ vùng................................19
2.6.7. Kiến trúc HBase: Tìm kiếm, khởi tạo trong HBase....................................20
2.6.8. Kiến trúc HBase: Cơ chế ghi HBase..........................................................20
2.5. Cách thức lưu trữ và tìm kiếm của Hbase.........................................................21
2.5.1. Cách thức lưu trữ.......................................................................................21
2.5.2. Cách thức tìm kiếm....................................................................................21
Chương 3. APACHE HADOOP CHO HỆ THỐNG BIG DATA................................22
3.1. Giới thiệu về mô hình GFS...............................................................................22
3.2. Lịch sử Hadoop.................................................................................................25
3.3. Đặc trưng của Hadoop......................................................................................26

i
3.4. Cấu trúc của Hadoop.........................................................................................26
3.4.1. Hadoop Common.......................................................................................27
3.4.2. MapReduce................................................................................................27
3.4.3. Hadoop Common.......................................................................................27
3.4.4. YARN........................................................................................................27
3.4.5. HDFS.........................................................................................................28
3.5. Cách thức hoạt động của Hadoop.....................................................................37
3.6. Giải pháp Hadoop cho việc quản lý và khai thác Big data................................38
3.8. Hadoop I/O.......................................................................................................39
Chương 4. MÔ HÌNH LẬP TRÌNH MAPREDUCE...................................................42
4.1. Giới thiệu về mô hình Mapreduce-MR.............................................................42
4.2. Các hàm chính của MapReduce........................................................................43
4.3. Hoạt động của MapReduce...............................................................................44
4.4. Cách thức phát triển một ứng dụng MR............................................................46
4.5. Xây dựng ứng dụng phân tích Big data trên các tập dữ liệu mẫu có sẵn...........46
Chương 5. APACHE SPARK CHO HỆ THỐNG BIG DATA....................................49
5.1. Tổng quan về Apache Spark.............................................................................49
5.2. Các thành phần của Apache Spark....................................................................50
5.2.1. Spark Clusters............................................................................................50
5.2.2. The resource management system..............................................................51
Hình 5.1. Tương tác giữa ứng dụng Spark và trình quản lý cụm......................51
5.2.3. Spark applications......................................................................................51
5.2.4. Spark drivers..............................................................................................52
Hình 5.2. Một cụm Spark nhỏ với ba người thi hành.......................................52
5.2.5. Spark executors..........................................................................................53
Hình 5.3. Sơ đồ hoạt động của Apache Spark Executor...................................53
Hình 5.4. Kết quả tạo Spark Executor..............................................................56
5.3. Spark Core........................................................................................................56
5.3.1. Spark Unified Stack...................................................................................56
Hình 5.5. Ngăn xếp hợp nhất Spark.................................................................57
5.3.2. Apache Spark Applications........................................................................58
5.3.3. Example Spark Application.......................................................................58
ii
5.4. Ứng dụng Apache Spark...................................................................................59
Ví dụ ứng dụng Spark..............................................................................................59
5.3. Quản lý bộ nhớ của Apache Spark....................................................................60
5.4. Lập trình với RDD............................................................................................61
5.4.1. Tổng quan..................................................................................................61
5.4.2. Tạo RDD....................................................................................................63
 Sơ đồ (chức năng).......................................................................................65
 Bản đồ phẳng (func)....................................................................................67
 Bộ lọc (chức năng)......................................................................................67
 Công đoàn (otherRDD)...............................................................................70
 Ngã tư (otherRDD).....................................................................................70
 Trừ (khácRDD)...........................................................................................70
 riêng biệt()...................................................................................................71
 Mẫu (với thay thế, phân số, hạt giống)........................................................71
5.4.3. Hoạt động RDD.........................................................................................72
Hình 5.6. The two-step process in the reduceByKey transformation...............74
5.5. Phát triển ứng dụng lưu trữ và phân tích dữ liệu lớn.........................................80
5.5.1. Giới thiệu về DataFrames..........................................................................80
5.5.2. Tạo khung dữ liệu......................................................................................80
5.5.3. Tạo DataFrames từ RDD...........................................................................80
5.5.4. Tạo DataFrames từ một dãy số...................................................................83
5.5.5. Tạo DataFrames từ nguồn dữ liệu..............................................................85
5.5.6. Bộ dữ liệu.................................................................................................113
CÂU HỎI ÔN TẬP CHƯƠNG 5..............................................................................125

iii
iv
5

You might also like