Và kết quả là hai dịch vụ then chốt trong hệ thống được ra đời là Hệ thống Tập tin Google Google File System – GFS có thể cung cấp sự lưu trữ có khả năng chịu lỗi, đáng tin cậy và khả n
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
Trường Đại Học Công Nghệ Thông Tin
Phòng Sau Đại Học
Bài thu hoạch môn học Điện toán Lưới
Đề tài:
ỨNG DỤNG ĐIỆN TOÁN PHÂN TÁN VỚI
THƯ VIỆN APACHE HADOOP
Giảng viên hướng dẫn: PGS TS Nguyễn Phi Khứ
Học viên thực hiện: Đỗ Duy Phúc MSHV: CH1101122
Lớp: Cao học khóa 6
TP HCM, Tháng 7 năm 2013
Trang 2Mục Lục
Trang 3Lời Giới Thiệu
Trong thời đại thông tin phát triển mạnh mẽ hiện nay, mỗi ngày có hàng PetaByte
dữ liệu được tạo ra Chúng ta đều biết những nguồn dữ liệu ấy tiềm ẩn nhiều giá trị, tuy nhiên để lưu trữ chúng một cách hiệu quả đã là một vấn đề không nhỏ, chưa nói đến việc
xử lý và rút trích thông tin từ chúng Đặc biệt, đối với những công ty chuyên về Internet
và dữ liệu như Google, Yahoo!, Facebook, v.v… thì quy mô bài toán dữ liệu mà họ phải giải quyết lại càng khó có thể đo lường được
Từ những nhu cầu trên, một công cụ nổi tiếng được ra đời, đó là Apache Hadoop framework Đây là một thư viện nguồn mở, viết trên ngôn ngữ Java Tuy xuất hiện chưa lâu, nhưng những đặc tính linh hoạt, mạnh mẽ và chi phí hợp lý của Apache Hadoop đã giành được sự tin dùng rộng rãi trong cộng đồng công nghệ Đến những công ty hàng đầu trong lĩnh vực như Yahoo!, Facebook hay Google đều có sử dụng nó trong những hệ thống to lớn của mình
Báo cáo này xin trình bày cái nhìn tổng quan về Apache Hadoop framework Đồng thời cũng nêu ra những khía cạnh, đặc tính nổi bậc của thư viện trong việc giải quyết những bài toán đặc thù về thế giới thông tin ngày nay: bài toán về dữ liệu
Để thực hiện hoàn thành đề tài này, em chân thành cám ơn thầy PGS TS Nguyễn Phi Khứ đã truyền đạt những kiến thức chuyên môn bổ ích và đã chỉ dẫn, tạo điều kiện cho em đi sâu tìm hiểu về vấn đề rất thú vị và quan trọng này
Học viên thực hiện
Đỗ Duy Phúc
Trang 4I Tổng Quan Về Apache Hadoop Framework I.1 Nguồn gốc xuất xứ và vai trò
Đầu những năm 2000, Google đã đối mặt với một thách thức nghiêm trọng Với sứ mệnh sắp xếp lại thông tin trên toàn thế giới, có nghĩa Google phải dò tìm, sao chép, và đánh chỉ mục cho toàn bộ Internet một cách liên tục Khi mà số lượng và kích thước của các website lớn dần và dịch vụ của Google ngày càng phổ biến, công ty này buộc phải tiêu thụ một khối lượng lớn dữ liệu với tốc độ tăng nhanh chưa gặp từ trước đến nay Không phần mềm thương mại hiện tại nào lúc bấy giờ có thể đảm đương được khối lượng dữ liệu cần xử lý đó, và kiến trúc hạ tầng tự xây dựng trước đây của Google đã chạm đến các giới hạn mở rộng có thể đạt được
Từ nhu cầu bức thiết trên, các kỹ sư của Google đã phải nỗ lực thiết kế và xây dựng một kiến trúc hạ tầng xử lý dữ liệu mới để giải quyết vấn đề Và kết quả là hai dịch
vụ then chốt trong hệ thống được ra đời là Hệ thống Tập tin Google (Google File
System – GFS) có thể cung cấp sự lưu trữ có khả năng chịu lỗi, đáng tin cậy và khả năng
mở rộng linh hoạt, và MapReduce, một mô hình hệ thống xử lý dữ liệu cho phép công
việc được chia nhỏ giữa một số lượng lớn các máy chủ và thực thi song song GFS và MapReduce được thiết kế từ rất sớm để chạy trên phần cứng máy chủ thông dụng mà Google sử dụng trong tất cả trung tâm dữ liệu của họ
Vào năm 2004, Google đã công bố một bài báo học thuật miêu tả kết quả nghiên cứu của mình Không lâu sau đó, một lập trình viên phần mềm nguồn mở có tiếng tăm tên Doug Cutting quyết định sử dụng lại kỹ thuật mà Google miêu tả Cutting lúc đấy đang làm việc với một bộ dò tìm thông tin được gọi là Nutch và có cùng những vấn đề với khối lượng dữ liệu và tốc độ lập chỉ mục, những vấn đề đã thúc đẩy Google phát triển MapReduce Ông ấy thay thê kiến trúc hạ tầng thu thập và xử lý dữ liệu đằng sau bộ dò tìm của mình, đặt nền tảng cho bản hiện thực mới của ông ấy dựa trên MapReduce Ông đặt tên phần mềm mới của mình là Hadoop, theo tên một chú voi đồ chơi của cậu con trai nhỏ của ông
Các kỹ sư tại Yahoo!, một công ty cạnh tranh trực tiếp với Google trong lĩnh vực tìm kiếm, cũng đã đọc được bài báo và biết được công việc của Cutting Nóng lòng sử dụng hệ thống xử lý dữ liệu của chính mình, Yahoo! quyết định đầu tư để phát triển
Hadoop Các nhà lãnh đạo Yahoo!, bao gồm cả Cutting, đã ra một quyết định chiến lược: Hadoop sẽ trở thành một dự án nguồn mở, tự do để tải về và sử dụng, đồng thời cũng mở
để nhận các bổ sung, cải tiến và đóng góp từ các nhà phát triển phần mềm tài năng trên
Trang 5toàn thế giới Đến năm 2006, Hadoop đã chính thức được triển khai và khai thác bởi các công ty web nổi bậc
Hadoop hiện nay là một dự án nguồn mở và được hoạt động dưới sự bảo trợ của Apache Software Foundation [Olson, 2010]
I.2 Vậy cụ thể Hadoop là gì?
Apache™ Hadoop® là một dự án phát triển phần mềm, mục tiêu hướng tới cung cấp một nền tảng điện toán phân tán, mở rộng linh hoạt và đáng tin cậy
Apache Hadoop còn được xem là một thư viện hay framework cho phép xử lý phân tán khối lượng lớn các tập dữ liệu trên nhiều cụm máy tính bằng cách sử dụng các
mô hình lập trình đơn giản Nó được thiết kế để mở rộng ra từ các máy chủ đơn lẻ lên đển hàng ngàn trạm làm việc, mỗi trạm cung cấp khả năng tính toán và lưu trữ cục bộ Không phụ thuộc vào phần cứng để cung cấp sự sẵn sàng cao, bản thân thư viện được thiết kế để phát hiện và xử lý các sự cố ngay trên tầng ứng dụng, từ đó cung cấp một dịch vụ có tính sẵn sàng cao ở trên một cụm máy tính, với mỗi máy đều có khả năng đối phó với sự cố
Dự án Apache Hadoop bao gồm những module sau:
• Hadoop Common: các tiện ích chung dùng hỗ trợ các bộ phận khác của Hadoop
• Hadoop Distributed File System (HDFS): một hệ thống tập tin phân tán cung cấp khả
năng truy cập thông suốt cao đến dữ liệu ứng dụng
• Hadoop YARN: một framework cho lập kế hoạch công việc và quản lý tài nguyên trên
cụm máy tính
• Hadoop MapReduce: một hệ thống trên nền tảng YARN cho xử lý song song các tập
dữ liệu lớn
Dựa trên nền tảng cung cấp bởi Hadoop, nhiều dự án khác liên quan được phát triển cung cấp thêm nhiều khả năng ứng dụng khác nhau liên quan đến dữ liệu, như:
• Ambari TM: một công cụ giao diện web cho việc theo dõi, quản lý, dự phòng các cụm máy tính Apache Hadoop, bao gồm hỗ trợ cho Hadoop HDFS, Hadoop MapReduce
và các phần mêm khác có liên quan đến Hadoop
• Avro TM: một hệ thống tuần tự hóa dữ liệu
• Cassandra TM: một cơ sở dữ liệu nhiều điểm chủ (multi-master) mở rộng linh hoạt không có những điểm chết
• Chukwa TM: một hệ thống thu thập dữ liệu để quản lý các hệ thống phân tán lớn
• HBase TM: một cơ sở dữ liệu phân tán, mở rộng linh hoạt, hỗ trợ lưu trữ dữ liệu có cấu
trúc cho các bảng dữ liệu lớn
Trang 6• Hive TM: Một cơ sở hạ tầng kho dữ liệu cung cấp tính năng tổng kết dữ liệu và cơ chế truy vấn đặc thù chuyên biệt
• Mahout TM: Một thư viện máy học và khai phá dữ liệu có thể mở rộng được
• Pig TM: Một ngôn ngữ luồng dữ liệu (data-flow) bậc cao và famework thực thi cho tính toán song song
• Zookeeper TM: Một dịch vụ đồng bộ hiệu năng cao cho các ứng dụng phân tán
Kết hợp lại với nhau, các dự án trên tạo thành một hệ sinh thái đa dạng và mạnh mẽ, hỗ trợ nhiều ứng dụng với nhiều khía cạnh khác nhau liên quan đến dữ liệu
Trang 7II Kiến Trúc Hệ Thống Của Apache Hadoop
Về cơ bản, Apache Hadoop là thư viện hiện thực của mô hình hệ thống tập tin Google File System (GFS) và cơ chế xử lý song song MapReduce trong bài báo học thuật được
công bố của Google [Dean và Ghemawat, 2004] Trong đó, Hadoop Distributed File System (HDFS) là hiện thực của GFS và Hadoop YARN cùng với Hadoop MapReduce
là cài đặt của bộ máy xử lý song song theo mô hình MapReduce Trong phần này, hệ thống kiến trúc cấu tạo nên Apache Hadoop sẽ được giới thiệu và phân tích chi tiết các đặc trưng về tính năng
II.1 Hệ thống tập tin Hadoop (HDFS)
II.1.1 Kết cấu
Hình 1 Mô hình tổng quan Apache Hadoop framework [Wikipedia, Apache Hadoop] HDFS có kết cấu master/slave Một nhóm HDFS (HDFS cluster) gồm một
NameNode để quản lí tập tin system namespace và điều tiết clients truy xuất các tập tin, cùng nhiều DataNode lưu dữ liệu Một tập tin được chia ra thành các blocks lưu trên nhiều node NameNode xử lí những việc như mở, đóng, đổi tên tập tin và thư mục, biết
Trang 8được block nào trên DataNode nào để chỉ cho clients đọc và lấy dữ liệu đúng chỗ (cũng
có nghĩa là truy xuất dữ liệu thực sự không hề thông qua NameNode) DataNodes cũng phụ trách việc tạo, xoá và sao blocks theo lệnh của NameNode
NameNode và DataNode được chạy trên các máy GNU/Linux thông thường HDFS được viết bằng Java nên chạy được trên nhiều loại máy Thông thường mỗi máy trong nhóm (cluster) chạy một DataNode
NameNode dùng Editlog lưu những thay đổi của metadata và lưu toàn bộ file system namespace vào tập tin FsImage (các metadata là dạng nén, chiếm ít dung lượng,
nên NameNode chỉ cần 4GB là phù hợp) Khi khởi động, NameNode đọc ra FsImage và Editlog, dựa vào Editlog để sửa FsImage trong bộ nhớ, sau đó lưu FsImage mới lại và xóa Editlog cũ Quá trình này gọi là checkpoint HDFS còn có SecondaryNamenode làm nhiệm vụ copy định kì FsImage và Editlog từ NameNode, kết hợp tạo thành FsImage mới trả về cho NameNode, NameNode sẽ update lại FsImage và xóa Editlog cũ đi
II.1.2 Các đặc tính
Hình 2 Dữ liệu được sao lưu trên HDFS [Olson, 2010]
a) Sao lưu dữ liệu
Trang 9Như đã nói, tập tin được lưu trữ thành các block (có cùng độ lớn, trừ block cuối) trên các máy khác nhau Việc sao lưu là để đảm bảo tính chịu lỗi Độ lớn block (mặc định 64MB) và số bản sao (mặc định 3) đều có thể thiết lập được Nhớ rằng Tập tin trong HDFS là write-once
Các DataNode sẽ gởi nhịp tim (Heartbeat) và báo cáo Block (Blockreport) về cho NameNode theo định kì Nhận được nhịp tim, NameNode sẽ biết được DataNode hoạt động bình thường, còn báo cáo Block, bao gồm danh sách tất cả các block tên DataNode đó, sẽ giúp cho NameNode ra quyết định (truy xuất dữ liệu hoặc sao thêm nếu có block không đủ bản sao)
Để tăng độ tin cậy (reliability), tính sẵn sàng (availability) và tối ưu đường truyền, HDFS lưu các bản sao của các block theo kiểu rack-aware Cụ thể nếu số bản sao là 3 thì có 2 bản sao lưu trên 2 nodes thuộc cùng một rack, bản sao còn lại lưu trên node thuộc rack khác NameNode sẽ xác định DataNode nào thuộc rack nào Nhớ rằng, lỗi của rack ít hơn rất nhiều so với lỗi của node và giao tiếp giữa các rack khác nhau thì phải qua các switch, tốn thời gian Cách làm này cho phép đọc dữ liệu song song từ các node khác nhau, nhưng lại tốn chi phí nhiều hơn khi ghi dữ liệu
b) Chế độ safemode
Khi khởi động NameNode sẽ vào trạng thái safemode, dựa trên Heartbeat và Blockreport mà các DataNode gởi về Block nào được sao đủ số lượng thì xem là an toàn Nếu có đủ một tỉ lệ nhất định (thiết lập được) các block an toàn, NameNode sẽ thoát khỏi safemode sau 30s Sau đó, những block nào chưa được sao ra đủ sẽ được sao thêm
c) Kiểm tra nhịp tim
Nếu NameNode không nhận được Heartbeat gởi định kì về, thì xem như
DataNode đó đã chết (dead), sẽ không cho tham gia các I/O, tất cả dữ liệu trên dead node
sẽ vô hiệu Node chết có thể làm một số block không đủ bản sao, NameNode luôn kiểm tra điều này và sao thêm khi cần
d) Toàn vẹn dữ liệu
Do nhiều nguyên nhân, dữ liệu lấy ra từ DataNode có thể bị hư, HDFS client software sẽ tiến hành checksum nội dung của tập tin Khi tạo tập tin, HDFS sẽ tính ra checksum của từng block, và lưu thành tập tin ẩn riêng biệt Checksum của dữ liệu lấy từ
Trang 10DataNode sẽ được so sánh với tập tin ẩn này, nếu không giống thì xem như dữ liệu đã hư, cần phải lấy từ DataNode khác
e) Xóa dữ liệu
Khi tập tin bị xóa, thực chất sẽ được di chuyển vào thư mục /trash, sau một thời gian nhất định (mặc định 6 tiếng, có thể thiết lập) thì mới bị xóa hoàn toàn /trash chỉ lưu bản sao cuối cùng và có thể khôi phục nhanh chóng khi lệnh xóa bị hủy
f) Xử lý sự cố
FsImage và Editlog là cấu trúc dữ liệu trung tâm, nếu xảy ra lỗi có thể dẫn đến HDFS ngưng hoạt động Có thể thiết lập NameNode để lưu các cấu trúc này thành nhiều bản sao, sửa bản chính phải đảm bảo đồng thời sửa bản sao Điều này có làm giảm tốc độ của NameNode chút ít nhưng cũng chấp nhận được Trong trường hợp NameNode (duy nhất) bị sự cố thì cần phải thủ công xử lí
g) Những tính năng khác
TaskTracker sẽ chọn bản sao gần nhất cho chương trình xử lý, để giảm lưu lượng và thời gian truyền qua mạng
Nếu không gian trống trên một DataNode giảm xuống mức độ nhất định, dữ liệu trên DataNode đó sẽ được di chuyển sang các node khác Tập tin có nhiều yêu cầu truy xuất sẽ được sao ra thêm trên các node phù hợp
Khi client yêu cầu tạo tập tin, HDFS client sẽ lưu tạm đến khi độ lớn vượt qua một block thì mới liên lạc với NameNode NameNode thêm tên tập tin vào tập tin system, cấp cho một block rồi đem node ID với block ID thông báo client, client tự đem tập tin lưu vào block đã chỉ định
Khi viết dữ liệu vào HDFS, client gởi block đã lưu tạm sang DataNode đầu tiên (trong danh sách được NameNode chỉ định) theo từng khối nhỏ 4KB, DataNode này vừa lưu dữ liệu vừa đem dữ liệu gởi sang DataNode thứ 2, và cứ như thế đến node cuối cùng [Wikipedia, Apache Hadoop]
II.2 Bộ máy xử lý phân tán Hadoop MapReduce
II.2.1 Cơ chế MapReduce
Cơ chế MapReduce được giới thiệu đầu tiên bởi Google vào năm 2004 Nó là một khung làm việc để xử lý các vấn đề một cách song song giữa các tập dữ liệu lớn Hệ thống sử dụng một lượng lớn máy tính (nút), nhóm chung với nhau và được gọi là một cụm (cluster, nếu tất cả các nút nằm trên cùng một mạng nội bộ và dùng phần cứng tương
Trang 11tự nhau), hay một lưới (grid, nếu các nút được chia sẻ xuyên suốt trên các hệ thống phân tán về mặt địa lý, và sử dụng phần cứng hỗn tạp hơn) Xử lý tính toán có thể xảy ra trên
dữ liệu được lưu trên hệ thống tập tin (không cấu trúc) hay trên một cơ sở dữ liệu (có cấu trúc) MapReduce có thể tận dụng lợi thế về tính cục bộ của dữ liệu, xử lý dữ liệu trên hay gần các cơ sở lưu trữ để giảm thiểu sự truyền gửi
Cơ chế MapReduce gồm hai bước:
• Bước “Map”: Nút chủ (master node) lấy dữ liệu, chia nhỏ nó ra thành các vấn đề
con, và phân phối chúng cho các nút thợ (worker node) Một nút thợ có thể lặp lại quá trình trên đối với phần công việc nó được nhận (nó trở thành một nút chủ khác, cấp nhỏ hơn), dẫn đến một cấu trúc cây nhiều cấp Nút thợ xử lý vấn đề nhỏ hơn, và trả về kết quả cho nút chủ của nó
• Bước “Reduce”: Nút chủ sau đó thu thập các câu trả lời cho toàn bộ các vấn đề
con và kết hợp nó lại theo một cách nào đó để hình thành kết quả – câu trả lời cuối cùng cho vấn đề mà nó cố gắng trả lời ban đầu
MapReduce cho phép xử lý phân tán các thao tác map và reduce Mỗi bước map được độc lập với các bước map khác, và tất cả bước map có thể thực hiện song song – mặc dù trong thực tế nó bị giới hạn bởi số lượng nguồn dữ liệu độc lập và số lượng CPU gần nguồn dữ liệu đó Tương tự, một tập các bộ reduce cũng có thể thực hiện ở giai đoạn reduce Tuy toàn bộ quá trình trên có thể thường kém hiệu quả hơn so với các thuật toán mang nhiều tính tuần tự, nhưng MapReduce có thể áp dụng cho một tập dữ liệu lớn hiệu quả hơn là các máy chủ thông dụng Kiến trúc song song cũng cung cấp một vài khả năng
để khôi phục lại từ các sự cố cục bộ của các máy chủ hoặc kho lưu trữ trong suốt quá trình thực thi Nếu một bộ map hoạc reduce bị sự số, công việc có thể được thiết lập lại với giả định nguồn dữ liệu vẫn còn sẵn sàng [Wikipedia, MapReduce]
II.2.2 Bộ máy Hadoop MapReduce
Để hiện thực cơ chế MapReduce được miêu tả qua công bố của Google , Hadoop MapReduce giới thiệu hai thành phần trong bộ máy xử lý phân tán của nó là: JobTracker
và TaskTracker (ta có thể tham khảo tổng quan ở Hình 1).
Bộ máy MapReduce của Hadoop chứa một JobTracker, là nơi mà các ứng dụng khách sẽ gửi các công việc cần xử lý JobTracker sau đó sẽ đẩy công việc đến các nút TaskTracker trong cụm các máy tính, cố gắng giữ công việc càng gần dữ liệu càng tốt Với một hệ thống tập tin tự nhận biết rack – mỗi nút biết được vị trí rack của mình và thông báo với nút quản lý trung tâm NameNode, JobTracker biết nút nào chứa dữ liệu và biết máy nào gần đó có thể xử lý công việc Nếu công việc không thể được giao cho cùng