1. Trang chủ
  2. » Luận Văn - Báo Cáo

XỬ LÝ DỮ LIỆU PHÂN TÁN TRÊN NỀN TẢNG HADOOP

73 1,1K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 73
Dung lượng 4,66 MB

Nội dung

MỤC LỤCLỜI CAM ĐOANLỜI CẢM ƠNDANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮTDANH MỤC HÌNH ẢNHLỜI MỞ ĐẦU1CHƯƠNG I: TỔNG QUAN VỀ CÔNG NGHỆ HADOOP31.1.Giới thiệu Hadoop31.2.Lịch sử hình thành của Hadoop51.3.Thành phần của Hadoop61.4.Kiến trúc của Hadoop81.5. Công nghệ Hadoop cluster101.6.Nguyên tắc hoạt động của Hadoop121.7.Các trình nền của Hadoop131.8.Một sốứng dụng của Hadoop hiện nay16CHƯƠNG 2: XỬ LÝ DỮ LIỆU PHÂN TÁN TRÊN NỀN TẢNG HADOOP192.1.Hệ Thống Quản Lý Tệp Tin (HDFS)192.1.1.Hadoop Distributed File System (HDFS)192.1.2.Thiết kế của HDFS222.1.3.Namenode và quá trình tương tác giữa client và HDFS242.1.4.Các tính năng của NameNode302.1.5.Khả năng chịu lỗi và chuẩn đoán lỗi của HDFS332.1.6.Các giao diện tương tác342.1.7.Quản trị HDFS352.2.Hệ cơ sở dữ Liệu HBase372.2.1. Thành phần dự án Backdrop392.2.2. Thành phần Concepts392.2.3. Thành phần Regions402.2.4. Thành phần Locking402.2.5. Thành phần Implementation412.2.6. Thành phần hoạt động của HBase422.2.7.Thiết kế ứng dụng trên cơ sở dữ liệu của HBase43CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG TRÊN NỀN TẢNG HADOOP473.1.Mô phỏng thực nghiệm473.2.Cài đặt Hadoop513.2.1.Cài đặt Javar513.2.2.Cài đặt SSH523.2.3.Tạo người dùng riêng533.2.4.Cấu hình SSH543.2.5.Cài đặt Hadoop543.2.6.Cấu hình Hadoop55KẾT LUẬN59TÀI LIỆU THAM KHẢO60PHỤ LỤCLỜI CAM ĐOANLỜI CẢM ƠNDANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮTDANH MỤC HÌNH ẢNHLỜI MỞ ĐẦU1CHƯƠNG I: TỔNG QUAN VỀ CÔNG NGHỆ HADOOP31.1.Giới thiệu Hadoop31.2.Lịch sử hình thành của Hadoop51.3.Thành phần của Hadoop61.4.Kiến trúc của Hadoop81.5. Công nghệ Hadoop cluster101.6.Nguyên tắc hoạt động của Hadoop121.7.Các trình nền của Hadoop131.8.Một sốứng dụng của Hadoop hiện nay16CHƯƠNG 2: XỬ LÝ DỮ LIỆU PHÂN TÁN TRÊN NỀN TẢNG HADOOP192.1.Hệ Thống Quản Lý Tệp Tin (HDFS)192.1.1.Hadoop Distributed File System (HDFS)192.1.2.Thiết kế của HDFS222.1.3.Namenode và quá trình tương tác giữa client và HDFS242.1.4.Các tính năng của NameNode302.1.5.Khả năng chịu lỗi và chuẩn đoán lỗi của HDFS332.1.6.Các giao diện tương tác342.1.7.Quản trị HDFS352.2.Hệ cơ sở dữ Liệu HBase372.2.1. Thành phần dự án Backdrop392.2.2. Thành phần Concepts392.2.3. Thành phần Regions402.2.4. Thành phần Locking402.2.5. Thành phần Implementation412.2.6. Thành phần hoạt động của HBase422.2.7.Thiết kế ứng dụng trên cơ sở dữ liệu của HBase43CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG TRÊN NỀN TẢNG HADOOP473.1.Mô phỏng thực nghiệm473.2.Cài đặt Hadoop513.2.1.Cài đặt Javar513.2.2.Cài đặt SSH523.2.3.Tạo người dùng riêng533.2.4.Cấu hình SSH543.2.5.Cài đặt Hadoop543.2.6.Cấu hình Hadoop55KẾT LUẬN59TÀI LIỆU THAM KHẢO60PHỤ LỤC DANH MỤC HÌNH ẢNHHình 1.1 Mô hình chung về Hadoop3Hình 1.2 Cấu trúc các thành phần Hadoop6Hình 1.3 Kiến trúc tổng thể của Hadoop10Hình 1.4 Kiến trúc của công nghệ Hadooop cluster11Hình 1.5 Sự tương tác giữa JobTracker và TaskTracker15Hình 1.6 Cấu trúc liên kết của một nhóm Hadoop điển hình16Hình 2.1 Kiến trúc của HDFS23Hình 2.2 Quá trình đọc file trên HDFS25Hình 2.3 Quá trình tạo và ghi file trên HDFS26Hình 2.4 Cấu trúc tobology mạng31Hình 2.5 Cấu trúc một bảng dữ liệu trong HBase45Hình 3.1 Tổng quan giao diện web của Hadoop49Hình 3.2 Cổng giao tiếp với dịch vụ MapReduce50Hình 3.3 Giao diện bắt đầu mô phỏng50Hình 3.4 Kiểm tra Java của máy tính51Hình 3.5 Máy tính đã cài đặt Java52Hình 3.6 Cài đặt cấu hình ssh52Hình 3.7 Cài đặt người dùng riêng53Hình 3.8 Hệ thống tạo người dùng riêng đã được cài đặt53Hình 3.9 Cấu hình ssh54Hình 3.10 Cài đặt Hadoop55Hình 3.11 Cấu hình Hadoop56Hình 3.12 Giao diện chính của Hadoop58 

Trang 1

LỜI CẢM ƠN

Những năm tháng được học tập và rèn luyện tại Trường Đại Học Tài nguyên

và Môi trường Hà Nội, đặc biệt là quý Thầy, Cô đã giảng dạy, truyền đạt cho em những kiến thức vô cùng quý giá và được học tập, rèn luyện trong môi trường đầy khoa học, sáng tạo Đây là quá trình quan trọng để giúp em có thể thành công hơn trong công việc sau này

Em xin gửi lời cảm ơn sâu sắc tới ThS.Hoàng Minh Quang đã tận tình quan tâm, hướng dẫn em trong suốt thời gian thực hiện đề tài Thời gian qua được Thầy hướng dẫn, em đã biết cách làm việc khoa học hơn, nâng cao năng lực bản thân, bổ sung kiến thức để phục vụ cho đồ án tốt nghiệp cũng như hoàn thiện kỹ năng giao tiếp, kỹ năng làm việc hiệu quả Em xin chân thành cảm ơn các Thầy, Cô giáo trong Khoa Công nghệ Thông tin đã truyền đạt cho em những kiến thức quý báu, những bài học giá trị trong những năm học vừa qua, giúp em có một nền tảng lý thuyết vững chắc để phục vụ cho đam mê của em sau này

Mặc dù đã cố gắng trong suốt quá trình thực tập và làm đồ án, tuy nhiên do còn gặp nhiều khó khăn trong quá trình tiế cận thực tế, hạn chế về kiến thức và kinh nghiệm chuyên môn nên đồ án không tránh được những sai sót Vì vậy em rất mong được sự góp ý cả quý Thầy, Cô giáo và các bạn để đồ án tốt nghiệp của em được hoàn chỉnh hơn

Cuối cùng em xin chúc thầy ThS Hoàng Minh Quang và đồng kính chúc các Thầy, Cô trong khoa CNTT – Trường Đại Học Tài Nguyên và Môi Trường Hà Nội lời chúc sức khoẻ, hạnh phúc và luôn thành công trong sự nghiệp cao quý và thiêng liêng này

Em xin chân thành cảm ơn!

Sinh viên thực hiện

Trần Sỹ Phú Quý

Trang 2

DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT

Viết tắt Thuật ngữ tiếng anh Thuật ngữ tiếng việt

CNTT Information Technology (IT) Công nghệ thông tin

HDFS Hadoop distributed file system Hệ thống tệp tin phân tán

RPC Remote produce call Lời gọi thủ tục xa

API Application programming

POSIX Portable operating system

interface

Giao diện di động hệ điều hành Unix

RDBMS Relationl database management

GFS Goodle file system Quản lý dữ liệu

SNN Secondary NameNode Trình nền giám sát HDFS

Trang 3

MỤC LỤC LỜI CAM ĐOAN

Trang 4

DANH MỤC HÌNH ẢNH

Trang 5

LỜI MỞ ĐẦU

Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin và những ứng dụng của nó trong hoạt động đời sống con người Internet không còn là một thứ phương tiện lạ lẫm đối với mọi người mà nó trở thành công cụ làm việc và giải trí thông dụng, hữu ích của chúng ta ở tất cả mọi nơi, mọi lúc

Đất nước ta ngày càng phát triển, xu thế toàn cầu hoá, mọi mặt của đời sống

xã hội ngày càng được nâng cao, đặc biệt số lượng người sử dụng máy tính và các tài nguyên trực tuyến để xử lý công việc, giải trí ngày càng tăng nhanh Khi khối lượng dữ liệu của một hệ thống tăng nhanh tới một mức độ nhất định (khoảng hàng ngàn Terabyte ) thì việc hệ thống sẽ phải đối mặt với thách thức làm sao để lưu trữ

và phân tích dữ liệu ngày càng lớn hơn Những vấn đề về xử lý ngôn ngữ tự nhiên, nhận dạng, xử lý ảnh ba chiều, dự báo thời tiết đều đòi hỏi phải xử lý dữ liệu với tốc độ cao, với khối lượng dữ liệu rất lớn Để đáp ứng yêu cầu tính toán và xử lý lớn như vậy, việc tính toán tuần tự trên các máy tính riêng lẻ là không đáp ứng yêu cầu

Do đó cần phải có những hệ thống máy tính mạnh mẽ hơn để đáp ứng được những yêu cầu của thực tế

Sự bùng nổ dữ liệu đặt ra cho chúng ta những thách thức về việc làm thế nào lưu trữ và xử lý tất cả dữ liệu đó Tuy nhiên, nó có thể mang đến cơ hội chiếm lĩnh thông tin khổng lồ nếu chúng ta có đủ khả năng phân tích và xử lý nguồn dữ liệu

đó, biến những dữ liệu thô thành những thông tin hữu ích với một mức phí hợp lý.Apache – Hadoop được thiết kế để làm việc với nhiều loại dữ liệu và nguồn

dữ liệu Công nghệ HDFS của Hadoop cho phép khối lượng lớn công việc được chia ra thành các khối dữ liệu nhỏ hơn được nhân rộng và phân phối trên các phần cứng của một cluster để xử lý nhanh hơn Ở dạng đơn giản nhất, Hadoop chia công việc thành nhiều khối lượng nhỏ, phân tán khắp liên cung (cluster) gồm các nut tính toán và thu thập kết quả

Qua quá trình nghiên cứu, tham khảo trong phạm vi đồ án em tìm hiểu và thực hiện hoá xử lý dữ liệu phân tán trong phần mềm mã nguồn mở Hadoop Tuy nhiên

Trang 6

do thời gian có hạn nên em chỉ thực hiện nghiên cứu, tìm hiểu sơ lược và xây dựng

mô phỏng chương trình xử lý dữ liệu phân tán bằng công nghệ Hadoop ở mức độ đơn giản

Nội dung của bài báo cáo được chia làm 3 chương:

Chương 1: TỔNG QUAN VỀ CÔNG NGHỆ HADOOP

Chương 2: XỬ LÝ DỮ LIỆU PHÂN TÁN TRÊN NỀN TẢNG HADOOPChương 3: ỨNG DỤNG VÀ MÔ PHỎNG CHƯƠNG TRÌNH

CHƯƠNG I: TỔNG QUAN VỀ CÔNG NGHỆ HADOOP

1.1.Giới thiệu Hadoop

Hadoop là một framework mã nguồn mở được viết bằng ngôn ngữ Java cho phép phát triển các ứng dụng phân tán có cường độ dữ liệu lớn một cách miễn phí

Nó cho phép các ứng dụng có thể làm việc với hàng ngàn node khác nhau và hàng petabyte dữ liệu Hadoop được phát triển dựa trên ý tưởng từ các công bố của Google về mô hình MapReduce và hệ thống file phân tán Google File System (GFS)

Trang 7

Hình 1 Mô hình chung về Hadoop

Hadoop framework (khung công tác Hadoop) của Apache là một cơ chế dùng

để phân tích các tập dữ liệu rất lớn mà không cần đặt trong một kho dữ liệu Hadoop trừu tượng hóa công cụ phân tích dữ liệu to lớn của MapReduce, làm nó trở nên dễ tiếp cận hơn với các nhà phát triển Hadoop có khả năng mở rộng vô số các node và có thể xử lý tất cả hoạt động và phối hợp liên quan đến việc phân loại dữ liệu

Hadoop với các tính năng và tùy chỉnh phong phú đã trở thành một framework

có ích và mạnh mẽ đến không ngờ Yahoo! và vô số các tổ chức khác đã tìm thấy ở

nó một cơ chế hiệu quả để phân tích các núi dữ liệu bit, byte Hadoop cũng khá dễ thực hiện trên một node đơn; tất cả những gì bạn cần là dữ liệu nào đó để phân tích

Trang 8

và biết rõ về mã Java, bao gồm một phương tiện lập trình tổng quát (generics).Hadoop cũng làm việc với Ruby, Python và C++.

Trong Hadoop, bạn định nghĩa các việc thực hiện map và reduce bằng cách

mở rộng các lớp cơ sở riêng của Hadoop Các việc thực hiện này được gắn chặt với nhau bằng một cấu hình quy định chúng, cùng với các định dạng đầu vào và đầu ra Hadoop rất thích hợp cho việc xử lý các tệp rất lớn chứa dữ liệu có cấu trúc Một khía cạnh rất tiện dụng của Hadoop là ở chỗ nó xử lý phân tích cú pháp thô của một tệp đầu vào, do đó bạn có thể xử lý một dòng tại một thời điểm Vì thế việc định

nghĩa một hàm map thực ra chỉ là vấn đề xác định những gì bạn cần nắm lấy từ một

dòng văn bản gửi đến Một số yếu tố của Hadoop như:

- Hadoop là một framework cho phép phát triển trên các ứng dụng phân tán

- Hadoop viết bằng ngôn ngữ java Tuy nhiên nhờ cơ chế streaming, Hadoop cho phép phát triển các ứng dụng phân tán bằng cả java lẫn một số ngôn ngữ lập trình khác như C++, Python, Pearl

- Hadoop cung cấp một phương tiện lưu trữ dữ liệu phân tán trên nhiều node, hỗ trợ tối ưu hoá lưu lượng mạng đó là HDFS HDFS che giấu tất cả các thành phần phân tán, các nhà phát triển ứng dụng phân tán sẻ chỉ nhìn thấy HDFS như một hệ thống file cục bộ

- Hadoop giúp các nhà phát triển ứng dụng phân tán tập trung tối đa vào phần logic của ứng dụng, bỏ qua được một số phần chi tiết kỹ thuật phân tán bên dưới (phần này do Hadoop tự quản lý)

- Hadoop chỉ chạy trên môi trường Linux

Hadoop có những thuận lợi để được dùng khi: Có thể thêm node mới và thay đổi chúng khi cần Không cần phần cứng đặc biệt để chạy Hadoop Hadoop được xây dựng với tiêu chí xử lý dữ liệu có cấu trúc và không cấu trúc Khi một node lỗi, nền tảng Hadoop tự động chuyển sang node khác

1.2.Lịch sử hình thành của Hadoop

Đầu những năm 2000, 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 ngày càng lớn và dịch vụ của Google ngày càng phổ biến cần phải tiêu thụ một khối dữ

Trang 9

liệu lớn với tốc độ tăng nhanh Từ nhu cầu trên, google đã 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à từ đó 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ô 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 được ra đời 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ọ

Năm 2004, lập trình viên phần mềm mã nguồn mở Dough Cutting quyết định

sử dụng lại kỹ thuật mà Google miêu tả, lúc đấy Dough Cutting đang làm việc với

bộ dò tìm thông tin được gọi là Nutch (Nutch có cùng vấn đề về khối lượng dữ liệu

và tốc độ lập chỉ mục) Dough Cutting 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 thực hiện mới của ông ấy dựa trên MapReduce Và ông đặt tên cho phần mềm là Hadoop (tên của chú voi đồ chơi của con trai ông)

Có thể nóiYahoo, một công ty cạnh tranh với Google biết được bài báo và về Dough Cutting đã quyết định đầu tư để phát triển Hadoop Họ đã ra quyết định chiến lược: Hadoop sẻ trở thành dự án mã nguồn mở tự do để tải về và sử dụng, đồng thời cũng mở rộng để 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 toà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 Hiện nay Hadoop là một dự án mã nguồn mở và được hoạt động dưới sự bảo trợ của Apache Software Foundaiton (Olson, 2010)

1.3.Thành phần của Hadoop

Ngày nay, ngoài NDFS (được đổi tên lại thành HDFS – Hadoop Distributed File System) và MapReduce, Hadoop đã phát triển các dự án con dựa trên HDFS và MapReduce Hiện nay, Hadoop gồm có những thành phần sau:

Trang 10

Hình 1 Cấu trúc các thành phần Hadoop

Thành phần Core: cung cấp các công cụ và giao diện cho hệ thống phân tán

và các tiện ích I/O Đây là phần lõi để xây dựng nên HDFS và MapReduce Core là một tập hợp của các thành phần và các giao diện cung cấp chức năng truy cập vào các hệ thống tập tin phân tán và vào ra tổng quát Các thành phần cốt lõi cũng cung cấp sự tối ưu hoá dựa vào phân nhóm địa lý của máy chủ nhằm giảm thiểu lưu lượng mạng giữa các máy chủ trong các cụm tính toán

Thành phần MapReduce: là một framework giúp phát triển các ứng dụng

phân tán theo mô hình MapReduce một cách dễ dàng và mạnh mẽ, ứng dụng phân tán MapReduce có thể chạy trên một cluster lớn với nhiều node MapReduce là một

mô hình lập trình và khung phát triển phần mềm cho phép viết các ứng dụng nhanh chóng xử lý một lượng lớn dữ liệu song song dựa vào một cụm lớn các máy tính gọi

là các nút tính toán (node) dựa trên kiến trúc của nền tảng Hadoop MapReduce sử dụng HDFSđể truy cập vào các khối (phân đoạn tệp tin) và lưu trữ kết quả rút gọn.Thuật ngữ MapReduce liên quan đến hai phần mà chương trình Hadoop thực hiện:

- Map: là phần đầu tiên, trong đó dữ liệu đầu vào được chuyển đổi thành tập dữ liệu

theo cặp key/value

- Reduce: là phần thứ hai nhận kết quả đầu ra từ tác vụ Map, kết hợp dữ liệu với

nhau thành tập dữ liệu nhỏ hơn

Trang 11

Thông thường, kết quả input và output được lưu trong hệ thống file Framework này sẽ tự động quản lý, theo dõi và tái thực thi các tác vụ bị lỗi Trong

đó MapReduce framework gồm single master (máy chủ) JobTracker và các salave (máy trạm) TaskTracker trên mỗi cluster-node Master có nhiệm vụ quản lý tài nguyê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 máy slave TaskTracker thực thi các tác vụ được master chỉ định và cung cấp thông tin trạng thái tác vụ để master theo dõi.JobTracker là điểm yếu của Hadoop MapReduce Nếu JobTracker bị lỗi thì mọi hoạt động công việc trong chương trình đều bị ngắt quãng

Thành phần HDFS (Hadoop Distributed File System): là hệ thống file tệp

tin phân tán, cung cấp khả năng lưu trữ dữ liệu khổng lồ và tính năng tối ưu hoá việc sử dụng băng thông giữa các node HDFS có thể được sử dụng để chạy trên một cluster lớn với hàng chục ngàn node HDFS là hệ thống lưu trữ chính được sử dụng bởi các ứng dụng Hadoop, nó tạo ra nhiều bản sao của khối dữ liệu và phân phối chúng trên các nút tính toán trong một cụm để cho phép tính toán song song, đáng tin cậy và nhanh chóng

Thành phần Hbase: là một cơ sở dữ liệu phân tán, theo hướng cột HBase sử

dụng HDFS làm hạ tầng cho việc lưu trữ dữ liệu bên dưới và cung cấp khả năng tính toán song song dựa trên Mapreduce HBase truy cập dữ liệu HDFS vào một cơ

sở dữ liệu có cấu trúc giống và cung cấp giao diện lập trình được cho Java truy cập vào CSDL này HBase hỗ trợ hàng loạt kiểu tính toán sử dụng các truy vấn MapReduce và đọc ngẫu nhiên HBase thường được sử dụng trong Hadoop khi có truy cập đọc/ghi ngẫu nhiên Mục tiêu là lưu trữ các bảng rất lớn đang chạy trên cụm thiết bị phần cứng

Thành phần Hive:là một kho dữ liệu cơ sở hạ tầng được xây dựng trên

Hadoop Hive cung cấp các công cụ để cho phép tóm tắt dữ liệu, truy vấn và phân tích các bộ dữ liệu lớn được lưu trữ trong các tập tin Hadoop Hive cung cấp một cơ chế để định cấu trúc cho loại dữ liệu này và cung cấp một ngôn ngữ truy vấn đơn giản gọi là Hive SQL, dựa trên SQL Hive cho phép người sử dụng quen thuộc với

Trang 12

SQL để truy vấn dữ liệu Có thể nói, Hive dùng để quản lý dữ liệu được lưu trữ trên HDFS và cung cấp một ngôn ngữ truy vấn dựa trên SQL.

Thành phần Chukwa: là một hệ thống tập hợp và phân tích dữ liệu Chukwa

chạy các chương trình tập hợp dữ liệu, nó được lưu trữ dữ liệu trên HDFS và sử dụng MapReduce để phát sinh báo cáo Chukwa làm một công cụ mã nguồn mở, được sử dụng để quản lý các cụm lớn máy chủ phân tán Nó là một hệ thống thu thập dữ liệu để theo dõi các hệ thống phân tán lớn Chukwa bao gồm một bộ phận công cụ linh hoạt và mạnh mẽ cho hiển thị, theo dõi và phân tích kết quả để sử dụng tốt nhất các dữ liệu thu thập được

Thành phần Pig: là ngôn ngữ xử lý dòng dữ liệu Apache Pig là một nền tảng

cho việc phân tích dữ liệu lớn bao gồm một ngôn ngữ cấp cao để diển tả các chương trình phân tích dữ liệu Đặc điểm chính của chương trình Pig là cấu trúc của chúng

có thể được song song cho phép nó xử lý các tập hợp dữ liệu rất lớn, cú pháp đơn giản Các tính năng xây dựng sẵn cung cấp một mức độ trừu tượng để cho phát triển các công việc Hadoop nhanh hơn và dễ dàng hơn, dễ viết hơn so với MapReduce truyền thống

1.4.Kiến trúc của Hadoop

Hadoop bao gồm có nhân Hadoop, nhân này cung cấp truy cập tới file hệ thống mà Hadoop hỗ trợ File hệ thống mà Hadoop hỗ trợ bao gồm:

- HDFS: là hệ thống tập tin riêng của Hadoop Nó được thiết kế để co giãn tới hàng

petabytes lưu trữ và chạy trên file hệ thống của hệ điều hành nằm bên dưới

- File hệ thống Amazon S3

- Cloud Store: cũng giống như HDFS, cloud store là hệ thống tập tin riêng của

Hadoop, được thiết kế để co giãn tới hàng petabytes lưu trữ dữ liệu và chạy trên file

hệ thống của hệ điều hành nằm bên dưới

- FTP filesystem

- Read-only HTTT và các hệ thống file HTTPS

Hệ thống file HDFS lưu trữ các tập tin lớn qua nhiều máy tính phức tạp HDFS đạt độ tin cậy bằng cách sao chép dữ liệu trên nhiều máy chủ, vì thế không cần yêu cầu lưu trữ RAID (Redundant Arrays of Inexpensive Disks hoặc Redundant

Trang 13

Arrays of Independent Disks - là hình thức ghép nhiều ổ đĩa cứng vật lý thành một

hệ thống ổ đĩa cứng có chức năng tăng tốc độ đọc/ghi dữ liệu hoặc nhằm tăng thêm

sự an toàn của dữ liệu chứa trên hệ thống đĩa hoặc kết hợp cả hai yếu tố trên) trên máy chủ Với giá trị sao chép mặc định, dữ liệu được lưu trữ trên 3 node (2 trên cùng một rack và 1ở rack khác)

Hệ thống file được xây dựng từ một cụm node dữ liệu, từng node cung cấp các khối dữ liệu qua mạng sử dụng một giao thức cụ thể để tới HDFS Chúng cũng cung cấp dữ liệu qua HTTP cho phép truy cập tới tất cả nội dung từ một web brower hoặc một client nào đó.Các node dữ liệu có thể giao tiếp với các node khác để tái cân bằng dữ liệu, di chuyền các bản sao vòng quanh và để giữ bản sao của các dữ liệu quan trọng

Một filesystem yêu cầu một máy chủ duy nhất, NameNode Đây là điểm không thích hợp duy nhất trong việc cài đặt HDFS Nếu NameNode tắt, filesystem

sẽ tắt Khi nó trở lại, NameNode sẽ phát lại tất cả các hoạt động nổi bật Quá trình phát lại sẽ mất nhiều thời gian cho một cụm lớn Filesystem bao gồm cả Secondary NameNode, thứ mà làm cho vài người nghĩ rằng khi NameNode chính offline, NameNode thứ hai sẽ thay thế Trong thực tế, NameNode thứ hai này sẽ kết nối một cách thường xuyên tới các NameNode khác và tải một bản chụp thông tin thư mục của NameNode chính, mà sau đó sẽ được lưu vào thư mục NameNode thứ hai được

sử dụng cùng với các bản ghi chỉnh sửa của NameNode chính để tạo ra một cấu trúc thư mục cập nhật

Trang 14

Hình 1 Kiến trúc tổng thể của Hadoop

Một hạn chế của HDFS là nó không thể mount trực tiếp bởi hệ điều hành hiện tại Lấy dữ liệu vào và ra khỏi hệ thống file HDFS, một hoạt động cần phải được làm trước và sau khi thực hiện một công việc,có thể gây ra bất tiện Một filesystem trong UserSpace đã được phát triển để giải quyết vấn đề này, ít nhất là cho Linux và một số hệ thống khác

Sao chép dữ liệu nhiều lần rất tốn kém, để giảm bớt chi phí, phiên bản gần đây của HDFS đã xoá việc hỗ trợ mã hoá, theo đó nhiều khối của cùng một tập tin được kết hợp để tạo ra một khối chẵn lẻ HDFS tạo ra các khối chẵn lẻ không đồng bộ và sau đó giảm sao chép dần xuống mức nhỏ nhất

1.5 Công nghệ Hadoop cluster

Hadoop cluster có hai thành phần chính là HDFS và MapReduce Hadoop có kiến trúc là master-slave và cả hai thành phần của Hadoop cũng đều có kiểu kiến trúc này Kiến trúc một Hadoop cluster như sau:

Trang 15

Hình 1 Kiến trúc của công nghệ Hadooop cluster

Trên một Hadoop cluster, có duy nhất một node chạy NameNode, một node chạy JobTracker (NameNode và JobTracker có thể nằm trên cùng một máy vật lý, tuy nhiên trên các cluster thật sự với hàng trăm, hàng nghìn node thì thường phải tách riêng NameNode và JobTracker ra các máy vật lý khác nhau) Có nhiều node slave, mỗi node slave thường đóng vai trò một là DataNode, hai là TaskTracker.Trong đó NameNode và DataNode chịu trách nhiệm vận hành hệ thống file phân tán HDFS với vai trò như sau:

- NameNode: là một master của hệ thống HDFS, quản lý các meta-data của hệ thống

HDFS như filesystem space, danh sách các file trên hệ thống và các block id tương ứng của từng file, quản lý danh sách slave và tình trạng hoạt động của các DataNode thông qua các hearbeat (hearbeat là loại thông điệp mà mỗi DataNode sẽ gửi định kỳ đến NameNode để xác nhận tình trạng hoạt động của DataNode), điều hướng quá trình đọc/ghi dữ liệu từ client lên các DataNode

Trang 16

- DataNode: chứa các block dữ liệu thực sự của các file trên HDFS, chịu trách nhiệm

đáp ứng yêu cầu đọc/ghi dữ liệu từ client, đáp ứng yêu cầu tạo/xoá các block dữ liệu

từ NameNode JobTracker và TaskTracker chịu trách nhiệm duy trì bộ máy MapReduce, nhận và thực thi các MapReduce Job (MapReduce Job là một chương trình theo mô hình MapReduce được đề trình lên để thực hiện)

- Jobtracker: tiếp nhận các yêu cầu thực thi các MapReduce Job, phân chia Job này

thành các task và phân công cho các TaskTracker thực hiện, quản lý tình trạng thực hiện các task của TaskTracker và phân công lại nếu cần JobTracker cũng quản lý danh sách các node TaskTracker và tình trạng của từng node thông qua hearbeat

- TaskTrack: nhận các task từ JobTracker và thực hiện task Ngoài ra trên Hadoop

cluster còn có SecondaryNameNode

- SecondaryNameNode: duy trì một bản sao của meta-data trên NameNode và bản

sao này sẽ được dùng để phục hồi lại NameNode nếu NameNode bị hư hỏng

1.6.Nguyên tắc hoạt động của Hadoop

Hadoop chia đầu vào cho mỗi công việc MapReduce vào các mảnh có kích thước cố định gọi là các input split hoặc các split Hadoop tạo ra một task map cho

mỗi split, cái chạy mỗi nhiệm vụ map do người sử dụng định nghĩa cho mỗi bản ghi

trong split Có rất nhiều các split, điều này có nghĩa là thời gian xử lý mỗi split nhỏ hơn so với thời gian xử lý toàn bộ đầu vào Vì vậy, nếu chúng ta xử lý các split một cách song song thì quá trình xử lý sẽ cân bằng tải tốt hơn, nếu các split nhỏ khi đó một chiếc máy tính nhanh có thể xử lý tương đương nhiều split trong quá trình thực hiện công việc hơn là một máy tính chậm Ngay cả khi các máy tính giống hệt nhau, việc xử lý không thành công hay các công việc khác đang chạy đồng thời làm cho cân bằng tải như mong muốn và chất lượng của cân bằng tải tăng như là chia các split thành các phần nhỏ

Mặt khác, nếu chia tách quá nhỏ, sau đó chi phí cho việc quản lý các split và tạo ra các map task bắt đầu chiếm rất nhiều tổng thời gian của quá trình xử lý công việc Đối với hầu hết công việc, kích thước split tốt nhất thường là kích thước của một block của HDFS (được mặc định 64MB), mặc dù nó có thể thay đổi được cho mỗi cluster (cho tất cả các file mới tạo ra) hoặc định rõ khi mỗi file được tạo ra

Trang 17

Hadoop làm tốt nhất các công việc của nó khi chạy các map task trên một node khi mà dữ liệu đầu vào của nó cư trú ngay trong HDFS Nó được gọi là tối ưu hoá dữ liệu địa phương Các map task ghi đầu ra của chúng trên đĩa cục bộ, không phải là vào HDFS.

Khi Hadoop chạy một tập các trình nền (daemon) hoặc các chương trình thường trú, trên các máy chủ khác nhau trên mạng của bạn Những trình nền có vai trò cụ thể, một số chỉ tồn tại trên một máy chủ, một số có thể tồn tại trên nhiều máy chủ Các daemon bao gồm: NameNode, DataNode, JobTracker, TaskTracker, SecondaryNameNode

1.7.Các trình nền của Hadoop

NameNode: là một trình nền quan trọng nhất của Hadoop – các NameNode

Hadoop sử dụng một kiến trúc master/slave cho cả lưu trữ phân tán và xử lý phân tán Hệ thống lưu trữ phân tán được gọi là Haddop File hay là HDFS NameNode là master của HDFS để chỉ đạo các trình nền DataNode slave và thực hiện các nhiệm

vụ I/O mức thấp NameNode có thể được gọi là một nhân viên kế toán cho HDFS;

nó theo dõi cách các tập tin của bạn được phân chia thành các block, những node nào lưu các khối đó và kiểm tra sức khoẻ tổng thể của hệ thống tệp phân tán.Chức năng của NameNode là memory và I/O chuyên sâu Như vậy, máy chủ lưu trữ NameNode thường không lưu trữ bất cứ dữ liệu người dùng hoặc thực hiện bất cứ một tính toán nào cho ứng dụng MapReduce để giảm khối lượng công việc trên máy Điều này có nghĩa là máy chủ NameNode không gấp đôi như là DataNode hay một TaskTracker.Có điều đáng tiếc là một khía cạnh tiêu cực đến tầm quan trọng của NameNode nó có một điểm của thất bại của một cụm Hadoop Với bất cứ một trình nền khác, nếu các nút máy của chúng bị hỏng vì lý do phần mềm hay phần cứng, các Hadoop cluster có thể tiếp tục hoạt động thông suốt hoặc bạn có thể khởi động nó một cách nhanh chóng, nhưng lại không thể áp dụng cho NameNode

DataNode: với mỗi máy slave trong cluster của bạn sẽ lưu trữ một trình nền

DataNode để thực hiện các công việc nào đó của hệ thống file phân tán đọc và ghi các khối HDFS tới các file thực tế trên hệ thống file cục bộ (local filesystem) Khi

Trang 18

bạn muốn đọc hay ghi một file HDFS, file đó được chia nhỏ thành các khối và NameNode sẽ nói cho các client của bạn nơi mỗi khối trình nền DataNode sẽ nằm trong đó Client liên lạc trực tiếp với các trình nền DataNode để xử lý các file cục

bộ tương ứng với các block Hơn nữa, một DataNode có thể giao tiếp với các DataNode khác để nhân bản các khối dữ liệu của nó để dự phòng.Các DataNode thường xuyên báo cáo với NameNode Sau khi khởi tạo, mỗi DataNode thông báo với NameNode của các khối mà nó hiện đang lưu trữ Sau khi hoàn thành các DataNode tiếp tục thăm dò ý kiến NameNode để cung cấp thông tin về thay đổi cục

bộ cũng như nhận được hướng dẫn để tạo, di chuyển hoặc xoá các block từ local

Secondary NameNode (SNN): là một trình nền hỗ trợ giám sát trạng thái của

các cụm HDFS Giống như NameNode, mỗi cụm có một SNN và nó thường trú trên một máy của mình Không có các trình nền DataNode hay TaskTracker chạy trên cùng một server.SNN khác với NameNode trong quá trình xử lý của nó không nhận hoặc ghi lại bất cứ thay đổi thời gian thực tới HDFS Thay vào đó, SNN giao tiếp với các NameNode bằng cách chụp những bức ảnh của siêu dữ liệu HDFS tại khoảng xác định bởi cấu hình của các cluster.NameNode là một điểm truy cập duy nhất cho một cụm Hadoop và các bức ảnh chụp SNN giúp giảm thiểu thời gian down và mất dữ liệu Tuy nhiên, một NameNode không đòi hỏi sự can thiệp của con người để cấu hình lại các cluster chính của SNN như là NameNode chính

JobTracker: là một liên lạc giữa ứng dụng của Hadoop Một khi bạn gửi mã

nguồn của bạn tới các cluster (cụm), JobTracker sẽ quyết định kế hoạch thực hiện bằng cách xác định những tập tin nào sẽ xử lý, các nút được giao các nhiệm vụ khác nhau và theo dõi tất cả các nhiệm vụ khi chúng đang chạy Nếu một nhiệm vụ(task) thất bại, JobTracker sẽ tự động chạy lại nhiệm vụ đó có thể trên một node khác, cho đến một giới hạn nào đó được định sẵn của việc thử lại này Chỉ có một JobTracker trên một cụm Hadoop và nó thường chạy trên một máy chủ như là nút master của cluster

TaskTracker: với các trình nền lưu trữ và trình nền tính toán cũng phải tuân

theo kiến trúc master/slave thì JobTracker là giám sát tất cả công việc thực hiện

Trang 19

chung của một công việc MapReduce và các TaskTracker là quản lý việc thực hiện các nhiệm vụ riêng trên mỗi node slave Mỗi TaskTracker chịu trách nhiệm thực hiện các task riêng mà các JobTracker giao cho Mặc dù có một Tasktracker duy nhất cho một node slave, mỗi TaskTracker có thể sinh ra nhiều JVM (JVM (viết tắt của Java Virtual Machine) là một thiết bị trừu tượng (ảo) có thể giúp máy tính chạy các chương trình Java Nó cung cấp môi trường runtime mà trong đó Java Bytecode

có thể được thực thi) để xử lý các nhiệm vụ Map hoặc Reduce song song.Một trong những trách nhiệm của các TaskTracker là liên tục liên lạc với các JobTracker Nếu JobTracker không nhận được hoạt động từ TaskTracker trong vòng một lượng thời gian đã quy định, nó sẽ cho rằng TaskTracker đã bị treo và sẽ gửi lại nhiệm vụ tương ứng cho các nút khác trong cluster

Hình 1 Sự tương tác giữa JobTracker và TaskTracker

Trang 20

Hình 1 Cấu trúc liên kết của một nhóm Hadoop điển hình

Cấu trúc liên kết này có một node master là trình nền NameNode, JobTracker

và một node đơn với SNN trong trường hợp node master bị lỗi Đối với các cụm nhỏ thì SNN có thể thường trú trong một node slave Mặt khác, đối với các cụm lớn

sẽ tách NameNode và JobTracker thành hai máy riêng Các máy slave, mỗi máy chỉ lưu trữ một DataNode và TaskTracker để chạy các nhiệm vụ trên cùng một node nơi lưu dữ liệu của chúng

Khi thiết lập một cluster Hadoop đầy đủ thì cách đầu tiên phải thiết lập các nút master và kiểm soát kênh giữa các node Nếu một cluster Hadoop có sẵn thì phải cài

đặt chương trình SSH giữa các node Và có vài lựa chọn để chạy Hadoop thì phải sử

dụng trên một máy đơn hoặc chế độ giả phân tán

1.8.Một sốứng dụng của Hadoop hiện nay

Tháng 2 năm 2008, Yahoo là công ty đầu tư chính của Hadoop đã khởi động sản phẩm ứng dụng Hadoop mà họ khẳng định là lớn nhất thế giới Bản đồ Web tìm kiếm của Yahoo là một ứng dụng Hadoop chạy trên 1000 cụm nhân Linux và tạo ra

Trang 21

những dữ liệu mà ngày nay được sử dụng trong mọi truy vấn tìm kiếm web của Yahoo.

Có nhiều cụm Hadoop đồng thời chạy trên Yahoo, mỗi cụm chiếm giữ một trung tâm dữ liệu duy nhất Không có một hệ thống file HDFS hay cơ chế MapReduce nào chia cắt các trung tâm dữ liệu này, thay vì mỗi trung tâm có một hệ thống file riêng biệt Những cụm server chạy trên Linux, bao gồm cả việc phân bố Hadoop Cấu hính các cluster được trợ giúp thông qua một chương trình gọi là Zookeepper Công việc mà các cluster thực hiện được biết đến là để bao hàm việc tính toán các chỉ số cho các máy tìm kiếm Yahoo

Ngoài Yahoo là công ty đầu tư chính của Hadoop, ngày nay còn rất nhiều công

ty khác sử dụng Hadoop như là một công cụ để lưu trữ và phân tích dữ liệu trên các khối dữ liệu lớn như:

Hãng Facebook: sử dụng Hadoop để lưu trữ các log nội bộ và kích thước của

nguồn dữ liệu Các dữ liệu này được dùng làm nguồn cho các báo cáo phân tích và máy học

A9.com – Amazon: hỗ trợ cho filesystem S3 trong sự phân phối của Hadoop,

và Hadoop tạo ra hình ảnh máy EC2 sau khi phát hành Từ quan điểm hiệu suất tối

đa, Hadoop trên các dịch vụ Amazon là không hiệu quả, filesystem S3 điều khiển từ

xa và bị trể từ mọi hoạt động ghi cho đến ghi dữ liệu được bảo đảm không bị mất Điều này loại bỏ các lợi thế lên lịch công việc gần với dữ liệu để tiết kiệm tải mạng của Hadoop A9.com – Amazon sử dụng Hadoop để đánh giá chỉ số tìm kiếm sản phẩm trên Amazon, xử lý đến hàng triệu Session mỗi ngày

Twitter: sử dụng Hadoop để xử lý tweets ( những văn bản lên đến 140 ký tự

hiển thị trên profile của tác giả), logs và các nguồn dữ liệu phát sinh trong quá trình hoạt động của Twitter

Và còn rất nhiều các công ty khác hiện đang sử dụng Hadoop vào việc lưu trữ

và xử lý dữ liệu, đặc biệt cho các nguồn dữ liệu lớn với kích thước lên tới hàng petabyte

Trang 22

Hadoop còn có những ưu điểm:

- 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 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 trong hệ thống nên 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

- Các server có thể được thêm vào hoặc gỡ bỏ từ cluster một cách linh hoạt và vẫn hoạt động mà không bị ngắt quãng

- Một lợi thế lớn nữa của Hadoop ngoài mã nguồn mở đó là khả năng tương thích trên tất cả các nền tảng do được phát triển trên Java

CHƯƠNG 2: XỬ LÝ DỮ LIỆU PHÂN TÁN TRÊN NỀN TẢNG HADOOP

Nội dung chương 2 tập trung đi vào phân tích và các yêu cầu xử lý của Apache Hadoop như là một khuôn khổ cho phép để chế biến phân phối các bộ dữ liệu lớn trên các cụm máy tính sử dụng mô hình lập trình đơn giản Apache Hadoop được thiết kế để mở rộng quy mô từ các máy chỉ duy nhất để hàng ngàn máy, từng cung cấp tính toán và lưu trữ địa phương Thay vì dựa vào phần cứng để cung cấp tính sẵn sàng cao, các thư viện riêng được thiết kế để phát hiện và xử lý thất bại của lớp ứng dụng, do đó cung cấp một dịch vụ cao có sẵn trên một cụm máy tính, mỗi trong

số đó có thể bị thất bại.Apache Hadoop bao gồm các phân hệ:

- Hadoop Common: là thành phần các tiện ích hỗ trợ các module Hadoop khác

- Hadoop Distributed File System (HDFS): một hệ thống tập tin phân phối cung cấp truy cập thông lượng cao cho dữ liệu ứng dụng

- Hadoop sợi: một khuôn khổ cho việc lập kế hoạch và quản lý tài nguyên cụm

- Hadoop MapReduce: một hệ thống sợi dựa trên xử lý song song của các tập dữ liệu lớn

2.1.Hệ Thống Quản Lý Tệp Tin (HDFS)

2.1.1.Hadoop Distributed File System (HDFS)

HDFS là một cụm máy tính được cài đặt hệ thống HDFS và có hai loại nút: Nút tên (namenode) hay còn gọi là nút chủ (master) và Nút dữ liệu (datanode) hay còn gọi là nút tớ (worker)

Trang 23

NameNode quản lý không gian tệp hệ thống thông tin, nó duy trì cây hệ thống tập tin và siêu dữ liệu cho tất cả các tập tin và thư mục trong cây NameNode nhận biết các DataNode mà trên đó tất cả các khối cho tập tin được phân tán Các DataNode lưu trữ và lấy khối khi nó được gọi bởi người dùng hoặc master DataNode báo cáo định kỳ cho các NameNode danh sách của khối mà nó đang lưu trữ NameNode quyết định về sao lưu dữ liệu của một khối Trong một HDFS điển hình, mỗi khối có kích thước là 64MB và thườngđược nhân làm ba bản, bản thứ hai sao đĩa cục bộ và bản thứ ba ở trên đĩa từ xa để phòng hờ.

Nguyên tắc hoạt động là một tệp tin HDFS được đọc các ứng dụng từ máy khách (client) cần sử dụng một luồng đầu vào như file input stream trong java giống như đọc tệp tin trong hệ thống tệp tin cục bộ Tuy nhiên, về xử lý đằng sau hậu trường, luồng đầu vào này được xử lý để lấy dữ liệu từ HDFS Đầu tiên, NameNode liên lạc để xác định cho phép truy cập Nếu được phép truy cập NameNode sẽ xác định danh sách của khối HDFS chưa truy cập tập tin vào một danh sách các nút dữ liệu lưu trữ mỗi khối và trả về cho máy khách Tiếp theo, máy khách sẽ mở một liên kết nối đến DataNode gần nhất và yêu cầu một truy cập các khối cụ thể Tiếp đến các khối HDFS được trả về trên cùng một kết nối và chúng được đưa vào ứng dụng Để ghi dữ liệu HDFS, các ứng dụng xem các tệp tin HDFS như là một luồng đầu ra (output stream) Tuy nhiên, bên trong dòng dữ liệu trước hết được phân chia thành các khối có kích thước HDFS 64MB và chia nhỏ thành các gói nhỏ hơn thường là 64KB để xếp hàng chờ ghi Việc này được một tiến trình thực hiện (thread) Tiến trình thứ hai thực hiện giải phóng hàng, phối hợp với các NameNode để gán ID cho khối và phân khói đến các DataNode để lưu trữ Ngoài ra còn một tiến trình thứ ba để quản lý phản hồi từ các NameNode biết dữ liệu đã được ghi hoàn tất.Những điểm yếu của HDFS là:

- Ứng dụng cần quá trình truy cập với độ trễ cao, HDFS tối ưu quá trình truy cập file rất lớn

- Không thể lưu quá nhiều file trên cùng một cluster, khi đó NameNode cần lưu trên

bộ nhớ

- Không hỗ trợ nhiều bộ ghi, sửa, thêm dữ liệu bất kỳ

Trang 24

Khi kích thước của tập dữ liệu vượt quá khả năng lưu trữ của một máy tính, tất yếu sẽ dẫn đến nhu cầu phân chia dữ liệu lên trên nhiều máy tính Các hệ thống tập tin quản lý việc lưu trữ trên một mạng nhiều máy tính gọi là hệ thống tập tin phân tán Do hoạt động trên môi trường liên mạng, nên các hệ thống tập tin phân tán phức tạp hơn rất nhiều so với một hệ thống file cục bộ.

Hadoop Distributed File System (HDFS) tạo ra một nền tảng lưu trữ dữ liệu đáp ứng cho một khối lượng dữ liệu lớn và chi phí rẻ HDFS kế thừa các mục tiêu chung của các hệ thống file phân tán như độ tin cậy, khả năng mở rộng và hiệu suất hoạt động Tuy nhiên, HDFS ra đời dựa trên nhu cầu lưu trữ dữ liệu của Nutch (một

dự án dựa trên mã nguồn mở) để đáp ứng và đòi hỏi về lưu trữ dữ liệu và xử lý của các hệ thống xử lý dữ liệu lớn với các đặc thù riêng Do vậy, HDFS đã được phát triển hơn so với thời kỳ đầu của nó nên sẽ tạo ra sự khác biệt sau:

- Các lỗi về phần cứng sẽ thường xuyên xảy ra Hệ thống HDFS sẽ chạy trên các cluster với hàng trăm hoặc thậm chí hàng ngàn node Các node này được xây dựng nên từ các phần cứng thông thường, giá rẻ và tỷ lệ lỗi cao Chất lượng và số lượng của các thành phần phần cứng như vậy sẽ tất yếu dẫn đến tỷ lệ xảy ra lỗi trên cluster

sẽ cao như lỗi ứng dụng, lỗi hệ điều hành, lỗi đĩa cứng, lỗi bộ nhớ, … Vì thế, khả năng phát hiện lỗi, chống chịu lỗi và tự động phục hồi phải được tích hợp vào trong

hệ thống HDFS

- Kích thước file sẽ lớn hơn so với bản chuẩn gốc lần đầu tiên phát hành (bản truyền thống), các file có kích thước hàng GB sẽ trở nên phổ biến Khi làm việc trên các tập dữ liệu với kích thước nhiều terabyte, ít khi nào người ta lại chọn việc quản lý hàng tỷ file có kích thước hàng kilobyte, thậm chí nếu hệ thống có thể hổ trợ (điều quan trọng là việc phân chia tập dữ liệu thành một số lượng ít file có kích thước lớn

sẽ là tối ưu hơn)

- Hầu hết các file đều được thay đổi bằng cách đưa dữ liệu vào cuối file hơn là ghi đè lên dữ liệu hiện có Việc ghi dữ liệu lên một vị trí ngẫu nhiên trong file không hề tồn tại Một khi đã được tạo ra, các file sẽ trở thành file chỉ đọc (real-only), và thường được đọc một cách tuần tự Các kho dữ liệu lớn để các chương trình xử lý quét qua và phân tích dữ liệu, các dòng dữ liệu được tạo ra một cách liên tục qua

Trang 25

quá trình chạy các ứng dụng (như file log), có thể là kết quả trung gian của một máy này và lại được dùng làm đầu vào xử lý trên một máy khác nên nhiều loại dữ liệu sẽ phù hợp với các đặc điểm trên Vì vậy, việc dữ liệu được đưa vào file sẽ trở thành điểm chính để tối ưu hoá hiệu suất hơn.

Rất nhiều công ty lớn Hadoop cluster trên thế giới chạy HDFS Và Yahoo công ty chính của Hadoop với một cluster lên đến 1100 node với dung lượng HDFS 12PB, hay như Facebook, Amazon, cũng xây dựng HDFS với hàng trăm thậm chí hàng nghìn terabye

- Hệ thống sẽ lưu trữ một số lượng khiêm tốn các tập tin có kích thước lớn Nếu như

có vài triệu file với kích thước mỗi file lớn hơn vài trăm MB, các file có kích thước nhiều GB sẽ phổ biến và cần được quản lý một cách hiệu quả Các file có kích thước nhỏ cũng được hỗ trợ, nhưng trong những trường hợp này không cần tối ưu hoá

- HDFS không phải là một file hệ thống dành cho các mục đích chung HDFS được thiết kế dành cho các ứng dụng dạng xử lý khối Nên các file trên HDFS một khi được tạo ra, ghi dữ liệu và đóng lại thì không thể bị chỉnh sửa Điều này sẽ làm đơn giản hoá và đảm bảo tính nhất quán của dữ liệu và cho phép truy cập dữ liệu với thông lượng cao

Giống như các hệ thống file, HDFS duy trì một cấu trúc cây phân cấp các file, thư mục mà các file sẽ đóng vai trò là các node lá Trong HDFS, mỗi file sẽ được chia ra làm một hay nhiều block và mỗi block sẽ có một ID để nhận diện Các block cùng một file sẽ có kích thước và nó được gọi là block size của file đó Mỗi block file sẽ được lưu trữ ra nhiều bản sao khác nhau vì mục đích an toàn dữ liệu

Trang 26

HDFS có kiến trúc master/slave Trên một cluster chạy HDFS sẽ có hai loại node là NameNode và DataNode Một cluster có duy nhất một NameNode và có nhiều DataNode.

Namenode đó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 matadata khác nhau của

hệ thống file NameNode và Matasata lưu trữ gồm có:

- File System Namespace: là hình ảnh cây thư mục của hệ thống file một thời điểm nào đó File system namespace thể hiện tất 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 phân tán trên hệ thống file cục bộ của nó Mỗi block sẽ được lưu trữ như là một file riêng biệt trên hệ thống file cục bộ của DataNode

Trang 27

Hình 2 Kiến trúc của HDFS

NameNode sẽ chịu trách nhiệm điều phối các thao tác truy cập đọc/ghi tài liệu của client lên trên hệ thống HDFS Do đó, các DataNode là nơi thật sự lưu trữ 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 thao tác truy cập này Chẳng hạn khi hệ thống muốn đọc một file trên hệ thống HDFS, client này sẽ thực hiện một request thông qua RPC(Remote Procedure Call – Thủ tục gọi hàm từ xa là một kỹ thuật tiến bộ cho quá trình kết nối từ Client đến Server để sử dụng các ứng dụng và dịch vụ RPC cho phép client có thể kết nối tới 1 dịch vụ sử dụng dynamic port nằm ở một máy tính khác)đế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 trên từng block Client sẽ truy cập vào các DataNode để thực hiện các request đọc các block

Đị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

Trang 28

lại các metadata Cứ sau mỗi lần cập nhật lại, 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 metadatakhi đang chạy ở tình trạng thống nhất này được gọi là checkpoint Metadata ở trạng thái checkpoint sẽ được dùng để nhân bản metadata cho mục đích phục hồi lại NamenNode nếu như nó bị lỗi.

2.1.3.Namenode và quá trình tương tác giữa client và HDFS

Việc trên hệ thống HDFS chỉ tồn tại mỗi một NameNode đã 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 quá trình đọc/ghi

dữ liệu lên trên hệ thống để tránh tình trạng nút thắt cổ cổ chai, client sẽ không bao giờ đọc hay ghi dữ liệu lên trên hệ thống thông qua NameNode Thay vào đó, client

sẽ hỏi NameNode xem liên lạc nào để truy xuất dữ liệu, sau đó client sẽ hỏi lại thông tin trong bộ nhớ và kết nối lại với các DataNode để thực hiện các thao tác truy xuất dữ liệu

2.1.3.1.Quá trình đọc file

Client đọc file được thể hiện qua mô hình như sau:

Trang 29

Hình 2 Quá trình đọc file trên HDFS

Trước 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 đọc yêu cầu đọc có tồn tại không hoặc file cần đọc có ở trạng thái tốt hay không Nếu mọi thứ đều ổn, NameNode sẽ gửi danh sách các block 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 sau đó, client sẽ mở 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 ý, với mỗi block ta có thể 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

Client 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 (Application Programming Interface - Giao diện lập trình ứng dụng Mỗi hệ điều

Trang 30

hành, ứng dụng đều có những bộ API khác nhau Nó cung cấp cho người lập trình các hàm tương tác với CSDL, lập trình thực hiện các thao tác với hệ điều hành hay phần mềm đó) của Hadoop để tương tác với HDFS, các API sẽ 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.

 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

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.3.2.Quá trình ghi file

Trong quá trình client tạo một file trên HDFS và ghi dữ liệu lên file đó

Hình 2 Quá trình tạo và ghi file trên HDFS

Trang 31

Trước tiên, client sẽ gửi yêu cầu đến NameNode tạo một file lên File System Namspace (1), file mới được tạo sẽ rỗng (chưa có một block nào) Sau đó, namenode sẽ quyết định danh sách các datanode sẽ chứa các bản sao của file cần gì

và gửi lại cho client (2)

Client sẽ chia file ra thành các block, với mỗi block client sẽ đóng gói thành một packet ( mỗi block được lưu ra thành nhiều bản sao trên các datanode nhau tuỳ vào chỉ số độ nhân bản của file) Client gửi packet cho datanode thứ nhất, datanode thứ nhất sau khi nhận được packet sẽ tiến hành lưu lại bản sao thứ nhất của block Tiếp đó datanode thứ nhất sẽ gửi packet này cho datanode thứ hai để lưu ra bản sao thứ hai của block Tiếp theo datanode thứ hai sẽ gửi packet cho datanode thứ ba, cứ như vậy các datanode cũng lưu các bản sao của một block hình thành một ống dẫn

dữ liệu data pile

Sau khi DataNode cuối cùng nhận thành được packet, nó sẽ gửi lại cho DataNode thứ hai một gói xác nhận rằng đã lưu thành công (4) Và gói thứ hai lại gửi gói xác nhận tình trạng thành công của hai DataNode về DataNode thứ nhất.Client sẽ nhận được các báo cáo xác nhận từ DataNode thứ nhất cho tình trạng thành công của tất cả DataNode trên data pile

Nếu có bất kỳ một DataNode nào bị lỗi trong quá trình ghi dữ liệu, client sẽ tiến hành xác nhận lại các DataNode đã lưu thành công bản sao của block và thực hiện một hành vi ghi lại block lên trên DataNode bị lỗi

Sau khi tất cả các block của file đều đã đươc ghi lên các DataNode, client sẽ thực hiện một thông điệp báo cho NameNode nhằm cập nhật lại danh sách các block của file vừa tạo Thông tin Mapping từ Block Id sang danh sách các DataNode lưu trữ sẽ được NameNode tự động cập nhật bằng các định kỳ các DataNode sẽ gửi báo cáo cho NameNode danh sách các block mà nó quản lý

 Cũng giống như trong quá trình đọc, client sẽ trực tiếp ghi dữ liệu lên các DataNode

mà không cần phải thông qua NameNode Một đặc điểm nổi trội nữa là khi client ghi một block với chỉ số replication là n, tức nó cần ghi block lên DataNode, nhờ cơ

Trang 32

chế luân chuyển block dữ liệu qua ống dẫn (pipe) nên lưu lượng dữ liệu cần write từ client sẽ giảm đi n lần, phân đều ra các DataNode trên cluter.

2.1.3.3.Quá trình block size

Trên đĩa cứng, đơn vị lưu trữ dữ liệu nhỏ nhất không phải là byte, bit hay Kb

mà là một block Block size của đĩa cứng quy định lượng dữ liệu nhỏ nhất mà ta có thể đọc/ghi lên đĩa Các file system trên đĩa đơn trên windows hay unix cũng sử dụng block là đơn vị trao đổi dữ liệu nhỏ nhất, block size trên các file system thường là khoảng nhiều lần block size trên đĩa cứng

HDFS chia các file ra thành các block, và mỗi block sẽ được lưu trữ trên DataNode thành một file riêng biệt trên hệ thống file localhost Đây cũng là đơn vị trao đổi dữ liệu nhỏ nhất giữa HDFS và client của nó Block size là điểm quan trọng trong thiết kế HDFS, block size mặc định của HDFS là 64MB, thông thường trên các hệ thống lớn thì block size là 128MB, lớn hơn block size của các hệ thống file truyền thống nhiều lần

Việc sử dụng block size lớn, tức sẽ giảm số lượng block của một file mang lại một số thuận lợi Đầu tiên, sẽ làm giảm nhu cầu tương tác với Namenode của client

vì đọc/ghi trên một block chỉ cần một lần tương tác với Namenode của client để lấy block ID và lưu block đó Thứ hai, với block size lớn, client sẽ phải tương tác với Datanode ít hơn Mỗi lần client cần đọc một block ID trên Datanode, client phải tạo một kết nối TCP/IP đến Datanode Giảm số lượng block cần đọc sẽ giảm số lượng kết nối cần tạo, client sẽ thường làm việc với một kết nối bền vững hơn là tạo nhiều kết nối Thứ ba, giảm số lượng block của một file sẽ làm giảm khối lượng metadata trên NameNode, giúp chúng ta có thể đưa toàn bộ metadata vào bộ nhớ chính

Mặt khác, việc sử dụng block size lớn sẽ dẫn đến việc một file nhỏ chỉ có một vài block, thường chỉ là có một Điều này dẫn đến việc các DataNode lưu block này

sẽ trở thành điểm nóng khi có nhiều client cùng truy cập vào file Tuy nhiên, hệ thống HDFS đa phần chỉ làm việc trên các file có kích thước lớn với nhiều block nên sự bất tiện này là không đáng kể trong thực tiễn

Trang 33

Namenode lưu trữ ba loại metadata chính: file system namespace, thông tin ánh xạ filethành các block và thông tin nơi lưu trữ của các block Tất cả các metasata này được lưu trữ trong bộ nhớ chính NameNode Hai loại metadata này được lưu trữ bền vững bằng cách ghi nhật ký các thay đổi vào EditLog và FsImage được lưu trữ trên hệ thống file localhost của Namenode Việc sử dụng nhật ký để lưu trữ các thay đổi của metadata giúp cho chúng ta có thể thay đổi trạng thái của metadata một cách thuận tiện hơn Namenode sẽ hỏi các Datanode về thông tin các block mà nó lưu trữ mỗi khi một Datanode tham gia vào cluster

Cấu trúc dữ liệu lưu trong bộ nhớ:

Vì cấu trúc dữ liệu được lưu trong bộ nhớ chính nên các thao tác của Namenode sẽ nhanh Hơn nữa, điều này sẽ làm cho việc toàn bộ metadata diễn ra một cách dễ dàng Việc scan định kỳ này được dùng để cài đặt các tính năng như bộ thu nhặt rác câng bằng khối lượng dữ liệu lưu trữ giữa các DataNode Một bất lợi nữa của việc lưu trữ toàn bộ metadata là số lượng block trên cluster có thể bị giới hạn bởi chung lượng bộ nhớ của Namenode

Vị trí lưu các block :

NameNode sẽ không lưu trữ bền vững thông tin về nơi lưu trữ các bản sao của các block Nó chỉ hỏi các DataNode các thông tin đó lúc DataNode khởi động NameNode sẽ giữ cho thông tin nơi lưu trữ các block đươc cập nhật vì một điều đơn giản: NameNode điều khiển tất cả các thao tác sắp đặt các bản sao của các block lên các DataNode và quản lý tình trạng các DataNode bằng thông điệp HearBeat

Nhật ký thao tác:

EditLog chứa tất cả nhật ký các thao tác làm thay đổi tình trạng của metadata Ví dụ như việc tạo một file mới trong HDFS làm cho NameNode thêm một record mới vào trong EditLog ghi nhận hành động tạo file này Hoặc việc thay đổi chỉ số độ sao chép (replication level) của một file cũng tạo ra trên EditLog một record Vì EditLog rất quan trọng nên ta phải lưu ghi dữ liệu một cách tin cậy xuống

Trang 34

EditLog và không cho client thấy được sự thay đổi trên hệ thống cho đến khi sự thay đổi được cập nhật lên metadata và đã ghi nhật ký bền vững xuống EditLog EditLog được lưu trữ như một file trên hệthống file cục bộcủa NameNode

EditLog sẽ được dùng trong quá trình phục hồi hệthống với SecondaryNameNode Toàn bộ File System Namespace và thông tin ánh xạtừ file thành các block sẽ được lưu trữ trong một file tên FsImage trên hệ thống file cục bộ của NameNode

2.1.4.Các tính năng của NameNode

2.1.4.1.Nhận biết cấu trúc topology của mạng

Trong bối cảnh xử lý dữ liệu với kích thước lớn qua môi trường mạng, việc nhận biết ra giới hạn về băng thông giữa các node là một yếu tố quan trọng để Hadoop đưa ra các quyết định trong việc phân bố dữ liệu và phân tán tính toán Ý tưởng đo băng thông giữa hai node có vẻ như hợp lý, tuy nhiên làm được điều này

là khá khó khăn (vì 30 việc đo băng thông mạng cần được thực hiện trong một môi trường “yên tĩnh”, tức tại thời điểm đo thì không được xảy ra việc trao đổi dữ liệu qua mạng) Vì vậy, Hadoop đã sử dụng cấu trúc topology mạng của cluster để định lượng khả năng truyền tải dữ liệu giữa hai node bất kỳ.Hadoop nhận biết cấu trúc topology mạng của cluster qua một cấu trúc cây phân cấp

Cấu trúc này sẽgiúp Hadoop nhận biết được “khoảng cách” giữa hai node trên cluster Trên cấu trúc phân cấp này, các bridge sẽ đóng vai trò là các “node trong”

để phân chia mạng ra thành các mạng con (subnet) 2 node có cùng một node cha (cùng nằm trên một mạng con) thì được xem như là “nằm trên cùng một rack” Hadoop đưa ra một khái niệm là “địa chỉ mạng” để xác định vị trí tương đối của các node “Địa chỉ mạng” của một node bất kỳ sẽ là đường dẫn từ node gốc đến node xác định Ví dụ địa chỉ mạng của Node 1 của hình bên dưới sẽ là /Swicth 1/Rack 1/ Node 1.Hadoop sẽ tính toán “khoảng cách” giữa hai node bất kỳ đơn giản bằng tổng khoảng cách của 2 node đến node cha chung gần nhất Ví dụ như theo hình bên dưới, khoảng cách giữa Node 1 và Node 2 là 2, khoảng cách giữa Node 1

và Node 4 là 4

Trang 35

Hình 2 Cấu trúc tobology mạng

Hadoop đưa ra một số giả định sau đây về rack: Băng thông giảm dần theo thứ

tự sau đây

1 Các tiến trình trên cùng một node

2 Các node khác nhau trên cùng một rack

3 Các node nằm không cùng nằm trên một rack

- Hai node có “khoảng cách” càng gần nhau thì có băng thông giữa hai node đó càng lớn Giả định này khẳng định lại giả định đầu tiên

- Khả năng hai node nằm trên cùng một rack cùng bị lỗi (death) là cao hơn so với hai node nằm trên hai rack khác nhau Điều này sẽ được ứng dụng khi NameNode thực hiện sắp đặt các bản sao cho một block xuống các DataNode

2.1.4.2.Sắp xếp các bản sao của block lên DataNode

Trên HDFS, một file được chia ra thành nhiều block, và mỗi block sẽ được lưu trữ ra thành N bản sao trên N DataNode khác nhau, N được gọi là chỉ số mức độ sao chép (replication level) Với mỗi file trên HDFS, ta có thể quy định một chỉ số

Trang 36

replication level khác nhau Chỉ số này càng cao thì file càng “an toàn” Do mỗi block của file sẽ được lưu trữ ra càng nhiều bản sao trên các DataNode khác nhau.NameNode chọn DataNode nào để lưu các bản sao của một block Trong hệ thống có sự cân bằng giữa các yếu tố: độ tin cậy, băng thông đọc và băng thông ghi

dữ liệu Bản sao đầu tiên của một block dữ liệu sẽ được đặt trên cùng node với client (khi chương trình client thuộc cluster hoặc ngược lại NameNode sẽ chọn ngẫu nhiên một DataNode) Bản sao thứ hai sẽ được đặt trên một DataNode ngẫu nhiên nằm trên rack với node lưu bản sao đầu tiên, bản sao thứ ba sẽ được đặt trên một DataNode nằm cùng rack với node lưu bản sao thứ hai Cứ như vậy, các bản sao xa hơn được đặt trên các DataNode được chọn ngẫu nhiên Như vậy nó sẽ đảm bảo được cả ba yếu tố là độ tin cậy, băng thông đọc và băng thông ghi

2.1.4.3.Cân bằng cluster

Theo thời gian sự phân bố của các block dữ liệu trên các DataNode có thể mất cân đối, một số node lưu trữ quá nhiều block dữ liệu tròn khi một số node khác lại ít hơn Một cluster bị mất cân bằng có thể ảnh hưởng tới sự tối ưu hoá MapReduce và tạo áp lực lên các DataNode lưu trữ quá nhiều block dữ liệu Vì vậy phải tránh tình trạng mất cân bằng này

Một chương trình có tên balancer (chương trình sẽ chạy như một daemon trên NameNode) sẽ thực hiện cân bằng lại cluster Việc khởi động hay mở chương trình này sẽ độc lập với HDFS(khi HDFS đang chạy, ta có thể tự do tắt hay mở chương trình này) tuy nhiên nó vẫn là một thành phần trên HDFS Balancer sẽ định kỳ thực hiện phân tán lại các bản sao của block dữ liệu bằng cách di chuyển nó từ các DataNode đã quá tải sang những DataNode còn trống mà vẫn đảm bảo các chiến lược sắp xếp bản sao của các block lên các DataNode

2.1.4.4.Gabage collesttion (thu nhặt rác)

Sau khi một file trên HDFS bị delete bởi người dùng hoặc ứng dụng, nó sẽ không lập tức bị xoá bỏ khỏi HDFS Thay vào đó, đầu tiên HDFS sẽ đổi tên nó lại thành một file trong thư mục rác có tên /trash Các tập tin sẽ được phục hồi nhanh chóng nếu như nó vẫn còn ở trong thư mục rác Sau một thời gian xác định (chúng

Ngày đăng: 27/06/2016, 14:04

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w