BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC HỆ PHÂN BỐ CHƯƠNG 4 Apache Hadoop GVHD TS Nguyễn Thiên Bảo LỜI CẢM ƠN Lời nói đầu tiên, n[.]
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC HỆ PHÂN BỐ
CHƯƠNG 4: Apache Hadoop
GVHD: TS Nguyễn Thiên Bảo
Trang 2
Vì khả năng còn hạn chế nên trong quá trình thực hiện báo cáo không tránh khỏisai sót, kính mong nhận được những ý kiến đóng góp từ thầy để nhóm có thể cảithiện hơn sau này.
Nhóm thực hiện xin chân thành cảm ơn
Trang 3LỜI CẢM ƠN 2
NỘI DUNG 6
1 GIỚI THIỆU CHUNG VỀ APACHE HADOOP 6
1.1 Khái niệm 6
1.2 Lịch sử Hadoop 6
1.3 Hadoop dùng để làm gì 6
1.4 Vì sao nên sử dụng Hadoop 7
1.5 HADOOP và BIGDATA 7
1.6 Ưu điểm HADOOP 8
2 THÀNH PHẦN VÀ KIẾN TRÚC HADOOP 8
2.1 HDFS (Hadoop Distributed File System): 9
2.1.1 Kiến trúc HDFS 11
2.1.2 NameNode và quá trình tương tác giữa client và HDFS 13
2.1.3 Quá trình đọc file 14
2.1.4 Khả năng chịu lỗi và chẩn đoán lỗi của HDFS 15
2.1.4.1 Khả năng phục hồi nhanh chóng 15
2.1.4.2 Nhân bản các block 15
2.1.4.3 Toàn vẹn dữ liệu trên HDFS 16
2.2 YARN 16
2.3 MapReduce 18
2.3.1 Phát triển ứng dụng theo mô hình MapReduce với Hadoop MapReduce 19
2.3.2 Ứng dụng của MapReduce 22
3 CÔNG DỤNG CỦA HADOOP 24
3.1 CÁC VẤN ĐỀ MÀ HADOOP CÓ THỂ GIẢI QUYẾT 24
4 CÁC GIAI ĐOẠN THỰC HIỆN CỦA HADOOP 24
Trang 4TÀI LIỆU THAM KHẢO 27
NỘI DUNG
1 GIỚI THIỆU CHUNG VỀ APACHE HADOOP
1.1 Khái niệm
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 một giấy phép miễn phí Nó cho phép các ứng dụng làm việc với hàng ngàn máy tính tính toán độc lập và petabyte dữ liệu Hadoop được bắt nguồn từ các bài báo MapReduce của Google và Google File System (GFS)
1.2 Lịch sử Hadoop
● Nguồn gốc của Hadoop đến từ các bài viết File System Google được xuất bản vào tháng 10 năm 2003 Bài viết này là một bài nghiên cứu được sản sinh ra từ Google
● MapReduce: Xử lý dữ liệu đơn giản trên các cluster lớn Bắt đầu phát triển trên dự án Apache Nutch, nhưng đã được chuyển qua dự án con Hadoop mớitrong tháng 1 năm 2006 Doug Cutting đã làm việc tại Yahoo! vào thời điểm
đó, đặt tên Hadoop theo tên của con voi đồ chơi của con trai mình
● Hadoop 0.1.0 được phát hành vào tháng 4 năm 2006 và tiếp tục phát triển bởinhiều người đóng góp đến dự án Apache Hadoop
1.3 Hadoop dùng để làm gì
Hadoop sinh ra để giải quyết hai vấn đề chính:
Trang 5● Lưu trữ phân tán: Khi name node nhận yêu cầu phải lưu trữ một file, nó
sẽ chia file thành nhiều mảnh nhỏ để lưu xuống các data node Thao tác này sẽ đóng gói, tức bạn sẽ không cần quan tâm tới việc name node sẽ lưufile xuống dưới các data node nào, mà bạn chỉ cần quan tâm tới name node đã lưu được file đó hay chưa File sẽ được lưu trữ dưới dạng
filesystem
● Tính toán phân tán: Khi name node nhận yêu cầu tính toán (một job), nó
sẽ chia job thành nhiều “job nhỏ” và đưa xuống các data node Tương tự như thao tác lưu trữ, thao tác này cũng được thực hiện đóng gói
1.4 Vì sao nên sử dụng Hadoop
Một số lý do mà mình thấy cộng đồng nói nên sử dụng Hadoop là gì:
● Nó miễn phí
● Nó là Open source
● Nó hiệu quả trong việc lưu trữ phân tán và tính toán phân tán
Hai lý do đầu tiên thì dễ hiểu, còn lý do cuối cùng thì mình chưa kiểm chứng, bởi mới chỉ có cơ hội làm việc với mỗi Hadoop, nên cũng không biết phải đánh giá sao.Khi mình có cái nhìn rộng hơn, mình sẽ update lại phần này
Trang 6+ Lưu trữ số lượng lớn
+ Xử lý phân tán và truy cập dữ liệu nhanh chóng
+ Tin cậy, chống chịu lỗi và khả mở
1.6 Ưu điểm HADOOP
● Hadoop framework cho phép người dùng nhanh chóng viết và kiểm tra các
hệ thống phân tán Đây là cách hiệu quả cho phép phân phối dữ liệu và công việc xuyên suốt các máy trạm nhờ vào cơ chế xử lý song song của các lõi CPU
● Hadoop không dựa vào cơ chế chịu lỗi của phần cứng fault-tolerance and high availability (FTHA), thay vì vậy bản thân Hadoop có các thư viện được thiết kế để phát hiện và xử lý các lỗi ở lớp ứng dụng
● Hadoop có thể phát triển lên nhiều server với cấu trúc master-slave để đảm bảo thực hiện các công việc linh hoạt và không bị ngắt quãng do chia nhỏ công việc cho các server slave được điều khiển bởi server master
● Hadoop có thể tương thích trên mọi nền tảng như Window, Linux, MacOs dođược tạo ra từ Java
2 THÀNH PHẦN VÀ KIẾN TRÚC HADOOP
Kiến trúc Hadoop bao gồm bốn lớp chính:
● Common: Đây là các thư viện và tiện ích cần thiết của Java để các module khác sử dụng Những thư viện này cung cấp hệ thống file và lớp OS trừu tượng, đồng thời chứa các mã lệnh Java để khởi động Hadoop
● HDFS (Hadoop Distributed File System): Đây là hệ thống lưu trữ và quản lý file phân tán, đồng thời cung cấp truy cập thông lượng cao cho ứng dụng khai thác dữ liệu
Trang 7● Yarn: Đây là framework để quản lý lập lịch các job và tài nguyên các node.
● MapReduce: Đây là hệ thống dựa trên YARN dùng để xử lý song song các tập dữ liệu lớn Hiện nay Hadoop đang ngày càng được mở rộng cũng như được nhiều framework khác hỗ trợ như Hive, Hbase, Pig Tùy vào mục đích
sử dụng mà ta sẽ áp dụng framework phù hợp để nâng cao hiệu quả xử lý dữ liệu của Hadoop
2.1 HDFS (Hadoop Distributed File System):
Trang 8● HDFS (Hadoop Distributed File System) là thành phần quan trọng nhất của
Hệ sinh thái Hadoop HDFS là hệ thống lưu trữ chính của Hadoop Hệ thống tệp phân tán Hadoop (HDFS) là một hệ thống tệp dựa trên java cung cấp khả năng mở rộng, khả năng chịu lỗi, lưu trữ dữ liệu đáng tin cậy và tiết kiệm chiphí cho Dữ liệu lớn HDFS là một hệ thống tệp phân tán chạy trên phần cứng hàng hóa HDFS đã được định cấu hình với cấu hình mặc định cho nhiều cài đặt Hầu hết thời gian cho cấu hình cụm lớn là cần thiết
● HDFS là hệ thống quản lý dữ liệu phân tán dựa trên nền tảng Java cung cấp giải pháp lưu trữ tin cậy, ổn định, truy cập nhanh chóng Với mục đích này thì cách thức “write once, read many” được sử dụng, cho phép dữ liệu
thường được ghi một lần mỗi HDFS, sau đó sẽ được đọc nhiều lần Do vậy việc sửa đổi dữ liệu sau khi ghi thường rất hạn chế
● Ngoài ra, để lưu trữ dữ liệu phân tán, dữ liệu sẽ được chia thành các block (64/128 MB) và được phân phối tới các node xử lý Mỗi block đồng thời sẽ được sao chép đến các server khác trong cụm cluster để đảm bảo tính toàn vẹn của dữ liệu
Chức năng của các thành phần:
● Namenode: Là thành phần xử lý trung tâm của master node và quản lý toàn
bộ meta data của các data node Với chức năng như vậy thì Namenode sẽ quản lý vị trí của các block và file như là các journal file để phản hồi request thông tin file bất kỳ thời điểm nào
● Data node: là slave node đảm nhận nhiệm vụ lưu trữ Data.
● The Secondary Name Node: theo tên gọi là để backup cho Name node
nhưng thực tế không phải vậy Nó chỉ là thành phần trợ giúp tá vụ kết hợp block map và journal log của Name Node
Trang 9Namenode đóng vai trò là master, chịu trách nhiệm duy trì thông tin về cấu trúc cây phân cấp các file, thư mục của hệ thống file và các metadata khác của hệ thống file Cụ thể, các Metadata mà Namenode lưu trữ gồm có:
File System Namespace: là hình ảnh cây thư mục của hệ thống file tại một thời điểm nào đó File System namespace thể hiện tất các các file, thư mục có trên
hệ thống file và quan hệ giữa chúng
Thông tin để ánh xạ từ tên file ra thành danh sách các block: với mỗi file, ta
có một danh sách có thứ tự các block của file đó, mỗi Block đại diện bởi Block ID
Nơi lưu trữ các block: các block được đại diện một Block ID Với mỗi block
ta có một danh sách các DataNode lưu trữ các bản sao của block đó
Các Datanode sẽ chịu trách nhiệm lưu trữ các block thật sự của từng file của
hệ thống file phân tán lên hệ thống file cục bộ của nó Mỗi 1 block sẽ được lưu trữ như là 1 file riêng biệt trên hệ thống file cục bộ của DataNode
Trang 10Kiến trúc của HDFS được thể hiện qua sơ đồ dưới đây:
Hình 2-3 Kiến trúc HDFSNamenode sẽ chịu trách nhiệm điều phối các thao tác truy cập (đọc/ghi dữ liệu) của client lên hệ thống HDFS Và tất nhiên, do các Datanode là nơi thật sự lưutrữ các block của các file trên HDFS, nên chúng sẽ là nơi trực tiếp đáp ứng các thaotác truy cập này Chẳng hạn như khi client của hệ thống muốn đọc 1 file trên hệ thống HDFS, client này sẽ thực hiện một request (thông qua RPC) đến Namenode
để lấy các metadata của file cần đọc Từ metadata này nó sẽ biết được danh sách các block của file và vị trí của các Datanode chứa các bản sao của từng block Client sẽ truy cập vào 22 các Datanode để thực hiện các request đọc các block Chi tiết về các quá trình đọc/ghi dữ liệu của client lên trên HDFS
Trang 11Namenode thực hiện nhiệm vụ của nó thông qua một daemon tên namenode chạy trên port 8021 Mỗi Datanode server sẽ chạy một daemon datanode trên port
8022
Định kỳ, mỗi DataNode sẽ báo cáo cho NameNode biết về danh sách tất cả các block mà nó đang lưu trữ, Namenode sẽ dựa vào những thông tin này để cập nhật lại các metadata trong nó Cứ sau mỗi lần cập nhật lại như vậy, metadata trên namenode sẽ đạt được tình trạng thống nhất với dữ liệu trên các Datanode Toàn bộtrạng thái của metadata khi đang ở tình trạng thống nhất này được gọi là một
checkpoint Metadata ở trạng thái checkpoint sẽ được dùng để nhân bản metadata dùng cho mục đích phục hồi lại NameNode nếu NameNode bị lỗi
2.1.2 NameNode và quá trình tương tác giữa client và HDFS
Việc tồn tại duy nhất một NameNode trên một hệ thống HDFS đã làm đơn giản hoá thiết kế của hệ thống và cho phép NameNode ra những quyết định thông minh trong việc sắp xếp các block dữ liệu lên trên các DataNode dựa vào các kiến thức về môi trường hệ thống như: cấu trúc mạng, băng thông mạng, khả năng của các DataNode… Tuy nhiên, cần phải tối thiểu hoá sự tham gia của NameNode vào các quá trình đọc/ghi dữ liệu lên hệ thống để tránh tình trạng nút thắt cổ chai (bottleneck) Client sẽ không bao giờ đọc hay ghi dữ liệu lên hệ thống thông qua
NameNode Thay vào đó, client sẽ hỏi NameNode xem nên liên lạc với DataNode nào để truy xuất dữ liệu Sau đó, client sẽ cache thông tin này lại và kết nối trực tiếp với các DataNode để thực hiện các thao tác truy xuất dữ liệu
Chúng ta sẽ mổ xẻ quá trình đọc một file từ HDFS và ghi một file lên HDFS thông qua việc tương tác giữa các đối tượng từ phía client lên HDFS
Trang 122.1.3 Quá trình đọc file
Sơ đồ sau miêu tả rõ quá trình client đọc một file trên HDFS
Hình 2-4 Quá trình đọc file trên HDFSĐầu tiên, client sẽ mở file cần đọc bằng cách gửi yêu cầu đọc file đến
NameNode (1).Sau đó NameNode sẽ thực hiện một số kiểm tra xem file được yêu cầu đọc có tồn tại không, hoặc file cần đọc có đang ở trạng thái “khoẻ mạnh” hay không Nếu mọi thứ đều ổn, NameNode sẽ gửi danh sách các block (đại diện bởi Block ID) của file cùng với địa chỉ các DataNode chứa các bản sao của block này
Tiếp theo, client sẽ mở các kết nối tới Datanode, thực hiện một RPC để yêu cầu nhận block cần đọc và đóng kết nối với DataNode (3) Lưu ý là với mỗi block
ta có thể 24 có nhiều DataNode lưu trữ các bản sao của block đó Client sẽ chỉ đọc bản sao của block từ DataNode “gần” nhất
Trang 13Client sẽ thực hiện việc đọc các block lặp đi lăp lại cho đến khi block cuối cùng của file được đọc xong Quá trình client đọc dữ liệu từ HDFS sẽ transparent với người dùng hoặc chương trình ứng dụng client, người dùng sẽ dùng một tập API của Hadoop để tương tác với HDFS, các API này che giấu đi quá trình liên lạc với NameNode và kết nối các DataNode để nhận dữ liệu.
Nhận xét: Trong quá trình một client đọc một file trên HDFS, ta thấy client
sẽ trực tiếp kết nối với các Datanode để lấy dữ liệu chứ không cần thực hiện gián tiếp qua NameNode (master của hệ thống) Điều này sẽ làm giảm đi rất nhiều việc trao đổi dữ liệu giữa client NameNode, khối lượng luân chuyển dữ liệu sẽ được trảiđều ra khắp cluster, tình trạng bottle neck sẽ không xảy ra Do đó, cluster chạy HDFS có thể đáp ứng đồng thời nhiều client cùng thao tác tại một thời điểm
2.1.4 Khả năng chịu lỗi và chẩn đoán lỗi của HDFS
2.1.4.1 Khả năng phục hồi nhanh chóng
Các NameNode và DataNode đều được thiết kế để có thể phục hồi nhanh chóng Trong trường hợp NameNode ngừng hoạt động, ta chỉ cần phục hồi lại NameNode mà không cần phải restart tất cả các DataNode Sau khi NameNode phục hồi nó sẽ tự động liên lạc lại với các DataNode và hệ thống lại phục hồi (thực chất là NameNode chỉ đứng yên và lắng nghe các HeartBeat từ các DataNode) Nếu một DataNode bất kỳ bị ngừng hoạt động, ta chỉ cần khởi động lại DataNode này và nó sẽ tự động liên lạc với NameNode thông qua các HeartBeat để cập nhật lại tình trạng của mình trên NameNode
2.1.4.2 Nhân bản các block
Như đã trình bày ở các phần trên, mỗi block dữ liệu trên HDFS được lưu trữ trùng lắp trên các DataNode khác nhau thuộc các rack khác nhau Người dùng
Trang 14nhau cho các file khác nhau, tuỳ vào mức độ quan trọng của file đó, chỉ số mặc định là ba Nhờ vậy, khi một hay một số DataNode bị ngừng hoạt động, ta vẫn còn
ít nhất một bản sao của block
2.1.4.3 Toàn vẹn dữ liệu trên HDFS
HDSF đảm bảo tính toàn vẹn của dữ liệu bằng cách thực hiện tạo checksum5tất cả dữ liệu ghi lên nó và sẽ kiểm tra lại checksum mỗi khi đọc dữ liệu HDFS sẽ tạo một checksum cho mỗi 512 bytes dữ liệu được ghi (ta có thể cấu hình lại tham
số này thông qua property io.bytes.per.checksum, xem phụ lục )
DataNode chịu trách nhiệm kiểm tra tính toàn vẹn dữ liệu bằng cách kiểm trachecksum trước khi lưu trữ dữ liệu và checksum của nó Điều này được thực hiện khi DataNode nhận được dữ liệu từ client hay từ các DataNode khác trong quá trình nhân bản các block thông qua data pile
Khi client đọc dữ liệu từ các DataNode, client cũng sẽ thực hiện kiểm tra checksum và so sánh chúng với checksum lưu trên DataNode
2.2 YARN
● YARN hay Yet Another Resource Negotiator là resource management layer của Hadoop Các nguyên tắc cơ bản đằng sau YARN là để tách, quản lý tài nguyên và chức năng công việc lập kế hoạch / giám sát vào daemon riêng biệt Trong YARN có một global Resource Manager và ApplicationMaster trên mỗi ứng dụng Ứng dụng có thể là một công việc đơn lẻ hoặc chuỗi các công việc phục thuộc vào nhau
● Bên trong YARN, chúng ta có hai trình quản lý ResourceManager và
NodeManager ResourceManager phân xử tài nguyên trong số tất cả các ứng dụng cạnh tranh trong hệ thống Công việc của Node Manager là giám sát
Trang 15việc sử dụng tài nguyên của container và báo cáo với ResourceManager Cáctài nguyên ở đây là CPU, memory, disk, network,…
● ApplicationMaster đàm phán tài nguyên với ResourceManager và làm việc với Node Manager để thực thi và giám sát công việc
YARN có các tính năng sau:
● Multi-tenancy: YARN cho phép nhiều công cụ truy cập (kể cả open source)
trên cùng một bộ dữ liệu Hadoop Các công cụ truy cập này có thể được xử
lý hàng loạt, xử lý thời gian thực, xử lý lặp và vv
● Cluster Utilization: Với sự phân bổ resource động, YARN cho phép sử
dụng tốt các cluster So với các quy tắc MapReduce trong các phiên bản
Trang 16● Khả năng mở rộng: ResourceManager của YARN tập trung vào lập lịch và
đối phó với cluster ngày càng mở rộng, xử lý petabyte dữ liệu
● Khả năng tương thích: Chương trình MapReduce được phát triển cho
Hadoop 1.x vẫn có thể sử dụng trên YARN này Và điều này là không có sự gián đoạn đối với các quy trình đã hoạt động
2.3 MapReduce
● Ta còn có thể gọi phương pháp này là Phân tán dữ liệu vì nó tách hết tập hợpcác dữ liệu ban đầu thành các dữ liệu nhỏ và sắp xếp lại chúng để dễ dàng tìm kiếm và truy xuất hơn, đặc biệt là việc truy xuất các dữ liệu tương đồng
● Đây là hệ thống dựa trên YARN dùng để xử lý song song các tập dữ liệu lớn
Là cách chia một vấn đề dữ liệu lớn hơn thành các đoạn nhỏ hơn và phân tán
nó trên nhiều máy chủ Mỗi máy chủ có 1 tập tài nguyên riêng và máy chủ
xử lý dữ liệu trên cục bộ Khi máy chủ xử lý xong dữ liệu, chúng sẽ gửi trở
về máy chủ chính
● MapReduce gồm một single master (máy chủ) JobTracker và các slave (máytrạm) TaskTracker trên mỗi cluster-node Master có nhiệm vụ quản lý tàinguyên, theo dõi quá trình tiêu thụ tài nguyên và lập lịch quản lý các tác vụtrên các máy trạm, theo dõi chúng và thực thi lại các tác vụ bị lỗi Những