Hadoop là một software framework hỗ trợ các ứng dụng phân tán dữ liệu chuyên sâu. Nó cho phép các ứng dụng có thể dễ dàng làm việc với hàng ngàn máy tính tính toán độc lập cũng như petabyte dữ liệu. Trong bài viết hôm nay, Vietnix sẽ hướng dẫn các bạn cách cài đặt Hadoop ở chế độ Stand-Alone trên Ubuntu 20.04.
Giới thiệu về Hadoop
Hadoop bao gồm bốn lớp chính:
- Hadoop Common là tập hợp các tiện ích và thư viện hỗ trợ các Hadoop module khác.
- HDFS (Hadoop Distributed File System) có nhiệm vụ duy trì dữ liệu trên đĩa.
- YARN (Yet Another Resource Negotiator) là “operating system” cho HDFS.
- MapReduce là mô hình xử lý ban đầu cho các Hadoop cluster. Lớp này giúp phân chia công việc trong cluster hoặc map, sau đó sắp xếp và rút gọn kết quả từ các nodes thành phản hồi cho truy vấn.
Các Hadoop cluster tương đối phức tạp để thiết lập, vì vậy project cần có chế độ stand-alone phù hợp để tìm hiểu về Hadoop, thực hiện các thao tác đơn giản và debug.
Trong hướng dẫn này, bạn sẽ cài đặt Hadoop ở chế độ stand-alone và chạy một trong các chương trình MapReduce mẫu để xác minh cài đặt.
Điều kiện để có thể cài đặt Hadoop ở chế độ Stand-Alone trên Ubuntu 20.04
Để thực hiện theo hướng dẫn này bạn cần phải có một máy chủ Ubuntu 20.04 với tài khoản người dùng non-root và có quyền sudo
.
Vietnix hiện đang cung cấp nhiều gói VPS tốc độ cao với cấu hình đa dạng, chi phí hợp lý chỉ từ 89.000VND/Tháng, có hỗ trợ hệ điều hành Ubuntu. Nếu chưa có máy chủ Ubuntu để thực hiện cài đặt Hadoop, bạn có thể tham khảo các gói dịch VPS tại Vietnix.
Bước 1: Cài đặt Java
Đầu tiên tiến hành đăng nhập, cập nhật package list của bạn và cài đặt OpenJDK, Java Development Kit mặc định trên Ubuntu 20.04:
sudo apt update
sudo apt install default-jdk
Sau khi cài đặt hoàn tất, hãy kiểm tra version.
java -version
Output
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Output như trên có nghĩa là OpenJDK đã được cài đặt thành công.
Bước 2: Cài đặt Hadoop
Với Java sẵn có, bạn sẽ truy cập trang Releases Hadoop của Apache (http://hadoop.apache.org/releases.html) để tìm bản phát hành ổn định gần đây nhất.
Điều hướng đến binary cho bản phát hành bạn muốn cài đặt. Trong bài này, bạn sẽ cài đặt Hadoop 3.3.1, nhưng bạn có thể sử dụng phiên bản bạn muốn với hướng dẫn sau đây.
Trên trang tiếp theo, nhấp chuột phải và sao chép liên kết đến tệp binary releases.
Trên server, bạn sẽ sử dụng wget
để fetch nó:
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
Lưu ý: Trang web Apache sẽ chủ động chuyển hướng bạn đến mirror tốt nhất, vì vậy URL của bạn có thể không khớp với URL ở trên.
Để đảm bảo rằng file bạn đã tải xuống không bị thay đổi, bạn có thể kiểm tra nhanh bằng cách sử dụng SHA-512 hoặc Secure Hash Algorithm 512. Quay lại trang Releases, sau đó nhấp chuột phải và sao chép liên kết vào file checksum cho tệp binary release mà bạn đã tải xuống:
Sử dụng wget
trên server của bạn để tải xuống tệp:
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz.sha512
Sau đó chạy lệnh kiểm tra:
shasum -a 512 hadoop-3.3.1.tar.gz
Output
2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66 hadoop-3.3.1.tar.gz
So sánh giá trị này với giá trị SHA-512 trong tệp .sha512
:
cat hadoop-3.3.1.tar.gz.sha512
...
SHA512 (hadoop-3.3.1.tar.gz) = 2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66
...
Output từ lệnh bạn vừa chạy so với tệp bạn đã tải xuống từ mirror phải khớp với giá trị trong tệp bạn đã tải xuống từ apache.org .
Giờ bạn đã verified rằng tệp không bị corrupted hoặc thay đổi, bạn có thể giải nén nó:
tar -xzvf hadoop-3.3.1.tar.gz
Sử dụng lệnh tar
có flag -x
để trích xuất, -z
để giải nén, -v
cho verbose output và -f
để chỉ định rằng bạn đang giải nén từ một tệp.
Cuối cùng, bạn sẽ di chuyển các tệp đã giải nén vào /usr/local
, nơi thích hợp cho locally để thiết lập phần mềm:
sudo mv hadoop-3.3.1 /usr/local/hadoop
Bước 3: Định cấu hình Trang chủ Java của Hadoop
Hadoop yêu cầu bạn đặt đường dẫn Path tới Java, dưới dạng biến môi trường hoặc trong tệp cấu hình Hadoop.
Đường dẫn đến Java, /usr/bin/java
là một liên kết tượng trưng (symlink) đến /etc/alternatives/java
, nghĩa là một liên kết tượng trưng đến nhị phân Java mặc định. Bạn sẽ sử dụng readlink
với flag-f
để theo dõi mọi liên kết tượng trưng trong mọi phần của đường dẫn, theo cách đệ quy (recursive). Sau đó, bạn sẽ sử dụng sed
để trim bin/java
từ output để cung cấp giá trị chính xác cho JAVA_HOME
.
Để tìm đường dẫn Java mặc định chạy lệnh sau:
readlink -f /usr/bin/java | sed "s:bin/java::"
Output
/usr/lib/jvm/java-11-openjdk-amd64/
Bạn có thể sao chép kết quả này để cài đặt trang chủ Java của Hadoop thành phiên bản cụ thể này, thao tác này đảm bảo rằng nếu Java mặc định thay đổi, thì giá trị này sẽ không thay đổi. Ngoài ra, bạn có thể sử dụng lệnh Dynamic readlink
trong tệp để Hadoop sẽ tự động sử dụng bất kỳ phiên bản Java nào được đặt làm mặc định cho hệ thống.
Để bắt đầu, hãy mở hadoop-env.sh
:
sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
Sau đó, sửa đổi tệp bằng cách chọn một trong các option sau:
Option 1: Cài đặt một Static Value
. . .
#export JAVA_HOME=
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
. . .
Option 2: Sử dụng Readlink để cài đặt Value Dynamically
. . .
#export JAVA_HOME=
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
. . .
Nếu bạn gặp khó khăn khi tìm những dòng này, hãy sử dụng CTRL+W
để tìm kiếm nhanh qua văn bản. Khi bạn đã hoàn tất, nhấn CTRL+X
để thoát và lưu tệp của bạn.
Bước 4: Running Hadoop
Bây giờ bạn đã có thể run Hadoop:
/usr/local/hadoop/bin/hadoop
Output
Usage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
or hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
where CLASSNAME is a user-provided Java class
OPTIONS is none or any of:
--config dir Hadoop config directory
--debug turn on shell script debug mode
--help usage information
buildpaths attempt to add class files from build tree
hostnames list[,of,host,names] hosts to use in slave mode
hosts filename list of hosts to use in slave mode
loglevel level set the log4j level for this command
workers turn on worker mode
SUBCOMMAND is one of:
. . .
Output này có nghĩa là bạn đã cấu hình thành công Hadoop để chạy ở chế độ stand-alone.
Bạn phải đảm bảo rằng Hadoop đang hoạt động bình thường bằng cách chạy chương trình MapReduce mẫu mà nó đi kèm. Để làm như vậy, hãy tạo một thư mục có tên input
trong thư mục chính của bạn và sao chép các tệp cấu hình của Hadoop vào đó để sử dụng các tệp đó làm dữ liệu.
mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input
Tiếp theo, bạn có thể sử dụng lệnh sau để chạy chương trình MapReduce hadoop-mapreduce-examples
, một kho lưu trữ Java với một số option:
/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar grep ~/input ~/grep_example 'allowed[.]*'
Thao tác này invokes chương trình grep
, một trong nhiều ví dụ có trong hadoop-mapreduce-examples
, theo sau là thư mục đầu vào input
và thư mục đầu ra grep_example
. Chương trình grep MapReduce sẽ đếm các kết quả match nhau của một từ hoặc cụm từ thông dụng. Cuối cùng, biểu thức chính quy (Regular Expression) allowed[.]*
được đưa ra để tìm các lần xuất hiện của từ allowed
trong hoặc ở cuối câu khai báo (declarative sentence). Biểu thức phân biệt chữ hoa chữ thường, vì vậy bạn sẽ không tìm thấy nếu từ đó được viết hoa ở đầu câu.
Khi task hoàn thành, bạn sẽ được cung cấp một bản summary về những gì đã được xử lý và các lỗi gặp phải, nhưng nó sẽ không chứa kết quả thực tế.
Output
. . .
File System Counters
FILE: Number of bytes read=1200956
FILE: Number of bytes written=3656025
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
Map-Reduce Framework
Map input records=2
Map output records=2
Map output bytes=33
Map output materialized bytes=43
Input split bytes=114
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=43
Reduce input records=2
Reduce output records=2
Spilled Records=4
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=41
Total committed heap usage (bytes)=403800064
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=147
File Output Format Counters
Bytes Written=34
Lưu ý: Nếu thư mục output đã tồn tại, chương trình sẽ fail và thay vì xem summary , output sẽ giống như sau:
Output
. . .
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
at org.apache.hadoop.util.RunJar.main(RunJar.java:158)
Kết quả được lưu trữ trong thư mục output và có thể được kiểm tra bằng cách chạy cat
trên thư mục output:
cat ~/grep_example/*
Output
22 allowed.
1 allowed
Từ ví dụ, MapReduce đã tìm thấy 19 lần xuất hiện của từ allowed
theo sau là dấu chấm và một lần xuất hiện không có dấu đó. Việc chạy chương trình mẫu đã chứng minh rằng cài đặt stand-alone của chúng ta đang hoạt động bình thường và những user không có đặc quyền trên hệ thống có thể chạy Hadoop để exploration hoặc debugging.
Ngoài ra, bạn cũng có thể tham khảo thêm về cách chia sẻ dữ liệu giữa các Docker Containers, điều này giúp cho việc phát triển ứng dụng được tối ưu hóa và linh hoạt hơn, đồng thời giảm thiểu tối đa các rủi ro về bảo mật và hiệu suất.
Lời kết
Trên đây, bạn vừa thành công cài đặt Hadoop ở chế độ stand-alone trên Ubuntu 20.04 và kiểm định nó bằng cách chạy một chương trình mẫu mà nó cung cấp. Nếu bạn đang tìm kiếm một giải pháp để phân tích và xử lý dữ liệu lớn, Hadoop là một lựa chọn tuyệt vời. Cảm ơn các bạn đã theo dõi bài viết, nếu thấy hữu ích hãy chia sẻ đến mọi người nhé.