Tải bản đầy đủ (.pdf) (25 trang)

Báo Cáo Dự Án Đề Tài Tìm Hiểu Về Hadoop Distributed File System (Hdfs).Pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.15 MB, 25 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Mục lục

<b>Mục lục...2</b>

<b>Chương 1: Mở đầu... 3</b>

I. Giới thiệu...3

II. Big Data... 3

III. Apache Hadoop... 5

<b>Chương 2: HDFS...10</b>

I) Cách NameNode quản lý siêu dữ liệu...10

II) Sập DataNode và cơ chế sao chép... 11

III) Rack Awareness trong HDFS...12

IV) Cơ chế kiểm tra Checksum... 13

V) Kiến trúc HDFS...14

VI) Cơ chế đọc của HDFS...15

VII) Cơ chế viết của HDFS... 16

II) Các thao tác với cơ sở dữ liệu... 27

<b>Tài liệu tham khảo... 28</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

Chương 1: Mở đầu

<b>I.Giới thiệu</b>

Ngày này việc các cơ sở dữ liệu ngày càng khổng lồ kéo theo đó là việc lưu trữ, thao tác và tính tốn dựa trên lượng dữ liệu đó cũng phải phát triển theo để có thể thích ứng. Việc xử lý những dữ liệu này khơng chỉ cịn là việc đọc và đưa ra kết quả đơn thuần mà còn yêu cầu hiệu quả và nhanh chóng, nhận thấy nhu cầu đó, các cơng ty, tập đồn lớn đã cung nhiều nhiều cơng cụ để thao tác với “Dữ liệu lớn” (Big Data) có thể kể đến như Amazon EMR (Elastic MapReduce) của Amazon, IBM InfoSphere BigInsights của IBM, Google Cloud Dataflow của Google,... Trong giới hạn bài báo cáo này thì chúng ta sẽ chỉ tìm hiểu về Apache Hadoop.

<b>II.Big Data</b>

Ngày nay, dữ liệu được sản sinh ngày càng nhiều và phức tạp, các nhà nghiên cứu ước tính có tới 328,77 triệu terabytes dữ liệu được tạo ra mỗi ngày và con số trên đang không ngừng tăng. Dữ liệu đến từ mọi nơi như điện thoại, máy tính và các loại thiết bị IoT, dưới mọi kiểu hình thức từ văn bản, âm thanh tới hình ảnh. Tập dữ liệu khổng lồ và phức tạp trên thường được biết đến với tên gọi là “Big data”. Đó là khái niệm thu thập những hiểu biết hữu ích từ lượng lớn dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc có thể được sử dụng để ra quyết định hiệu quả trong môi trường kinh doanh. Big data là dữ liệu có 3 đặc trưng quan trọng sau:

● Độ đa dạng: các kiểu dữ liệu khác nhau, thường là phi cấu trúc.

● Dung lượng tăng dần: trong big data, ta cần phải xử lý lượng lớn dữ liệu phân tán và phi cấu trúc.

● Tốc độ ngày càng cao: tốc độ ở đây là tốc độ dữ liệu tới hệ thống và tốc độ nó cần được xử lý tại đó.

Ngồi ra cịn có 2 đặc trưng khác mới được quan tâm tới gần đây là:

● Giá trị: dữ liệu ln có giá trị nhưng cách tận dụng giá trị đó có thể khác nhau. ● Tính xác thực: độ tin cậy của dữ liệu.

Do các đặc trưng nói trên mà dữ liệu rất khó quản lý bằng các cơng cụ cơ sở dữ liệu truyền thống. Trọng tâm của các kỹ thuật Big Data là lưu trữ và sử dụng dữ liệu một cách hiệu quả. Một số ứng dụng của Big Data có thể kể tới bao gồm:

● Phát triển sản phẩm theo nhu cầu, thị yếu của người dùng bằng cách sử dụng dữ liệu trong quá khứ về các mối quan tâm, thói quen của người dùng.

● Bảo trì hệ thống thiết bị bằng cách dự đốn các sự cố cơ khí bằng cách sử dụng dữ liệu nhật kí của thiết bị, dữ liệu cảm biến, thông điệp báo lỗi hay nhiệt độ thiết bị. ● Học máy hiện giờ đang là một công nghệ đang phát triển vơ cùng mạnh mẽ và big

data chính là nền tảng cho sự phát triển đó.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Mặc dù Big Data có rất nhiều tiềm năng, thử thách cũng đi cùng với chúng. Big Data là vô cùng lớn, mặc dù các kỹ thuật công nghệ mới đang được phát triển liên tục, lượng thông tin được ước tính tăng gấp đơi mỗi hai năm do vậy các tổ chức gặp khá nhiều khó khăn để bắt kịp với nó. Việc lưu trữ dữ liệu cũng phải mang tính chọn lọc dựa theo mức độ hữu dụng của dữ liệu đó với người dùng. Để giải quyết những vấn đề nói trên, một trong những giải pháp phổ biến là sử dụng công nghệ Apache Hadoop.

<b>III.Apache Hadoop</b>

A. Giải pháp của Hadoop:

Hadoop là một framework sử dụng kỹ thuật lưu trữ phân tán và xử lý song song để lưu trữ và quản lý dữ liệu lớn. Nó là phần mềm được sử dụng nhiều nhất bởi các nhà phân tích dữ liệu để xử lý dữ liệu lớn, và kích thước thị trường của nó vẫn tiếp tục tăng trưởng. Hadoop bao gồm ba thành phần chính: Hadoop Distributed File System (HDFS) là đơn vị lưu trữ, Hadoop MapReduce là đơn vị xử lý và Hadoop YARN là đơn vị xử lý tài nguyên.

Vậy lưu trữ phân tán và xử lý song song là như thế nào? Trước đây khi dữ liệu còn hạn chế việc lưu trữ và xử lý dữ liệu được thực hiện bởi một đơn vị xử lý dữ liệu và một bộ lưu trữ duy nhất, trong khi đó với lượng dữ liệu lớn và đa dạng như hiện nay thì chỉ một đơn vị xử lý dữ liệu là không đủ, cần đến nhiều bộ xử lý chạy song song với các đơn vị lưu trữ được phân chia cho từng bộ.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

B. Lý do sử dụng Hadoop:

Hadoop là một cơng nghệ hữu ích cho các nhà phân tích dữ liệu. Một vài tính năng quan trọng trong Hadoop khiến nó được trọng dụng có thể kể đến như:

- Hệ thống có khả năng lưu trữ và xử lý lượng dữ liệu khổng lồ với tốc độ rất nhanh. Một tập dữ liệu bán cấu trúc, cấu trúc và khơng cấu trúc có thể khác nhau tùy thuộc vào cách dữ liệu được cấu trúc.

- Hadoop hỗ trợ phân tích thời gian thực và tải cơng việc lịch sử, tăng cường quá trình ra quyết định vận hành và phân tích thời gian thực.

- Dữ liệu có thể được lưu trữ bởi các tổ chức và có thể được lọc cho các mục đích phân tích cụ thể khi cần.

- Một số lượng lớn các nút có thể được thêm vào Hadoop vì nó có tính mở rộng, do đó các tổ chức có thể thu thập nhiều dữ liệu hơn.

- Cơ chế bảo vệ ngăn các ứng dụng và quá trình xử lý dữ liệu bị ảnh hưởng bởi sự cố phần cứng. Các nút bị ngừng hoạt động sẽ được tự động chuyển hướng đến các nút khác, cho phép các ứng dụng hoạt động mà khơng bị gián đoạn.

C. Các thành phần chính của Hadoop: a. Hadoop HDFS:

Dữ liệu được lưu trữ theo cách phân tán trong HDFS. Có hai thành phần của HDFS - name node và data node. Trong đó name node là duy nhất cịn data nodes thì có nhiều. HDFS được thiết kế đặc biệt để lưu trữ bộ dữ liệu khổng lồ trong phần cứng thương mại. Phiên bản doanh nghiệp của máy chủ có giá khoảng 10.000 USD mỗi terabyte cho toàn bộ bộ xử lý. Trong trường hợp bạn cần mua 100 máy chủ phiên bản doanh nghiệp này, số tiền sẽ lên tới một triệu đô la.

Hadoop cho phép bạn sử dụng các máy thương mại làm nút dữ liệu của mình. Bằng cách này, bạn không cần phải chi hàng triệu đô la chỉ cho các nút dữ liệu của mình. Tuy nhiên, name node luôn là máy chủ doanh nghiệp.

Đặc điểm của HDFS:

● Cung cấp lưu trữ phân tán

● Có thể được thực hiện trên phần cứng hàng hóa ● Cung cấp bảo mật dữ liệu

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Một cụm HDFS được cấu thành nên bởi các master node và slave nodes, name node chính là master và các data nodes là slaves.

Name node chịu trách nhiệm về hoạt động của các nút dữ liệu. Nó cũng lưu trữ siêu dữ liệu (meta data).

Các nút dữ liệu đọc, ghi, xử lý và sao chép dữ liệu. Chúng cũng gửi tín hiệu, được gọi là nhịp tim, đến nút tên. Những nhịp tim này hiển thị trạng thái của nút dữ liệu.

Hãy xem xét rằng 30TB dữ liệu được tải vào nút tên. Name node phân phối nó trên các nút dữ liệu và dữ liệu này được sao chép giữa các ghi chú dữ liệu. Bạn có thể thấy trong hình trên rằng dữ liệu màu xanh lam, xám và đỏ được sao chép giữa ba nút dữ liệu.

Việc sao chép dữ liệu được thực hiện ba lần theo mặc định. Nó được thực hiện theo cách này, vì vậy nếu máy thơng thường bị lỗi, bạn có thể thay thế nó bằng một máy mới có cùng dữ liệu.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

b. Hadoop MapReduce

Hadoop MapReduce là đơn vị xử lý của Hadoop. Trong phương pháp MapReduce, quá trình xử lý được thực hiện tại các nút phụ và kết quả cuối cùng được gửi đến nút chính. Theo phương pháp truyền thống thì dữ liệu sẽ được gửi từ các Slave Nodes đến Master Nodes để tổng hợp và xử lý. Trong khi đó thì ở Hadoop MapReduce, dữ liệu sẽ được xử lý theo cách song song tại mỗi DataNodes trước khi được gửi đến MasterNode để tổng hợp. Đó là lý do tại sao MapReduce có thể xử lý một lượng lớn dữ liệu một cách “song song và phân phối” (parallel and distributed).

Dữ liệu chứa mã được sử dụng để xử lý toàn bộ dữ liệu. Dữ liệu được mã hóa này thường rất nhỏ so với chính dữ liệu đó. Bạn chỉ cần gửi mã có giá trị vài kilobyte để thực hiện quy trình nặng trên máy tính.

MapReduce bao gồm hai giai đoạn như chính tên gọi của nó là Map và Reduce:

- Ở giai đoạn Map, dữ liệu đầu vào sẽ được chia thành các mảnh nhỏ hơn và xử lý một cách độc lập bởi nhiều worker nodes (hay chính là slave nodes) một cách song song. Mỗi worker node áp dụng một hàm map vào dữ liệu đầu vào và tạo ra một cặp khóa key-value làm giá trị đầu ra

- Dữ liệu đầu ra của giai đoạn Map được trộn và sắp xếp sau đó kết quả sẽ tiến vào giai đoạn Reduce. Trong giai đoạn Reduce, cặp khóa key-value được tạo ra ở giai đoạn Map được nhóm lại theo khóa (key) và hàm reduce sẽ được áp dụng cho mỗi nhóm để tạo ra kết quả cuối cùng.

Trong ví dụ này, dữ liệu đầu vào có ba dịng văn bản với ba thực thể riêng biệt - “tàu xe buýt”, “tàu tàu thủy”, “xe buýt tàu thủy”. Sau đó, tập dữ liệu được chia thành ba phần, dựa trên các thực thể này và được xử lý song song.

Trong giai đoạn lập bản đồ, dữ liệu được gán một khóa và giá trị là 1. Trong trường hợp này, chúng ta có một xe bt, một ơ tơ, một con tàu và một chuyến tàu.

Các cặp khóa-giá trị này sau đó được xáo trộn và sắp xếp cùng nhau dựa trên khóa của chúng. Ở giai đoạn rút gọn, quá trình tổng hợp diễn ra và thu được đầu ra cuối cùng.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

c. Hadoop Yarn:

Hadoop YARN là viết tắt của Yet Another Resource Negotiator. Đây là đơn vị quản lý tài nguyên của Hadoop và có sẵn như một thành phần của Hadoop phiên bản 2.

● Hadoop YARN hoạt động giống như một hệ điều hành cho Hadoop. Nó là một hệ thống tập tin được xây dựng ở trên HDFS.

● Nó chịu trách nhiệm quản lý cụm tài nguyên để đảm bảo bạn không làm quá tải một máy.

● Nó thực hiện lập kế hoạch cơng việc để đảm bảo rằng các công việc được sắp xếp ở đúng nơi.

Giả sử một máy khách muốn thực hiện một truy vấn hoặc tìm nạp một số mã để phân tích dữ liệu. u cầu cơng việc này được chuyển đến người quản lý tài nguyên (Hadoop Yarn), chịu trách nhiệm phân bổ và quản lý tài nguyên.

Trong phần node, mỗi node đều có node managers. Những node managers này quản lý các nút và giám sát việc sử dụng tài nguyên trong node. Các container chứa một tập hợp các tài nguyên vật lý, có thể là RAM, CPU hoặc ổ cứng. Bất cứ khi nào có yêu cầu công việc, app master sẽ yêu cầu container từ node managers. Sau khi trình node managers nhận được tài nguyên, nó sẽ quay trở lại Resource Manager.

D. Cơ chế hoạt động của Hadoop:

Chức năng chính của Hadoop là xử lý dữ liệu một cách có tổ chức giữa cụm phần mềm thương mại. Khách hàng nên gửi dữ liệu hoặc chương trình cần được xử lý. Hadoop HDFS lưu trữ dữ liệu. YARN, MapReduce phân chia tài nguyên và phân cơng nhiệm vụ cho dữ liệu. Hãy tìm hiểu chi tiết hoạt động của Hadoop.

● Dữ liệu đầu vào của máy khách được HDFS chia thành các khối 128 MB. Các khối được sao chép theo hệ số sao chép: các DataNode khác nhau chứa các liên kết và các bản sao của chúng.

● Người dùng có thể xử lý dữ liệu sau khi tất cả các khối đã được đặt trên DataNodes HDFS.

● Máy khách gửi chương trình MapReduce cho Hadoop để xử lý dữ liệu.

● Sau đó, phần mềm do người dùng gửi được ResourceManager lên lịch trên các cụm nodes cụ thể.

● Kết quả được ghi lại vào HDFS sau khi tất cả các nút xử lý đã hoàn tất.

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Chương 2: HDFS

<b>I) Cách NameNode quản lý siêu dữ liệu</b>

NameNode lưu metadata và để quản lý metadata, NameNode duy trì 2 cấu trúc dữ liệu chính là khơng gian tên (Namespace) và bản đồ khối (BlockMap).

Namespace là một cấu trúc cây phân cấp đại diện cho cấu trúc thư mục của hệ thống tệp. Mỗi node trong cây đại diện cho một tệp hoặc một thư mục. Mỗi node thư mục chứa một danh sách các nodes con, trong khi mỗi node tệp chứa thông tin như tên tệp, chủ sở hữu, quyền truy cập và thời gian sửa đổi.

BlockMap là một ánh xạ của các khối dữ liệu tới các DataNodes lưu trữ các khối. Nó chứa thơng tin về việc DataNodes nào giữ các bản sao của từng khối và bản sao nào được coi là hợp lệ.

Như đã nói ở trên thì NameNode lưu trữ metadata, cịn metadata sẽ đưa ra thơng tin về vị trí các tệp, kích cỡ các khối,...

Metadata trong HDFS được duy trì bởi hai tệp:

● editlog: Lần theo các thay đổi vừa được thực hiện ở trong HDFS ● fsimage: Lần theo mọi thay được thực hiện trong HDFS kể từ lúc bắt đầu

Có hai vấn đề xảy ra là khi kích cỡ của file editlog tăng lên hay là NameNode sụp đổ và giải pháp là tạo các bản sao của editlog và fsimage (hay nói cách khác là tạo ra một NameNode thứ 2 để duy trì bản sao của editlog và fsimage).

NameNode thứ 2 đóng vai trị quan trọng trong cơ chế Checkpoint. Sau một khoảng thời gian được định sẵn, nó sẽ tổng hợp hai bản sao thành một tệp fsimage duy nhất sau đó cập nhật tệp mới được tạo ra này vào tệp fsimage trên node chính. Tệp editlog trên node chính sau đó sẽ cắt bớt để tạo chỗ cho các bản ghi thay đổi mới.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

II) Sập DataNode và cơ chế sao chép

Giả sử mỗi blocks dữ liệu chỉ được lưu trữ trên một DataNode, lúc này nếu một Node bị sập sẽ dần tới việc mất block dữ liệu do khơng có bản ghi nào của nó được lưu trữ trên hệ thống

Điều này dẫn tới giải pháp là sử dụng cơ chế sao chép: Các tệp được phân nhỏ ra thành các blocks dữ liệu và được phân phối ra các DataNodes. Các blocks này sẽ được sao chép trên các DataNodes khác nhau để có thể hỗ trợ khả năng chịu lỗi của hệ thống

Lúc này khi Node 5 bị sập thì các block dữ liệu có trên nó vẫn cịn trên các Node khác để khơi phục

Hệ số sao chép là được đặt một cách mặc định là 3, có nghĩa là ta sẽ có tổng cộng 3 bản sao của mỗi datablock.

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>III) Rack Awareness trong HDFS</b>

Rack là một tập hợp khoảng 30 tới 40 DataNodes. Rack Awareness là một cơ chế thiết lập để cải thiện tính khả năng chịu lỗi và hiệu suất của hệ thống, nó giúp quyết định xem một bản ghi của block dữ liệu nên được lưu trữ ở đâu

Mục đích của Rack Awareness là giúp cải thiện độ tin cậy, tính có sẵn của dữ liệu, tăng hiệu quả sử dụng băng thông.

<b>IV) Cơ chế kiểm tra Checksum</b>

Một block dữ liệu khi lấy ra từ DataNode có thể bị hỏng (corrupted). Việc này có thể là do thiết bị lưu trữ, đường truyền mạng hoặc xung đột phần mềm,... Phần mềm bên phía khách của HDFS có nhiệm vụ thực hiện kiểm tra checksum trên nội dung của các tệp HDFS. Khi bên phía khách tạo một tệp HDFS, nó tính tốn checksum cho từng block của tệp và lưu trữ các checksum này trong các tệp ẩn trong cùng một HDFS namespace. Khi phía khách lấy dữ liệu từ tệp, nó sẽ kiểm tra xem dữ liệu nhận được từ mỗi DataNode có khớp với checksum được lưu trữ trong tệp checksum khơng. Nếu khơng, bên phía khách sẽ có thể lấy block đó từ một DataNode khác.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>V) Kiến trúc HDFS</b>

Kiến trúc HDFS bao gồm NameNode với DataNodes, giữa NameNode và DataNodes sử dụng HeartBeat để giao tiếp, liên tục gửi đi tín hiệu cho biết trạng thái của DataNode.

Các DataNodes được đặt trong các rack khác nhau và trong các rack khác nhau có các phiên bản sao chép của các DataNodes.

Tiếp đến là ta có máy client (người lập trình), ban đầu sẽ yêu cầu NameNode đọc dữ liệu. NameNode cho phép client đọc dữ liệu được yêu cầu từ DataNodes, sau đó NameNode sẽ cập nhật Metadata operations ở trong phần MetaData của nó và kết thúc request. Một cơng việc khác của NameNode là thực thi các Block operations khi client đẩy dữ liệu lên. Block operations bao gồm các cơng việc như tạo, xóa hay sao chép block.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>VI) Cơ chế đọc của HDFS</b>

Đầu tiên HDFS client mở một kết nối tới Distributed FileSystem, gửi một yêu cầu đọc dữ liệu tới NameNode sử dụng RPC. Khi này NameNode sẽ kiểm tra xem liệu client này có quyền đọc dữ liệu trong u cầu khơng, nếu có NameNode sẽ cung cấp cho client vị trí của block chứa dữ liệu đó và một token. Token này được client sử dụng để xác thực quyền được đọc với DataNode chứa block đó. HDFS client sẽ đọc dữ liệu ở DataNodes thông qua trung gian là FSData InputStream. Sau khi đọc xong kết nối tới FDSData InputStream sẽ được đóng, các token sẽ bị xóa đi.

</div>

×