Hadoop HDFS là gì

Trong thời đại công nghệ 4.0 ngày nay, có lẽ các bạn được nghe rất nhiều về AI, big data Machine Learning hay điện toán đám mây… Nhưng tất cả những công nghệ đó đều phải dựa vào tài nguyên của người dùng đó là Big data.

Vậy Big Data là gì? Big Data là một tập hợp dữ liệu rất lớn và rất phức tạp đến nỗi những công cụ, kỹ thuật xử lý dữ liệu truyền thống không thể nào đảm đương được. Hiện nay BIg data đang là một trong những ưu tiên hàng đầu của các công ty công nghệ trên toàn thế giới, vậy những kỹ thuật hiện đại nào sẽ giúp các công ty giải quyết được vấn đề của Big Data? Và hôm nay mình xin giới thiệu về Hadoop, một framework được dùng phổ biến nhất để giải quyết các bài toán về Big Data.

1. Hadoop là gì?

Hadoop là một Apache framework nguồn mở viết bằ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ó được thiết kế để mở rộng quy mô từ một máy chủ đơn sang hàng ngàn máy tính khác có tính toán và lưu trữ cục bộ [local computation and storage]. 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 Map-Reduce và hệ thống file phân tán Google File System [GFS]. Và có cung cấp cho chúng ta một môi trường song song để thực thi các tác vụ Map-Reduce.

Nhờ có cơ chế streaming mà Hadoop có thể phát triển trê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++, Pyhthon, Pearl,...

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

Hadoop có một cấu trúc liên kết master-slave. Trong cấu trúc này, chúng ta có một node master và nhiều node slave . Chức năng của node master là gán một tác vụ cho các node slave khác nhau và quản lý tài nguyên. Các node slave là máy tính thực tế có thể không mạnh lắm. Các node slave lưu trữ dữ liệu thực trong khi trên master chúng ta có metadata.

Kiến trúc Hadoop gồm có ba lớp chính đó là

  • HDFS [Hadoop Distributed File System]
  • Map-Reduce
  • Yarn

2.1 HDFS [Hadoop Distributed File System]

  • Là hệ thống file 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.
  • Cho phép truy xuất nhiều ổ đĩa như là 1 ổ đĩa. Nói cách khác, chúng ta có thể sử dụng một ổ đĩa mà gần như không bị giới hạn về dung lượng. Muốn tăng dung lượng chỉ cần thêm node [máy tính] vào hệ thống.
  • Có kiến trúc Master-Slave
  • NameNode chạy trên máy chủ Master, có tác vụ quản lý Namespace và điều chỉnh truy cập tệp của client
  • DataNode chạy trên các nút Slave. có tác vụ lưu trữ business data thực tế
  • Một tập tin với định dạng HDFS được chia thành nhiều block và những block này được lưu trữ trong một tập các DataNodes
  • Kích thước 1 block thông thường là 64MB, kích thước này có thể thay đổi được bằng việc cấu hình

2.2 Map-Reduce

Map-Reduce là một framework dùng để viết các ứng dụng xử lý song song một lượng lớn dữ liệu có khả năng chịu lỗi cao xuyên suốt hàng ngàn cluster[cụm] máy tính

Map-Reduce thực hiện 2 chức năng chính đó là MapReduce

  • Map: Sẽ thực hiện đầu tiên, có chức năng tải, phân tích dữ liệu đầu vào và được chuyển đổi thành tập dữ liệu theo cặp key/value
  • Reduce: Sẽ nhận kết quả đầu ra từ tác vụ Map, kết hợp dữ liệu lại với nhau thành tập dữ liệu nhỏ hơn

Để dễ hiểu hơn, chúng ta hãy cùng xem ví dụ WordCount sau đây. WordCount là bài toán đếm tần suất xuất hiện của các từ trong đoạn văn bản. Và chúng ta sẽ mô tả quá trình xử lý bài toán này bằng Map-Redue

Đối với hàm Map:

  • Input là 1 đoạn văn bản
  • Output là các cặp

Hàm Map được thực hiện song song để xử lý các tập dữ liệu khác nhau.

Đối Với hàm Reduce:

  • Input có dạng , trong đó list là tập hợp các giá trị đếm được của mỗi từ
  • Output:

Hàm Reduce cũng được chạy song song để xử lý các tập từ khoá khác nhau.

Giữa hàm Map và Reduce có một giai đoạn xử lý trung gian gọi là hàm Shuffle. Hàm này có nhiệm vụ sắp xếp các từ và tổng hợp dữ liệu đầu vào cho Reduce từ các kết quả đầu ra của hàm Map.

2.3 Yarn

YARN [Yet-Another-Resource-Negotiator] là một framework hỗ trợ phát triển ứng dụng phân tán YARN cung cấp daemons và APIs cần thiết cho việc phát triển ứng dụng phân tán, đồng thời xử lý và lập lịch sử dụng tài nguyên tính toán [CPU hay memory] cũng như giám sát quá trình thực thi các ứng dụng đó.

Bên trong YARN, chúng ta có hai trình quản lý ResourceManager và NodeManage

  • ResourceManager: Quản lý toàn bộ tài nguyên tính toán của cluster.
  • NodeManger: Giám sát việc sử dụng tài nguyên của container và báo cáo với ResourceManger. Các tài nguyên ở đây là CPU, memory, disk, network,...

Quá trình 1 ứng dụng chạy trên YARN được mô tả bằng sơ đồ trên qua các bước sau:

  • Client giao 1 task cho Resource Manager
  • Resource Manager tính toán tài nguyên cần thiết theo yêu cầu của ứng dụng và tạo 1 App Master [App Mstr]. Application Master được chuyển đến chạy 1 một node tính toán. Application Master sẽ liên lạc với các NodeManager ở các node khác để ra yêu cầu công việc cho node này.
  • Node Manager nhận yêu cầu và chạy các task trên container
  • Các thông tin trạng thái thay vì được gửi đến JobTracker sẽ được gửi đến App Master.

ResourceManger có hai thành phần quan trọng đó là Scheduler và ApplicationManager

Scheduler có trách nhiệm phân bổ tài nguyên cho các ứng dụng khác nhau. Đây là Scheduler thuần túy vì nó không thực hiện theo dõi trạng thái cho ứng dụng. Nó cũng không sắp xếp lại các tác vụ bị lỗi do lỗi phần cứng hoặc phần mềm. Bộ lập lịch phân bổ các tài nguyên dựa trên các yêu cầu của ứng dụng

ApplicationManager có chức năng sau:

  • Chấp nhận nộp công việc.
  • Đàm phán container đầu tiên để thực thi ApplicationMaster. Một nơi chứa kết hợp các yếu tố như CPU, bộ nhớ, đĩa và mạng.
  • Khởi động lại container ApplicationMaster khi không thành công.

Chúng ta có thể mở rộng YARN ngoài một vài nghìn node thông qua tính năng YARN Federation. Tính năng này cho phép chúng ta buộc nhiều cụm YARN thành một cụm lớn. Điều này cho phép sử dụng các cụm độc lập, ghép lại với nhau cho một job rất lớn

Tham khảo

//hadoop.apache.org/docs/current/index.html

//blog.vietnamlab.vn/2019/09/10/kien-truc-hadoop/

//expressmagazine.net/

//blog.vietnamlab.vn/

//www.talend.com/resources/what-is-mapreduce/

Có bao giờ bạn băn khoăn lượng dữ liệu của các công ty công nghệ lớn như Facebook, Amazon, Google, ... thu thập mỗi ngày và được xử lý như thế nào mà vẫn đảm bảo tốc độ truy cập một cách nhanh chóng và hiệu quả nhất.

Từ đấy chúng ta biết đến BIG DATA. Nó là thuật ngữ dùng để chỉ một tập hợp dữ liệu rất lớn và rất phức tạp đến nỗi những công cụ, ứng dụng xử lí dữ liệu truyền thống không thể nào đảm đương được. Tuy nhiên, Big Data lại chứa trong mình rất nhiều thông tin quý giá mà nếu trích xuất thành công, nó sẽ giúp rất nhiều cho việc kinh doanh, nghiên cứu khoa học, dự đoán các dịch bệnh sắp phát sinh và thậm chí là cả việc xác định điều kiện giao thông theo thời gian thực.

Hiện nay việc xử lý BIG DATA đang một trong những ưu tiên hàng đầu của các công ty công nghệ trên toàn thế giới. Nên những framwork giúp việc xử lý BIG DATA cũng đang ngày càng được chú ý và phát triển mạnh.

Bài viết này sẽ giới thiệu về Hadoop, một trong các công nghệ cốt lõi cho việc lưu trữ và truy cập số lượng lớn dữ liệu.

Hadoop là gì?

Hadoop là một framwork giúp lưu trữ và xử lý Big Data áp dụng MapReduce. Nói đơn giản cách khác nó sẽ giúp sắp xếp dữ liệu sao cho user có thể dễ dàng sử dụng nhất.

MapReduce được Google tạo ra ban đầu để xử lý đống dữ liệu lớn của công ty họ. Ta còn có thể gọi phương pháp này là Phân tán dữ liệu vì nó tách hết tập hợp các dữ liệu ban đầu thành các dữ liệu nhỏ và sắp xếp lại chúng để dễ dàng tìm kiếm và truy xuất hơn, đặc biệt là việc truy xuất các dữ liệu tương đồng. Ví dụ thường thấy nhất là các đề xuất mà ta hay thấy ở Google tìm kiếm

Như vậy mô hình lập trình Map Reduce là nền tảng ý tưởng của Hadoop. Bản thân Hadoop là một framework cho phép phát triển các ứng dụng phân tán phần cứng thông thường . Các phần cứng này thường có khả năng hỏng hóc cao. Khác với loại phần cứng chuyên dụng đắt tiền, khả năng xảy ra lỗi thấp như các supermicrocomputer chẳng hạn.

Hadoop viết bằ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.

Kiến trúc Hadoop

Hadoop gồm 4 module:

  • Hadoop Common: Đây là các thư viện và tiện ích cần thiết của Java để các module khác sử dụng. Những thư viện này cung cấp hệ thống file và lớp OS trừu tượng, đồng thời chứa các mã lệnh Java để khởi động Hadoop.
  • Hadoop YARN: Đây là framework để quản lý tiến trình và tài nguyên của các cluster.
  • Hadoop Distributed File System [HDFS]: Đây là hệ thống file phân tán cung cấp truy cập thông lượng cao cho ứng dụng khai thác dữ liệu.
  • Hadoop MapReduce: Đây là hệ thống dựa trên YARN dùng để xử lý song song các tập dữ liệu lớn.

Hiện nay Hadoop đang ngày càng được mở rộng cũng như được nhiều framwork khác hỗ trợ như Hive, Hbase, Pig. Tùy vào mục đích sử dụng mà ta sẽ áp dụng framework phù hợp để nâng cao hiệu quả xử lý dữ liệu của Hadoop.

Hadoop hoạt động như thế nào?

Giai đoạn 1:

Một user hay một ứng dụng có thể submit một job lên Hadoop [hadoop job client] với yêu cầu xử lý cùng các thông tin cơ bản:

  • Truyền dữ liệu lên server[input] để bắt đầu phân tán dữ liệu và đưa ra kết quả [output].
  • Các dữ liệu được chạy thông qua 2 hàm chính là map và reduce.
    • Map: sẽ quét qua toàn bộ dữ liệu và phân tán chúng ra thành các dữ liệu con.
    • Reduce: sẽ thu thập các dữ liệu con lại và sắp xếp lại chúng.
  • Các thiết lập cụ thể liên quan đến job thông qua các thông số truyền vào.

Giai đoạn 2:

Hadoop job client submit job [file jar, file thực thi] và bắt đầu lập lịch làm việc[JobTracker] đưa job vào hàng đợi .

Sau khi tiếp nhận yêu cầu từ JobTracker, server cha[master] sẽ phân chia công việc cho các server con[slave]. Các server con sẽ thực hiện các job được giao và trả kết quả cho server cha.

Giai đoạn 3:

TaskTrackers dùng để kiểm tra đảm bảo các MapReduce hoạt động bình thường và kiểm tra kết quả nhận được [quá trình output].

Khi “chạy Hadoop” có nghĩa là 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ủ.

Ưu điểm của Hadoop

  • Hadoop framework cho phép người dùng nhanh chóng viết và kiểm tra các hệ thống phân tán. Đây là cách hiệu quả cho phép phân phối dữ liệu và công việc xuyên suốt các máy trạm nhờ vào cơ chế xử lý song song của các lõi CPU.
  • Hadoop không dựa vào cơ chế chịu lỗi của phần cứng fault-tolerance and high availability [FTHA], thay vì vậy bản thân Hadoop có các thư viện được thiết kế để phát hiện và xử lý các lỗi ở lớp ứng dụng.
  • Hadoop có thể phát triển lên nhiều server với cấu trúc master-slave để đảm bảo thực hiện các công việc linh hoạt và không bị ngắt quãng do chia nhỏ công việc cho các server slave được điều khiển bởi server master.
  • Hadoop có thể tương thích trên mọi nền tảng như Window, Linux, MacOs do được tạo ra từ Java.

Cài đặt

Tải Hadoop về máy

wget //apache.claz.org/hadoop/common/hadoop-2.4.1/hadoop-2.4.1.tar.gz

Unzip tệp tải về

tar xzf hadoop-2.4.1.tar.gz

Đổi tên thư mục cho dễ nhìn =]]

mv hadoop-2.4.1 to hadoop

Cài đặt môi trường cho Hadoop dùng vi ~/.bashrc và thêm những dòng sau rồi dùng lệnh source ~/.bashrc để thực thi thay đổi

export HADOOP_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

Truy cập thư mục hadoop/etc/hadoop và sửa các file sau:

  • hadoop-env.sh thay thế đoạn JAVA_HOME thành export JAVA_HOME=/usr/local/jdk-... theo version java máy bạn cài đặt
  • core-site.xml thêm :
fs.default.name hdfs://localhost:9000 yarn.nodemanager.aux-services mapreduce_shuffle
  • copy cp mapred-site.xml.template mapred-site.xml rồi thêm:
mapreduce.framework.name yarn dfs.permissions false dfs.replication 1 dfs.name.dir file:///home/hadoop/hadoopinfra/hdfs/namenode dfs.data.dir file:///home/hadoop/hadoopinfra/hdfs/datanode

Khởi động hadoop:

Khởi tạo namenode

hdfs namenode -format

Chạy server hadoop:

start-dfs.sh start-yarn.sh

Truy cập localhost:50070: overview của hadoop

Truy cập localhost:8088: ta có thể xem các job mapreduce đang chạy ở đây

Các daemon khi khởi chạy Hadoop sẽ bao gồm:

  • NameNode
  • DataNode
  • SecondaryNameNode
  • JobTracker
  • TaskTracker

Tham khảo thêm tại:

//kipalog.com/posts/Co-ban-ve-Hadoop

//www.tutorialspoint.com/hadoop/hadoop_enviornment_setup.htm

//www.mastercode.vn/blog/web-development/hadoop-la-gi-huong-dan-cai-dat-cau-hinh-hadoop-tren-windows.84

Video liên quan

Chủ Đề