Hadoop là gì?
Hadoop is an open-source framework developed by Apache that enables the creation of distributed applications for storing and managing large datasets.
Hadoop triển khai mô hình MapReduce, cho phép ứng dụng được phân chia thành nhiều phân đoạn nhỏ và thực hiện song song trên nhiều node khác nhau.
Hadoop được viết bằng Java tuy nhiên vẫn hỗ trợ C++, Python, Perl bằng cơ chế streaming.
Mục đích của các doanh nghiệp là khai thác khối lượng dữ liệu khổng lồ để đưa ra quyết định kinh doanh chính xác Hadoop hỗ trợ các công ty trong việc xử lý lượng dữ liệu lớn, từ terabyte đến petabytes, một cách hiệu quả và tiết kiệm chi phí.
Các doanh nghiệp đang tích cực khai thác thông tin quý giá từ lượng lớn dữ liệu phi cấu trúc, bao gồm web log, công cụ clickstream và các sản phẩm truyền thông xã hội.
Chính yếu tố đó dẫn làm tăng sự quan tâm đến công nghệ mã nguồn mởHadoop.
Hadoop là một dự án phần mềm mã nguồn mở của Apache, được phát triển dựa trên khung phần mềm MapReduce của Google, nhằm quản lý và xử lý khối lượng lớn dữ liệu có cấu trúc và phi cấu trúc.
Không giống như các hệ quản trị cơ sở dữ liệu truyền thống, Hadoop được thiết kế để làm việc với nhiều loại dữ liệu và dữ liệu nguồn
Công nghệ HDFS của Hadoop cho phép chia nhỏ khối lượng công việc lớn thành các khối dữ liệu nhỏ hơn, giúp nhân rộng và phân phối chúng trên phần cứng của một cluster, từ đó tăng tốc độ xử lý.
Công nghệnày đã được sử dụng rộng rãi bởi một số trang web lớn nhất thế giới, chẳng hạn như Facebook, eBay, Amazon, Baidu, và Yahoo
Các nhà quan sát nhấn mạnh rằng Yahoo là một trong những nhà đóng góp lớn nhất đối với Hadoop.
Kiến trúc Hadoop
Một cụm Hadoop nhỏ gồm 1 master node và nhiều worker/slave node Toàn bộ cụm chứa 2 lớp, một lớp MapReduce Layer và lớp kia là HDFS Layer
Mỗi lớp có các thành phần liên quan riêng Master node gồm JobTracker,
TaskTracker, NameNode, và DataNode Slave/worker node gồm DataNode, và TaskTracker Cũng có thể slave/worker node chỉ là dữ liệu hoặc node để tính toán.
Hadoop Distributed File System (HDFS) là hệ thống tập tin phân tán, cung cấp khả năng truy cập với thông lượng cao cho các ứng dụng khai thác dữ liệu HDFS hoạt động như một hệ thống tập tin ảo, cho phép lưu trữ và quản lý dữ liệu một cách hiệu quả.
Khi di chuyển một tập tin trên HDFS, hệ thống tự động chia nhỏ tập tin thành nhiều mảnh Các mảnh nhỏ này được nhân bản và lưu trữ trên nhiều máy chủ khác nhau, nhằm nâng cao khả năng chịu lỗi và đảm bảo tính sẵn sàng cao.
HDFS employs a master/slave architecture, where the master consists of a NameNode responsible for managing file metadata, and one or more slave DataNodes that store the actual data.
Tập tin định dạng HDFS được chia thành nhiều khối, lưu trữ trên các DataNodes NameNode đảm nhận việc ánh xạ các khối đến DataNodes, trong khi các DataNode thực hiện các tác vụ đọc và ghi dữ liệu trên hệ thống file.
Chúng cũng quản lý việc tạo, huỷ, và nhân rộng các khối thông qua các chỉ thị từ NameNode.
Hadoop MapReduce là một hệ thống dựa trên YARN, được thiết kế để xử lý song song các tập dữ liệu lớn Phương pháp này chia nhỏ các vấn đề dữ liệu lớn thành những đoạn nhỏ hơn và phân tán chúng trên nhiều máy chủ khác nhau.
Mỗi máy chủ sở hữu một tập hợp tài nguyên riêng biệt và thực hiện xử lý dữ liệu tại chỗ Sau khi hoàn tất quá trình xử lý, dữ liệu sẽ được gửi trở lại máy chủ chính.
MapReduce gồm một single master (máy chủ) JobTracker và các slave (máy trạm) TaskTracker trên mỗi cluster-node
Master có vai trò quan trọng trong việc 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 cho các tác vụ trên máy trạm Ngoài ra, Master còn chịu trách nhiệm theo dõi các tác vụ này và thực thi lại những tác vụ bị lỗi để đảm bảo hiệu suất hoạt động.
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ụ (task-status) để master theo dõi.
JobTracker là một điểm yếu của Hadoop Mapreduce Nếu JobTracker bị lỗi thì mọi công việc liên quan sẽ bị ngắt quãng.
Hadoop Common là tập hợp các thư viện và tiện ích Java thiết yếu cho các module khác trong hệ sinh thái Hadoop Những thư viện này không chỉ cung cấp hệ thống file và lớp trừu tượng của hệ điều hành mà còn chứa mã lệnh Java cần thiết để khởi động Hadoop.
3 Hadoop YARN: Quản lý tài nguyên của các hệ thống lưu trữ dữ liệu và chạy phân tích.
MapReduce
MapReduce là một “mô hình lập trình” (programming model), lần đầu báo cáo trong bài báo của Jefferey Dean và Sanjay Ghemawat ở hội nghị OSDI 2004
MapReduce chỉ là một ý tưởng, một abstraction Để hiện thực nó thì cần một implementation cụ thể.
Google has implemented MapReduce using C++, while Apache offers Hadoop, an open-source implementation primarily based on Java, which users typically access through a Java interface.
Khối dữ liệu lớn được cấu trúc thành nhiều cặp (key, value), và để xử lý khối dữ liệu này, lập trình viên cần viết hai hàm là map và reduce.
Hàm map nhận đầu vào là một cặp (k1, v1) và trả về một danh sách các cặp (k2, v2) Lưu ý rằng các khóa và giá trị đầu vào cũng như đầu ra có thể thuộc các kiểu dữ liệu khác nhau.
Như vập hàm Map có thể được viết một cách hình thức như sau: map(k1,v1) -> list(k2,v2)
MR sẽ thực hiện hàm map do người dùng viết cho từng cặp (key, value) trong khối dữ liệu đầu vào, đồng thời chạy nhiều phiên bản của hàm map song song trên các máy tính trong cluster.
Sau giai đoạn này thì chúng ta có một tập hợp rất nhiều cặp (key, value) thuộc kiểu (k2, v2) gọi là các cặp (key, value) trung gian
MR cũng sẽ nhóm các cặp này theo từng key, như vậy các cặp (key, value} trung gian có cùng k2 sẽ nằm cùng một nhóm trung gian.
Trong giai đoạn hai của MR, hàm reduce do người dùng viết sẽ được áp dụng cho từng nhóm trung gian Cụ thể, hàm này có thể được mô tả như sau: reduce(k2, list(v2)) -> list(v3).
K2 là khóa chung của nhóm trung gian, trong khi list(v2) chứa các giá trị trong nhóm Đồng thời, list(v3) là danh sách các giá trị trả về từ hàm Reduce thuộc kiểu dữ liệu v3.
Do Reduce được áp dụng vào nhiều nhóm trung gian độc lập nhau, chúng lại một lần nữa có thể được chạy song song với nhau.
Một ví dụ cơ bản về MR là bài đếm từ trong tiếng Anh, đây là một bài toán quan trọng mà mọi công cụ tìm kiếm cần thực hiện.
Quản lý hàng triệu, thậm chí hàng tỉ file trên một cluster với hàng nghìn máy tính là một thách thức lớn, không giống như việc xử lý chỉ vài chục file.
Ta lập trình MR bằng cách viết 2 hàm cơ bản với pseudo-code như sau: void map(String name, String document) :
// name: document name // document: document contents for eạach word w in document:
EmitTntermediate(w, ”1"); void reduce(String word, Iterator partialCounts) :
// word: a word // partialCounts: a list of aggregated partlal counts int result = 0; for each pc in partialCounts: result += Parselnt(pc);
Chỉ với hai primitives này, lập trình viên có rất nhiều Flexibility để phân tích và xử lý các khối dữ liệu khống lồ
MapReduce (MR) has been utilized for a variety of applications, including Distributed Grep, Distributed Sort, and Web Link-graph Reversal It also plays a crucial role in Term-vector Per Host analysis, Web Access Log Statistics, Inverted Index Construction, Document Clustering, Machine Learning, Statistical Machine Translation, and Large-scale Graph Computation.
Hệ thống tệp phân tán Hadoop
Các vấn đề Hadoop có thể giải quyết
• Hadoop có khả năng làm việc cùng với một khối lượng dữ liệu vô cùng lớn
Hầu hết các nguồn dữ liệu có thể được xử lý trong môi trường phân tán và đồng bộ, đồng thời được lưu trữ trên nhiều phần cứng khác nhau.
Hadoop có khả năng tối ưu hóa băng thông giữa các thiết bị lưu trữ vật lý trong kho dữ liệu, tuy nhiên, để phát huy hiệu quả tối đa, việc quản lý và nâng cấp hệ thống một cách kịp thời là rất cần thiết.
Hướng giải quyết của Hadoop
HDFS (Hadoop Distributed File System) có nhiệm vụ quản lý các file phân tán bằng cách chia nhỏ kho dữ liệu thành nhiều phần khác nhau, đồng thời đảm bảo rằng tất cả dữ liệu này được quản lý một cách hệ thống và nhất quán.
Mô hình MapReduce là một trong những thành phần quan trọng của Hadoop, cho phép chia nhỏ các tác vụ thành nhiều phần để dễ dàng xử lý Các tác vụ này được xử lý song song trên các Node CPU khác nhau và được đồng bộ với máy chủ quản lý Master Node.
Hadoop hoạt động như thế nào?
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:
1 Nơi lưu (location) dữ liệu input, output trên hệ thống dữ liệu phân tán.
2 Các java class ở định dạng jar chứa các dòng lệnh thực thi các hàm map và reduce.
3 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.
Khách hàng Hadoop sẽ gửi công việc (bao gồm file jar và file thực thi) cùng với các thiết lập cho JobTracker Sau đó, hệ thống master sẽ phân phối tác vụ đến các máy slave để theo dõi và quản lý tiến trình của chúng, đồng thời cung cấp thông tin về tình trạng và chẩn đoán liên quan đến job-client.
TaskTrackers trên các node khác nhau thực thi tác vụ MapReduce và trả về kết quả output được lưu trong hệ thống file.
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
Các điểm thuận lợi khi dùng Hadoop:
• Hadoop có khả năng thêm nhiều node mới và thay đổi được các cấu hình của chúng một cách dễ dàng
Các doanh nghiệp có thể tiết kiệm chi phí đầu tư ban đầu bằng cách không cần phải đầu tư quá nhiều vào phần cứng mạnh khi triển khai Hadoop.
• Hadoop có khả năng xử lý được hầu hết những kho dữ liệu có cấu trúc hoặc không có cấu trúc một cách dễ dàng
Trong quá trình hoạt động, nếu một node trong hệ thống gặp lỗi, nền tảng Hadoop sẽ tự động chuyển sang node dự phòng khác Điều này giúp hệ thống duy trì hoạt động ổn định và liên tục.
• Hadoop đó là mã nguồn mở, điều này giúp nó tương thích rất nhiều cấu hình và platform khác nhau
Demo cài đặt Hadoop
+ Cài JAVA: Hadoop yêu cầu tối thiếu là java 1.5.x Tuy nhiên , bản 1.6.x được khuyến khích khi sử dụng cho hadoop
+ Đầu tiên tạo một thư mục có tên là Java.
+ Dowload Java SE Development Kit (JDK) về máy.Mở JDK và cài đặt
+ Đường dẫn của Java phải không cách, nếu có sẽ bị lỗi không thể format được Chọn Change để thay đổi đường dẫn.
+ Folde name: đặt đường dẫn đến thư mục Java vừa tạo.
+ Cài đặt môi trường cho HADOOP
+ Mở Edit the system environment variables để cấu hình biến môi trường.
+ Click vào Environment Variables để thay đổi.
Variable name: đặt tên là JAVA_HOME
Variable value: dẫn đến thư mục Java vừa tạo.
Variable name: đặt tên là HADOOP_HOME
Variable value: dẫn đến thư mục Hadoop vừa tạo.
+ Chọn ‘Path’, rồi click Edit để sửa
+ Chọn New để thêm đường dẫn Java và Hadoop
%JAVA_HOME%\bin | %HADOOP_HOME%\bin | %HADOOP_HOME%\sbin
Các file cho phép cấu hình Hadoop nằm trong thư mục: \hadoop-3.1.3\etc\hadoop.
Các file cần điều chỉnh để cấu hình cho hệ thống gồm: core-site.xml, hdfs-site.xml, yarn-site.xml, và mapred-site.xml.
Ngoài ra bạn cũng cần thay đổi một số cấu hình trong file cấu hình môi trường của Hadoop trên windows là hadoop-env.cmd
Với file môi trường hadoop-env.cmd:
Cần thêm Path của JAVA_HOME vào hadoop-env.cmd set JAVA_HOME=C:\Java
Các file cấu hình cần được điều chỉnh như sau:
+ core-site.xml nên được chỉnh sửa:
Tệp hdfs-site.xml nên được chỉnh sửa.
Tệp mapred-site.xml nên được chỉnh sửa :
Tệp workers nên được chỉnh sửa.
+ Tạo New folder có tên là data
Trong data tạo tiếp 3 New folder lần lượt là datanode, namenode, temp
+ Tạo một thư mục có tên là local
Tải và giải nén winutils-master
Winutils-master cung cấp các tiện ích dòng lệnh cơ bản cho
Hadoop trên Windows. o File System operation equivalent to HDFS - Fs Shell o Hdfs Task and service operation.
Nó hoạt động với hadoop.dll để truy cập cục bộ vào hệ thống tệp Mình đang sử dụng phiên bản 3.1.3, nhưng do winutils-master không có bản 3.1.3, nên mình đã sử dụng bản 3.1.2 Vì vậy, hãy đảm bảo sử dụng phiên bản winutils tương thích với phiên bản Hadoop đang cài đặt, tức là phiên bản run as administrater -> mở notepad theo đường dẫn
Mở CMD lên vào gõ lệnh ipconfig để xem địa chỉ ip máy -> gõ vào và save
Dòng đầu ip của máy chủ hadoop-namenode
Dòng 2 ip máy con hadoop-datanode2
Tương tự với node 2 cả node3 và node4 đều là node con.
+ VÀO CMD bằng run as administrater, gõ java –version kiểm tra bản java hiện tại, gõ hadoop –vesion kiểm trả bản hadoop hiện tại
Để định dạng NameNode trong Hadoop, bạn cần sử dụng lệnh "hadoop namenode -format" Lệnh này chỉ nên được thực hiện một lần khi cài đặt Hadoop và không được sử dụng nếu hệ thống tệp Hadoop đã hoạt động, vì nó sẽ xóa toàn bộ dữ liệu trong HDFS.
+ Gõ start-all để bắt đầu. Để đảm bảo rằng tất cả các dịch vụ đã bắt đầu thành công, chúng ta có thể chạy lệnh sau: jps
Nó sẽ hiển thị các dịch vụ sau: DataNode, ResourceManager, NameNode,
Giao diện người dùng web Hadoop
HDFS là gì?
HDFS là viết tắt của Hadoop Distributed File System và nó là 1 hệ thống lưu trữ chính được dùng bởi Hadoop
Nó cung cấp truy cập hiệu suất cao đến dữ liệu trên các cụm Hadoop và thường được triển khai trên phần cứng chi phí thấp Tuy nhiên, các máy chủ này dễ gặp phải lỗi phần cứng.
HDFS được thiết kế với khả năng chịu lỗi cao, nhờ vào tốc độ truyền dữ liệu nhanh chóng giữa các nodes, giúp giảm thiểu nguy cơ xảy ra lỗi.
HDFS chia nhỏ dữ liệu lớn thành các mảnh nhỏ và phân phối chúng trên nhiều nút khác nhau Đồng thời, nó cũng sao chép mỗi mảnh dữ liệu này nhiều lần trên các nút khác nhau để đảm bảo tính an toàn và khả năng phục hồi dữ liệu.
Hệ thống HDFS tự động xử lý dữ liệu lỗi bằng cách sử dụng dữ liệu từ một node khác, đảm bảo tính liên tục trong quá trình xử lý Đây là một tính năng quan trọng giúp tăng cường độ tin cậy của hệ thống.
Các tính năng của HDFS
Kiến trúc của HDFS hoạt động theo mô hình master/slave, trong đó mỗi cluster HDFS bao gồm một NameNode NameNode đóng vai trò là máy chủ chính, quản lý hệ thống tập tin và điều chỉnh quyền truy cập đến các tập tin khác nhau.
Trong hệ thống HDFS, mỗi máy chủ dữ liệu được bổ sung bởi một DataNode, với một DataNode tương ứng cho mỗi máy chủ Tập tin lớn trong HDFS được chia thành nhiều khối, và các khối này được lưu trữ trên một tập hợp các DataNodes.
NameNode có vai trò quan trọng trong việc mở, đóng và đổi tên các tập tin cũng như thư mục, đồng thời quản lý quyền truy cập vào hệ thống tập tin Ngược lại, DataNode chủ yếu thực hiện việc đọc và ghi dữ liệu vào hệ thống tập tin, đồng thời chịu trách nhiệm tạo, xóa hoặc nhân bản dữ liệu theo chỉ dẫn từ NameNode.
Trong thực tế, NameNode và DataNode là phần mềm được thiết kế để chạy trên máy chủ, được viết bằng Java
Namenode đóng vai trò quan trọng trong việc điều phối các thao tác truy cập dữ liệu (đọc/ghi) của client trên hệ thống HDFS Trong khi đó, các DataNode là nơi lưu trữ thực tế các block của file trên HDFS, và chúng sẽ trực tiếp thực hiện các thao tác truy cập này.
Khi khách hàng của hệ thống cần truy cập một tệp trên HDFS, họ sẽ gửi yêu cầu thông qua RPC đến Namenode để nhận được các metadata liên quan đến tệp đó.
Metadata provides a list of file blocks and the locations of DataNodes that store replicas of each block Clients access these DataNodes to fulfill requests for reading the blocks.
Namenode thực hiện chức năng của mình thông qua daemon tên namenode, hoạt động trên cổng 8021, trong khi mỗi DataNode server chạy daemon datanode trên cổng 8022 Định kỳ, các DataNode báo cáo cho NameNode về danh sách các block mà chúng lưu trữ, giúp NameNode cập nhật lại metadata của mình.
Sau mỗi lần cập nhật, Metadata trên NameNode sẽ đồng bộ hóa với dữ liệu trên các DataNode, tạo ra một trạng thái thống nhất Trạng thái của metadata trong tình trạng này được gọi là checkpoint.
Metadata ở trạng thái checkpoint sẽ được dùng để nhân bản metadata dùng cho mục đích phục hồi lại NameNode nếu NameNode bị lỗi.
Kiến trúc HDFS
Trong bài viết này, bạn cần nắm rõ các khái niệm như master, slave, NameNode và DataNodes, cũng như quy trình đọc và ghi file trên HDFS Khi một client muốn đọc file trên HDFS, bước đầu tiên là gửi yêu cầu đến NameNode Tiếp theo, NameNode sẽ kiểm tra xem file yêu cầu có tồn tại và có đang ở trạng thái “khoẻ mạnh” hay không.
If everything is functioning correctly, the NameNode will provide a list of blocks (represented by Block IDs) associated with the file, along with the addresses of the DataNodes that store replicas of these blocks.
Tiếp theo, client sẽ mở các 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
Lưu ý là 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 Họ sẽ tiếp tục quá trình đọc các block một cách lặp đi lặp lại cho đến khi hoàn tất việc đọc block cuối cùng của file.
Quá trình đọc dữ liệu từ HDFS của client diễn ra một cách minh bạch với người dùng và ứng dụng Người dùng tương tác với HDFS thông qua một tập API của Hadoop, các API này ẩn đi quá trình giao tiếp với NameNode và kết nối với các DataNode để lấy dữ liệu.
To write a file on HDFS, the client first sends a request to the NameNode to create a file entry in the File System Namespace The newly created file will be empty, meaning it does not yet contain any blocks.
Afterward, the NameNode determines which DataNodes will store the replicas of the required file and communicates this information back to the client The client then divides the necessary file into blocks, packaging each block into a packet for processing.
Lưu ý là mỗi block sẽ được lưu ra thành nhiều bản sao trên các DataNode khác 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 theo 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.
DataNode thứ hai sẽ gửi gói dữ liệu cho DataNode thứ ba, và quá trình này tiếp tục diễn ra Các DataNode sẽ lưu trữ các bản sao của một block, từ đó tạo thành một ống dẫn dữ liệu (data pipe) hiệu quả.
Sau khi DataNode đầu tiên nhận được gói dữ liệu, nó sẽ gửi một gói xác nhận cho DataNode thứ hai, thông báo rằng việc lưu trữ đã thành công DataNode thứ hai tiếp tục gửi gói xác nhận về tình trạng thành công của cả hai DataNode trở lại DataNode đầu tiên Cuối cùng, Client sẽ nhận báo cáo xác nhận từ DataNode đầu tiên về trạng thái thành công của tất cả các DataNode trong pipeline dữ liệu.
Nếu một DataNode gặp lỗi trong quá trình ghi dữ liệu, client sẽ xác nhận các DataNode đã lưu thành công bản sao của block và thực hiện ghi lại block lên DataNode bị lỗi.
Sau khi tất cả các block của file được ghi lên các DataNode, client sẽ gửi thông điệp cho NameNode để cập nhật danh sách các block của file mới tạo.