Chào các bạn,
Sau hàng loạt những bài tổng quan lý thuyết, thì từ bài này trở đi chúng ta sẽ bắt đầu được tiếp xúc với công nghệ nhiều hơn. Cụ thể, chúng ta sẽ đi tìm hiểu về Apache Hadoop.
Mục lục
I. Hadoop là gì?
Hadoop là một framework cho phép xử lý big data trên hệ thống phân tán. Hadoop sẽ được cài đặt trên các máy trong hệ phân tán.
Một hệ thống phân tán với các máy cài Hadoop được gọi là một Hadoop cluster.
Bạn cũng có thể biết đến Hadoop như một hệ sinh thái có các thành phần cung cấp giải pháp cho big data.
Các máy trong hệ phân tán được đặt Hadoop sẽ được gọi là các node. Các node trong Hadoop chia làm 2 loại:
- Name node: một số tài liệu khác gọi là master node, là node tiếp nhận job và phân chia job cho các data node.
- Data node: một số tài liệu khác gọi là slave node, là các node nhận yêu cầu và xử lý yêu cầu từ data node.
Còn một số node khác nữa như secondary namenode chẳng hạn, nhưng tạm thời chúng ta chưa quan tâm tới các node này vội.
Nếu coi hệ thống phân tán là một team, thì name node giống như leader, data node giống như member của team.
Hadoop có thể hoạt động trên một máy (giống như 1 team chỉ có 1 member) hoặc mở rộng tới hàng ngàn máy, với mỗi máy đều có thể sử dụng để lưu trữ hoặc tính toán dữ liệu.
II. Cách hoạt động của Hadoop
Hadoop hoạt động dựa trên một thuật toán được gọi là MapReduce của Google. Thuật toán này sẽ chia nhỏ các công việc (job) thành các phần nhỏ và chia cho các máy trong hệ phân tán. Sau đó nó tổng hợp lại thành kết quả cuối cùng.
III. Hadoop làm gì?
Hadoop sinh ra để giải quyết hai vấn đề chính:
- 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ưu file 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.
III. 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.
IV. Các thành phần có trong Hadoop
Mình có đề cập ở ngay phần đầu, Hadoop còn có thể coi như một hệ sinh thái, bởi bên trong Hadoop lại bao gồm nhiều thành phần. Cụ thể các thành phần có trong Hadoop bao gồm:

- MapReduce: Đây chính là thành phần để bạn “viết code” xử lý cho bài toán của bạn. Là nơi để bạn định nghĩa các job.
- HDFS: Viết tắt của Hadoop Distributed File System, đây là thành phần xử lý việc lưu trữ file phân tán của Hadoop.
- Yarn Framework: Quản lý lập lịch các job và quản lý tài nguyên các node.
- Common Utilities: Là các thư viện được viết bằng Java, cung cấp các phương thức tiện ích cho các module Hadoop khác.
Về cơ bản chúng ta sẽ làm việc nhiều với MapReduce và HDFS, 2 thành phần còn lại sẽ ít sử dụng hơn.
V. Tổng kết
Một bài viết tổng quan về Hadoop giúp bạn có cái nhìn tổng quan về công cụ này trước khi đi vào bước cài đặt. Trong bài viết này, có một số ý quan trọng như sau:
- Hadoop là một framework cho phép xử lý big data trên hệ thống phân tán
- Các node trong mạng phân tán cài đặt Hadoop được chia làm 2 loại: Name node (master), data node (slave)
- Hadoop sinh ra để giải quyết 2 vấn đề: Lưu trữ phân tán và tính toán phân tán.
- Hadoop có 4 thành phần: MapReduce, HDFS, Yarn, Common Utilities.
Bài sau chúng ta sẽ tìm hiểu về cách cài đặt Hadoop trên Ubuntu 18.04.
- Giới thiệu series tìm hiểu Big data cơ bản
- Big data là gì
- Giới thiệu về Apache Hadoop
- Tìm hiểu về hệ thống phân tán
- Hướng dẫn cài đặt Hadoop cluster trên Ubuntu18.04
- Tìm hiểu về HDFS
- Kiến trúc HDFS
- Một số command line tương tác với HDFS
- Tương tác với HDFS thông qua restful api với WebHDFS
- … Còn nữa… mình đang viết