---
title: "Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 20.04"
description: "Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 20.04"
url: https://cloudfly.vn/techblog/cach-cai-dat-hadoop-o-che-do-doc-lap-tren-ubuntu-2004
image: https://media.cloudfly.vn/posts/techblog_093I9Rt.png
---

# Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 20.04

## Giới thiệu
Hadoop là một khung lập trình dựa trên Java, hỗ trợ xử lý và lưu trữ các tập dữ liệu cực lớn trên một nhóm các máy rẻ tiền. Đây là dự án mã nguồn mở lớn đầu tiên trong sân chơi dữ liệu lớn và được tài trợ bởi Apache Software Foundation.

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 mô-đun Hadoop khác.
* **HDFS**, viết tắt của Hadoop Distributed File System, chịu trách nhiệm lưu trữ dữ liệu vào đĩa.
* **YARN**, viết tắt của Yet Another Resource Negotiator, là “hệ điều hành” cho HDFS.
* **MapReduce** là mô hình xử lý ban đầu cho các  Hadoop Cluster. Nó phân phối công việc trong cluster hoặc bản đồ, sau đó tổ chức và giảm kết quả từ các node thành phản hồi cho một truy vấn. Nhiều mô hình xử lý khác có sẵn cho phiên bản 3.x của Hadoop.

Các  Hadoop Cluster tương đối phức tạp để thiết lập, vì vậy dự án bao gồm một chế độ độc lập phù hợp để tìm hiểu về Hadoop, thực hiện các thao tác đơn giản và gỡ lỗi.

Trong hướng dẫn này, bạn sẽ cài đặt Hadoop ở chế độ độc lập và chạy một trong các chương trình MapReduce mẫu mà nó bao gồm để xác minh cài đặt.

## Điều kiện 

Để làm theo hướng dẫn này, bạn sẽ cần:
* **Máy chủ Ubuntu 20.04 với non-root user có đặc quyền `sudo`**: Bạn có thể tìm hiểu thêm về cách thiết lập người dùng có các đặc quyền này trong hướng dẫn Thiết lập máy chủ ban đầu với Ubuntu 20.04 của chúng tôi.

Bạn cũng có thể muốn xem Giới thiệu về các khái niệm và thuật ngữ dữ liệu lớn hoặc Giới thiệu về Hadoop

Khi bạn đã hoàn thành các điều kiện, hãy đăng nhập với tư cách là `sudo` user của bạn để bắt đầu.

## Bước 1: Cài đặt Java

Để bắt đầu, bạn sẽ cập nhật danh sách gói của chúng tôi và cài đặt OpenJDK, Bộ phát triển Java mặc định trên Ubuntu 20.04:
```command
sudo apt update
sudo apt install default-jdk
```

Sau khi cài đặt xong, hãy kiểm tra phiên bản.
```command
java -version
```

```
[secondary_label 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)
```

Đầu ra này xác minh rằng 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 Bản phát hành Apache Hadoop để tìm bản phát hành ổn định gần đây nhất.

Điều hướng đến **binary** (nhị phân) cho bản phát hành bạn muốn cài đặt. Trong hướng dẫn này, bạn sẽ cài đặt Hadoop 3.3.1, nhưng bạn có thể thay thế số phiên bản trong hướng dẫn này bằng một trong những lựa chọn của bạn.

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Hadoop-o-che-do-doc-lap-tren-Ubuntu-20.04_2.png)

Trên trang tiếp theo, nhấp chuột phải và sao chép liên kết vào tệp nhị phân phát hành.

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Hadoop-o-che-do-doc-lap-tren-Ubuntu-20.04_3.png)

Trên máy chủ, bạn sẽ sử dụng `wget` để tìm nó:
```command
wget https://dlcdn.apache.org/hadoop/common/hadoop-<^>3.3.1<^>/hadoop-<^>3.3.1<^>.tar.gz
```

<$>[note]
**Lưu ý:** Trang web Apache sẽ tự động chuyển hướng bạn đến máy nhân bản 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 tệp bạn đã tải xuống không bị thay đổi, bạn hãy kiểm tra nhanh bằng cách sử dụng SHA-512 hoặc Secure Hash Algorithm 512. Quay lại trang phát hành, sau đó nhấp chuột phải và sao chép liên kết tới tệp tổng kiểm tra cho bản nhị phân phát hành mà bạn đã tải xuống:

![description image](https://media.cloudfly.vn/posts/cach-cai-dat-Hadoop-o-che-do-doc-lap-tren-Ubuntu-20.04_4.png)

Một lần nữa, bạn sẽ sử dụng `wget` trên máy chủ của chúng tôi để tải xuống tệp:
```command
wget https://downloads.apache.org/hadoop/common/hadoop-<^>3.3.1<^>/hadoop-<^>3.3.1<^>.tar.gz.sha512
```

Sau đó chạy xác minh:
```command
shasum -a 512 hadoop-<^>3.3.1<^>.tar.gz
```

```
[secondary_label 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`:
```command
cat hadoop-3.3.1.tar.gz.sha512
```

```nginx
[label ~/hadoop-3.3.1.tar.gz.sha512]
...
SHA512 (hadoop-3.3.1.tar.gz) = 2fd0bf74852c797dc864f373ec82ffaa1e98706b309b30d1effa91ac399b477e1accc1ee74d4ccbb1db7da1c5c541b72e4a834f131a99f2814b030fbd043df66
...
```

Đầu ra của lệnh bạn chạy với tệp bạn đã tải xuống từ máy nhân bản phải khớp với giá trị trong tệp bạn đã tải xuống từ apache.org.

Bây giờ bạn đã xác minh rằng tệp không bị hỏng hoặc bị thay đổi, bạn có thể trích xuất nó:
```command
tar -xzvf hadoop-<^>3.3.1<^>.tar.gz
```

Sử dụng lệnh `tar` với cờ `-x` để trích xuất, `-z` để giải nén, `-v` cho đầu ra dài và `-f` để xác đị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 phần mềm được cài đặt cục bộ:

```command
sudo mv hadoop-<^>3.3.1<^> /usr/local/hadoop
```

Với phần mềm tại chỗ, bạn đã sẵn sàng thiết lập cấu hình môi trường của nó.

## Bước 3: Thiết lập cấu hình Trang chủ Java của Hadoop

Hadoop yêu cầu bạn đặt đường dẫn đến Java, dưới dạng một 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 tới `/etc/alternatives/java`, đây 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 cờ `-f` để theo dõi mọi liên kết biểu tượng trong mọi phần của đường dẫn, một cách đệ quy. Sau đó, bạn sẽ sử dụng `sed` để cắt `bin/java` khỏi đầu ra để cung cấp giá trị chính xác cho `JAVA_HOME`.

Để tìm đường dẫn Java mặc định:
```command
readlink -f /usr/bin/java | sed "s:bin/java::"
```

```
[secondary_label Output]
/usr/lib/jvm/java-11-openjdk-amd64/
```

Bạn có thể sao chép đầu ra này để đặt trang chủ Java của Hadoop thành phiên bản cụ thể, điều này đảm bảo rằng nếu Java mặc định thay đổi, giá trị này sẽ không được chấp nhận. Ngoài ra, bạn có thể sử dụng lệnh `readlink` trong tệp để Hadoop tự động sử dụng bất kỳ phiên bản Java nào được đặt làm mặc định của hệ thống.

Để bắt đầu, hãy mở `hadoop-env.sh`:
```command
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 tùy chọn sau:

### Tùy chọn 1: Đặt giá trị tĩnh

```nginx
[label /usr/local/hadoop/etc/hadoop/hadoop-env.sh]
. . .
<^>#<^>export JAVA_HOME=
<^>export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/<^>
 . . .
```

### Tùy chọn 2: Sử dụng Readlink để đặt Giá trị Động

```nginx
[label /usr/local/hadoop/etc/hadoop/hadoop-env.sh]
. . .
<^>#<^>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` để nhanh chóng tìm kiếm trong văn bản. Sau khi hoàn tất, hãy thoát bằng `CTRL + X` và lưu tệp của bạn.

<$>[note]
**Lưu ý:** Đối với Hadoop, giá trị của `JAVA_HOME` trong `hadoop-env.sh` sẽ ghi đè bất kỳ giá trị nào được đặt trong môi trường bởi `/etc/profile` hoặc trong profile của người dùng.
<$>

## Bước 4: Chạy Hadoop

Bây giờ bạn có thể chạy Hadoop:
```command
/usr/local/hadoop/bin/hadoop
```

```
[secondary_label 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:
. . .
```

Đầu ra này có nghĩa là bạn đã thiết lập cấu hình Hadoop thành công để chạy ở chế độ độc lập.

Bạn hãy đả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ó cung cấp. Để làm như vậy, hãy tạo một thư mục được gọi là `input` trong thư mục chính của chúng ta 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 của chúng ta.

```command
mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input
```

Tiếp theo, bạn có thể sử dụng lệnh dưới đây để chạy chương trình MapReduce `hadoop-mapreduce-examples`, một kho lưu trữ Java với một số tùy chọn:
```command
/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-<^>3.3.1<^>.jar grep ~/input ~/grep_example 'allowed[.]*'
```

Điều này giúp đỡ 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ả phù hợp của một từ theo nghĩa đen hoặc biểu thức chính quy. Cuối cùng, biểu thức chính quy `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. Biểu thức có phân biệt chữ hoa chữ thường, vì vậy bạn sẽ không tìm thấy từ nếu nó được viết hoa ở đầu câu.

Khi nhiệm vụ hoàn thành, nó cung cấp một bản tóm tắt về những gì đã được xử lý và các lỗi mà nó đã gặp phải, nhưng phần này không chứa kết quả thực tế.

```
[secondary_label 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
```

<$>[note]
**Lưu ý:** Nếu thư mục đầu ra đã tồn tại, chương trình sẽ không thành công, và thay vì xem bản tóm tắt, đầu ra sẽ giống như sau:
```
[secondary_label 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 đầu ra và có thể được kiểm tra bằng cách chạy `cat` trên thư mục đầu ra:

```command
cat ~/grep_example/*
```

```
[secondary_label Output]
22    allowed.
1    allowed
```

Tác vụ 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 khi từ đó không được phép. Việc chạy chương trình ví dụ đã xác minh rằng cài đặt độc lập của chúng ta đang hoạt động bình thường và non-privileged users (người dùng không có đặc quyền) trên hệ thống có thể chạy Hadoop để thăm dò hoặc gỡ lỗi.

## Kết luận

Trong hướng dẫn này, bạn đã cài đặt Hadoop ở chế độ độc lập và xác minh nó bằng cách chạy một chương trình mẫu mà nó cung cấp. Để tìm hiểu cách viết các chương trình MapReduce của riêng bạn, bạn có thể truy cập Hướng dẫn MapReduce của Apache Hadoop, hướng dẫn này đi qua đoạn mã đằng sau ví dụ. Khi bạn đã sẵn sàng thiết lập một cụm, hãy xem Hướng dẫn Thiết lập  Hadoop Cluster của Apache Foundation.

Nếu bạn quan tâm đến việc triển khai một cluster đầy đủ thay vì chỉ một cụm riêng lẻ, hãy xem Cách tạo một  Hadoop Cluster với DigitalOcean Droplets.
