<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hải Phạm Ngọc</title>
    <description>The latest articles on DEV Community by Hải Phạm Ngọc (@haiphamcoder).</description>
    <link>https://dev.to/haiphamcoder</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1375857%2F5527bc8d-e512-4d98-ba55-8d33defd274c.png</url>
      <title>DEV Community: Hải Phạm Ngọc</title>
      <link>https://dev.to/haiphamcoder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/haiphamcoder"/>
    <language>en</language>
    <item>
      <title>REST API URI Naming Conventions</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Tue, 11 Feb 2025 03:03:13 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/rest-api-uri-naming-conventions-6ac</link>
      <guid>https://dev.to/haiphamcoder/rest-api-uri-naming-conventions-6ac</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Resource là gì?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Resource trong REST là một khái niệm trừu tượng đại diện cho một tập hợp các thực thể có thể được đặt tên, như tài liệu, hình ảnh, dịch vụ, v.v. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Singleton Resources&lt;/strong&gt;: Đại diện cho một thực thể duy nhất, ví dụ: &lt;code&gt;/customers/{id}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection Resources&lt;/strong&gt;: Chứa nhiều tài nguyên con, ví dụ: &lt;code&gt;/customers&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-Collection Resources&lt;/strong&gt;: Tài nguyên nằm trong một bộ sưu tập khác, ví dụ: &lt;code&gt;/customers/{id}/accounts&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Thực tiễn tốt nhất trong thiết kế URI&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2.1. Sử dụng danh từ để đại diện cho tài nguyên&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;URI RESTful nên sử dụng danh từ thay vì động từ để đảm bảo tính rõ ràng và dễ hiểu.&lt;/li&gt;
&lt;li&gt;Các loại tài nguyên:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document&lt;/strong&gt;: Đại diện cho một thực thể cụ thể (số ít). VD: &lt;code&gt;/users/{id}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection&lt;/strong&gt;: Chứa nhiều tài nguyên cùng loại. VD: &lt;code&gt;/users&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store&lt;/strong&gt;: Do người dùng quản lý. VD: &lt;code&gt;/users/{id}/playlists&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2.2. Đảm bảo tính nhất quán&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sử dụng dấu gạch chéo &lt;code&gt;/&lt;/code&gt; để chỉ mối quan hệ phân cấp&lt;/strong&gt;: VD: &lt;code&gt;/device-management/managed-devices/{id}/scripts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Không dùng dấu gạch chéo cuối &lt;code&gt;/&lt;/code&gt;&lt;/strong&gt; vì không có giá trị ngữ nghĩa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sử dụng dấu gạch nối &lt;code&gt;-&lt;/code&gt; thay vì gạch dưới &lt;code&gt;_&lt;/code&gt;&lt;/strong&gt; để tránh nhầm lẫn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dùng chữ thường trong URI&lt;/strong&gt; để nhất quán và tránh lỗi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Không sử dụng phần mở rộng tệp&lt;/strong&gt; như &lt;code&gt;.xml&lt;/code&gt; hay &lt;code&gt;.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2.3. Tránh sử dụng động từ trong URI&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;URI chỉ nên xác định tài nguyên, không mô tả hành động.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sử dụng phương thức HTTP để xác định thao tác:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /users&lt;/code&gt; → Lấy danh sách người dùng&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /users&lt;/code&gt; → Tạo người dùng mới&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUT /users/{id}&lt;/code&gt; → Cập nhật người dùng&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DELETE /users/{id}&lt;/code&gt; → Xóa người dùng&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Nếu cần thực hiện hành động, sử dụng tài nguyên trạng thái:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thay vì: &lt;code&gt;/scripts/{id}/execute&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dùng: &lt;code&gt;/scripts/{id}/status&lt;/code&gt; với &lt;code&gt;POST&lt;/code&gt; và &lt;code&gt;action=execute&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2.4. Sử dụng tham số truy vấn để lọc tài nguyên&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Không tạo API mới chỉ để lọc dữ liệu, thay vào đó, sử dụng tham số truy vấn:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  /devices?region=USA&amp;amp;brand=XYZ&amp;amp;sort=installation-date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;3. Kết luận&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tài nguyên RESTful nên được định danh bằng danh từ.&lt;/li&gt;
&lt;li&gt;Tránh đặt động từ trong URI để không biến API REST thành RPC.&lt;/li&gt;
&lt;li&gt;Thực hiện các phương thức CRUD bằng HTTP methods thay vì URI động từ.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Source: &lt;a href="https://restfulapi.net/resource-naming/" rel="noopener noreferrer"&gt;https://restfulapi.net/resource-naming/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>uri</category>
      <category>resources</category>
      <category>restapi</category>
    </item>
    <item>
      <title>How to install Multipass and libvirt VMs on Ubuntu</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Mon, 16 Sep 2024 15:16:08 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/how-to-install-multipass-and-libvirt-vms-on-ubuntu-5bf8</link>
      <guid>https://dev.to/haiphamcoder/how-to-install-multipass-and-libvirt-vms-on-ubuntu-5bf8</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install virt-manager libvirt-daemon-system -y
sudo adduser $USER libvirt
sudo reboot now
sudo snap install multipass
sudo snap connect multipass:libvirt
multipass stop --all
multipass set local.passphrase
multipass authenticate
multipass set local.driver=libvirt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>How to install Apache Kafka on Ubuntu with KRaft Mode (without Zookeeper): A Step-by-Step Guide</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Mon, 02 Sep 2024 03:45:00 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/how-to-install-apache-kafka-on-ubuntu-with-kraft-mode-without-zookeeper-3bed</link>
      <guid>https://dev.to/haiphamcoder/how-to-install-apache-kafka-on-ubuntu-with-kraft-mode-without-zookeeper-3bed</guid>
      <description>&lt;h3&gt;
  
  
  1. Cài đặt Java Development Kit (JDK)
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt install openjdk-11-jdk


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Xác minh việc cài đặt bằng cách kiểm tra phiên bản Java:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

java -version


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  2. Tạo Kafka User
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo adduser kafka


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Bạn sẽ được yêu cầu đặt mật khẩu cho người dùng mới. Sau khi đặt mật khẩu, bạn sẽ được nhắc nhập thông tin bổ sung về người dùng. Bạn có thể nhập chi tiết các thông tin này hoặc chỉ cần nhấn &lt;code&gt;Enter&lt;/code&gt; để chấp nhận các giá trị mặc định.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tcdwp3npdl3jhpood7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tcdwp3npdl3jhpood7o.png" alt="Nhập thông tin cho user kafka"&gt;&lt;/a&gt;&lt;br&gt;
Tiếp theo, bạn cần cấp đặc quyền sudo cho user kafka:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo usermod -aG sudo kafka


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  3. Chuyển sang Kafka User đã tạo
&lt;/h3&gt;

&lt;p&gt;Các bước tiếp theo cần được thực hiện trong user kafka. Do đó, bạn cần chuyển sang user kafka đã tạo trước đó bằng lệnh sau:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

su - kafka


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  4. Cài đặt Apache Kafka
&lt;/h3&gt;

&lt;p&gt;Bạn có thể sử dụng lệnh wget để tải xuống phiên bản ổn định mới nhất của Kafka:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

wget https://downloads.apache.org/kafka/3.8.0/kafka_2.13-3.8.0.tgz


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Sau khi quá trình tải xuống hoàn tất, bạn cần giải nén nó bằng lệnh sau:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

tar -xzvf kafka_2.13-3.8.0.tgz 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Di chuyển thư mục kafka đã giải nén sang /opt/apache-kafka để truy cập và quản lý dễ dàng hơn.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo mv kafka_2.13-3.8.0 /opt/apache-kafka
sudo chown -R kafka:kafka /opt/apache-kafka


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  5. Cấu hình biến môi trường &lt;code&gt;PATH&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Tạo tệp &lt;code&gt;/etc/profile.d/kafka.sh&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo nano /etc/profile.d/kafka.sh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Thêm các dòng bên dưới vào tệp:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

#!/bin/sh

KAFKA_HOME="/opt/apache-kafka"
PATH="${PATH}:${KAFKA_HOME}/bin"

export KAFKA_HOME
export PATH


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Tạo ID cụm và định dạng bộ lưu trữ bằng &lt;code&gt;kafka-storage.sh&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Tạo ID mới cho cụm của bạn&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

/opt/apache-kafka/bin/kafka-storage.sh random-uuid


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Output trả về một UUID, ví dụ: &lt;code&gt;9OYVwS2kT0KnuFU46oCFfQ&lt;/code&gt;&lt;br&gt;
Tiếp theo, bạn cần định dạng thư mục lưu trữ (thay thế  bằng UUID thu được ở trên), ví dụ:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

/opt/apache-kafka/bin/kafka-storage.sh format -t 9OYVwS2kT0KnuFU46oCFfQ -c /opt/apache-kafka/config/kraft/server.properties


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Điều này sẽ định dạng thư mục trong &lt;code&gt;log.dirs&lt;/code&gt; trong tập tin &lt;code&gt;config/kraft/server.properties&lt;/code&gt; (theo mặc định là &lt;code&gt;/tmp/kraft-combined-logs&lt;/code&gt;)&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Tạo systemd service file cho Kafka
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo nano /lib/systemd/system/kafka-server.service


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

[Unit]
Description=Apache Kafka Service with KRaft Mode
Requires=network.target
After=network.target

[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/opt/apache-kafka/bin/kafka-server-start.sh /opt/apache-kafka/config/kraft/server.properties
ExecStop=/opt/apache-kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
Environment="KAFKA_HEAP_OPTS=-Xmx512m -Xms512m"

[Install]
WantedBy=multi-user.target


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo ln -s /lib/systemd/system/kafka-server.service /etc/systemd/system/kafka-server.service


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Yêu cầu systemd tải lại cấu hình của các dịch vụ&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo systemctl daemon-reload


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  8. Cấu hình hệ thống khởi động tự động dịch vụ cho Kafka Server (Optional)
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo systemctl enable kafka-server


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  9. Khởi động Kafka Services và Verify Status
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo systemctl start kafka-server


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo systemctl status kafka-server


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

● kafka-server.service - Apache Kafka Service with KRaft Mode
     Loaded: loaded (/lib/systemd/system/kafka-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-09-02 03:32:27 UTC; 10min ago
   Main PID: 4531 (java)
      Tasks: 95 (limit: 3530)
     Memory: 386.1M
     CGroup: /system.slice/kafka-server.service
             └─4531 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:MaxInlineLevel=15 -Djava.awt.headless=true -Xlog:gc*:file=/opt/apache-kafka/bin/../logs/kafkaServer-gc.log:time,tags:filecount=10,filesize=100M -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dkafka.logs.dir=/opt/apache-kafka/bin/../logs -Dlog4j.configuration=file:/opt/apache-kafka/bin/../config/log4j.properties -cp /opt/apache-kafka/bin/../libs/activation-1.1.1.jar:/opt/apache-kafka/bin/../libs/aopalliance-repackaged-2.6.1.jar:/opt/apache-kafka/bin/../libs/argparse4j-0.7.0.jar:/opt/apache-kafka/bin/../libs/audience-annotations-0.12.0.jar:/opt/apache-kafka/bin/../libs/caffeine-2.9.3.jar:/opt/apache-kafka/bin/../libs/checker-qual-3.19.0.jar:/opt/apache-kafka/bin/../libs/commons-beanutils-1.9.4.jar:/opt/apache-kafka/bin/../libs/commons-cli-1.4.jar:/opt/apache-kafka/bin/../libs/commons-collections-3.2.2.jar:/opt/apache-kafka/bin/../libs/commons-digester-2.1.jar:/opt/apache-kafka/bin/../libs/commons-io-2.11.0.jar:/opt/apache-kafka/bin/../libs/commons-lang3-3.12.0.jar:/opt/apache-kafka/bin/../libs/commons-logging-1.2.jar:/opt/apache-kafka/bin/../libs/commons-validator-1.7.jar:/opt/apache-kafka/bin/../libs/connect-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-basic-auth-extension-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-json-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-mirror-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-mirror-client-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-runtime-3.8.0.jar:/opt/apache-kafka/bin/../libs/connect-transforms-3.8.0.jar:/opt/apache-kafka/bin/../libs/error_prone_annotations-2.10.0.jar:/opt/apache-kafka/bin/../libs/hk2-api-2.6.1.jar:/opt/apache-kafka/bin/../libs/hk2-locator-2.6.1.jar:/opt/apache-kafka/bin/../libs/hk2-utils-2.6.1.jar:/opt/apache-kafka/bin/../libs/jackson-annotations-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-core-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-databind-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-dataformat-csv-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-datatype-jdk8-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-jaxrs-base-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-jaxrs-json-provider-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-afterburner-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-jaxb-annotations-2.16.2.jar:/opt/apache-kafka/bin/../libs/jackson-module-scala_2.13-2.16.2.jar:/opt/apache-kafka/bin/../libs/jakarta.activation-api-1.2.2.jar:/opt/apache-kafka/bin/../libs/jakarta.annotation-api-1.3.5.jar:/opt/apache-kafka/bin/../libs/jakarta.inject-2.6.1.jar:/opt/apache-kafka/bin/../libs/jakarta.validation-api-2.0.2.jar:/opt/apache-kafka/bin/../libs/jakarta.ws.rs-api-2.1.6.jar:/opt/apache-kafka/bin/../libs/jakarta.xml.bind-api-2.3.3.jar:/opt/apache-kafka/bin/../libs/javassist-3.29.2-GA.jar:/opt/apache-kafka/bin/../libs/javax.activation-api-1.2.0.jar:/opt/apache-kafka/bin/../libs/javax.annotation-api-1.3.2.jar:/opt/apache-kafka/bin/../libs/javax.servlet-api-3.1.0.jar:/opt/apache-kafka/bin/../libs/javax.ws.rs-api-2.1.1.jar:/opt/apache-kafka/bin/../libs/jaxb-api-2.3.1.jar:/opt/apache-kafka/bin/../libs/jersey-client-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-common-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-container-servlet-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-container-servlet-core-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-hk2-2.39.1.jar:/opt/apache-kafka/bin/../libs/jersey-server-2.39.1.jar:/opt/apache-kafka/bin/../libs/jetty-client-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-continuation-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-http-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-io-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-security-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-server-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-servlet-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-servlets-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-util-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jetty-util-ajax-9.4.54.v20240208.jar:/opt/apache-kafka/bin/../libs/jline-3.25.1.jar:/opt/apache-kafka/bin/../libs/jopt-simple-5.0.4.jar:/opt/apache-kafka/bin/../libs/jose4j-0.9.4.jar:/opt/apache-kafka/bin/../libs/jsr305-3.0.2.jar:/opt/apache-kafka/bin/../libs/kafka-clients-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-group-coordinator-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-group-coordinator-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-log4j-appender-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-metadata-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-raft-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-server-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-server-common-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-shell-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-storage-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-storage-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-examples-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-scala_2.13-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-streams-test-utils-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-tools-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-tools-api-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka-transaction-coordinator-3.8.0.jar:/opt/apache-kafka/bin/../libs/kafka_2.13-3.8.0.jar:/opt/apache-kafka/bin/../libs/lz4-java-1.8.0.jar:/opt/apache-kafka/bin/../libs/maven-artifact-3.9.6.jar:/opt/apache-kafka/bin/../libs/metrics-core-2.2.0.jar:/opt/apache-kafka/bin/../libs/metrics-core-4.1.12.1.jar:/opt/apache-kafka/bin/../libs/netty-buffer-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-codec-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-common-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-handler-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-resolver-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-classes-epoll-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-native-epoll-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/netty-transport-native-unix-common-4.1.110.Final.jar:/opt/apache-kafka/bin/../libs/opentelemetry-proto-1.0.0-alpha.jar:/opt/apache-kafka/bin/../libs/osgi-resource-locator-1.0.3.jar:/opt/apache-kafka/bin/../libs/paranamer-2.8.jar:/opt/apache-kafka/bin/../libs/pcollections-4.0.1.jar:/opt/apache-kafka/bin/../libs/plexus-utils-3.5.1.jar:/opt/apache-kafka/bin/../libs/protobuf-java-3.23.4.jar:/opt/apache-kafka/bin/../libs/reflections-0.10.2.jar:/opt/apache-kafka/bin/../libs/reload4j-1.2.25.jar:/opt/apache-kafka/bin/../libs/rocksdbjni-7.9.2.jar:/opt/apache-kafka/bin/../libs/scala-collection-compat_2.13-2.10.0.jar:/opt/apache-kafka/bin/../libs/scala-java8-compat_2.13-1.0.2.jar:/opt/apache-kafka/bin/../libs/scala-library-2.13.14.jar:/opt/apache-kafka/bin/../libs/scala-logging_2.13-3.9.4.jar:/opt/apache-kafka/bin/../libs/scala-reflect-2.13.14.jar:/opt/apache-kafka/bin/../libs/slf4j-api-1.7.36.jar:/opt/apache-kafka/bin/../libs/slf4j-reload4j-1.7.36.jar:/opt/apache-kafka/bin/../libs/snappy-java-1.1.10.5.jar:/opt/apache-kafka/bin/../libs/swagger-annotations-2.2.8.jar:/opt/apache-kafka/bin/../libs/trogdor-3.8.0.jar:/opt/apache-kafka/bin/../libs/zookeeper-3.8.4.jar:/opt/apache-kafka/bin/../libs/zookeeper-jute-3.8.4.jar:/opt/apache-kafka/bin/../libs/zstd-jni-1.5.6-3.jar kafka.Kafka /opt/apache-kafka/config/kraft/server.properties

Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Waiting for all of the authorizer futures to be completed (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Finished waiting for all of the authorizer futures to be completed (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Waiting for all of the SocketServer Acceptors to be started (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Finished waiting for all of the SocketServer Acceptors to be started (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,283] INFO [BrokerServer id=1] Transition from STARTING to STARTED (kafka.server.BrokerServer)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka version: 3.8.0 (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka commitId: 771b9576b00ecf5b (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,284] INFO Kafka startTimeMs: 1725247951283 (org.apache.kafka.common.utils.AppInfoParser)
Sep 02 03:32:31 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:32:31,285] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)
Sep 02 03:42:30 ubuntu-vm kafka-server-start.sh[4531]: [2024-09-02 03:42:30,843] INFO [NodeToControllerChannelManager id=1 name=registration] Node 1 disconnected. (org.apache.kafka.clients.NetworkClient)


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Chúc các bạn thành công!&lt;/p&gt;

</description>
      <category>kafka</category>
      <category>ubuntu</category>
      <category>bigdata</category>
      <category>pubsub</category>
    </item>
    <item>
      <title>How to Install Hadoop on Ubuntu: A Step-by-Step Guide</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Sun, 01 Sep 2024 06:54:17 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/how-to-install-hadoop-on-ubuntu-a-step-by-step-guide-52fc</link>
      <guid>https://dev.to/haiphamcoder/how-to-install-hadoop-on-ubuntu-a-step-by-step-guide-52fc</guid>
      <description>&lt;p&gt;Hadoop là một framework mã nguồn mở được thiết kế để lưu trữ và xử lý dữ liệu lớn trên các cụm máy tính. Các thành phần chính của Hadoop bao gồm Hệ thống tệp phân tán Hadoop (HDFS - Hadoop Distributed File System) để lưu trữ và mô hình lập trình MapReduce để xử lý dữ liệu song song. Hadoop giúp các tổ chức quản lý và phân tích hiệu quả các bộ dữ liệu lớn, biến nó thành một công cụ quan trọng trong lĩnh vực phân tích dữ liệu lớn.&lt;/p&gt;

&lt;p&gt;Kiến trúc của Hadoop gồm ba thành phần chính: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HDFS dùng để lưu trữ&lt;/li&gt;
&lt;li&gt;Yet Another Resource Negotiator (YARN) để quản lý tài nguyên và điều phối công việc&lt;/li&gt;
&lt;li&gt;MapReduce để xử lý dữ liệu song song&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Các thành phần này phối hợp với nhau để cho phép xử lý hiệu quả và mở rộng các bộ dữ liệu lớn trên các cụm phần cứng phổ thông.&lt;/p&gt;

&lt;p&gt;Dưới đây là hướng dẫn từng bước để cài đặt Hadoop Single Node trên Ubuntu:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Cài đặt Java Development Kit (JDK)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install openjdk-11-jdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Xác minh việc cài đặt bằng cách kiểm tra phiên bản Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Tạo Hadoop User
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo adduser hadoop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bạn sẽ được yêu cầu đặt mật khẩu cho người dùng mới. Sau khi đặt mật khẩu, bạn sẽ được nhắc nhập thông tin bổ sung về người dùng. Bạn có thể nhập chi tiết các thông tin này hoặc chỉ cần nhấn Enter để chấp nhận các giá trị mặc định.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv9dib3t41ijou23x12t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv9dib3t41ijou23x12t.png" alt="Nhập mật khẩu và các thông tin khác cho user hadoop" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tiếp theo, bạn cần cấp đặc quyền sudo cho user hadoop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo usermod -aG sudo hadoop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Cài đặt SSH
&lt;/h2&gt;

&lt;p&gt;SSH (Secure Shell) rất cần thiết để cho phép liên lạc an toàn giữa các nút Hadoop. SSH cho phép bạn kết nối với các máy từ xa một cách an toàn và được Hadoop sử dụng để quản lý các nút phân tán của nó. Thiết lập SSH rất quan trọng để đăng nhập không cần mật khẩu, giúp đơn giản hóa việc quản lý cụm Hadoop.&lt;/p&gt;

&lt;p&gt;Trước tiên, bạn cần đảm bảo rằng SSH đã được cài đặt trên hệ thống Ubuntu của bạn. Nếu nó chưa được cài đặt, bạn có thể cài đặt nó bằng lệnh sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install openssh-client openssh-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Để xác nhận rằng SSH đã được cài đặt chính xác, bạn có thể kiểm tra vị trí của tệp thực thi máy khách và máy chủ SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;which ssh
which sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Đầu ra của các lệnh này sẽ hiển thị các đường dẫn như &lt;code&gt;/usr/bin/ssh&lt;/code&gt; và &lt;code&gt;/usr/sbin/sshd&lt;/code&gt;, cho biết SSH client và SSH server đã được cài đặt.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Chuyển sang Hadoop User đã tạo
&lt;/h2&gt;

&lt;p&gt;Các bước tiếp theo cần được thực hiện trong user hadoop. Do đó, bạn cần chuyển sang user hadoop đã tạo trước đó bằng lệnh sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;su - hadoop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Tạo và thiết lập xác thực dựa trên khóa SSH
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Xác minh rằng SSH đang hoạt động chính xác bằng cách kết nối với localhost:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh localhost 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khi kết nối lần đầu tiên, bạn có thể thấy thông báo yêu cầu bạn xác nhận tính xác thực của máy chủ. Nhập 'yes' và nhấn 'Enter' để thêm localhost vào danh sách các máy chủ đã biết.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Cài đặt Hadoop
&lt;/h2&gt;

&lt;p&gt;Bạn có thể sử dụng lệnh wget để tải xuống phiên bản ổn định mới nhất của Hadoop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://dlcdn.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sau khi quá trình tải xuống hoàn tất, bạn cần giải nén nó bằng lệnh sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tar -xzvf hadoop-3.4.0.tar.gz 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Di chuyển thư mục Hadoop đã giải nén sang /opt/apache-hadoop để truy cập và quản lý dễ dàng hơn.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mv hadoop-3.4.0 /opt/apache-hadoop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Cấu hình biến môi trường
&lt;/h2&gt;

&lt;h3&gt;
  
  
  a. Tạo tệp &lt;code&gt;/etc/profile.d/hadoop.sh&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/profile.d/hadoop.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thêm các dòng bên dưới vào tệp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/sh

HADOOP_HOME="/opt/apache-hadoop"
HADOOP_INSTALL="${HADOOP_HOME}"
HADOOP_MAPRED_HOME="${HADOOP_HOME}"
HADOOP_COMMON_HOME="${HADOOP_HOME}"
HADOOP_HDFS_HOME="${HADOOP_HOME}"
YARN_HOME="${HADOOP_HOME}"
HADOOP_COMMON_LIB_NATIVE_DIR="${HADOOP_HOME}/lib/native"
HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
PATH="${PATH}:${HADOOP_HOME}/sbin:${HADOOP_HOME}/bin"

export HADOOP_HOME
export HADOOP_INSTALL
export HADOOP_MAPRED_HOME
export HADOOP_COMMON_HOME
export HADOOP_HDFS_HOME
export YARN_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR
export HADOOP_OPTS
export PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát. &lt;/p&gt;

&lt;h3&gt;
  
  
  b. Sửa tệp &lt;code&gt;hadoop-env.sh&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Tệp &lt;code&gt;hadoop-env.sh&lt;/code&gt; được sử dụng để định cấu hình môi trường cho Hadoop Daemons. Việc đặt biến &lt;code&gt;JAVA_HOME&lt;/code&gt; ở đây đảm bảo rằng Hadoop sử dụng đúng phiên bản Java.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /opt/apache-hadoop/etc/hadoop/hadoop-env.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Khi tệp được mở, hãy thêm/sửa đổi dòng sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dll9wal5guf4ukkx0fg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8dll9wal5guf4ukkx0fg.png" alt="Export JAVA_HOME" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;
&lt;h3&gt;
  
  
  c. Sửa tệp &lt;code&gt;core-site.xml&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /opt/apache-hadoop/etc/hadoop/core-site.xml 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Khi tệp được mở, hãy chèn cấu hình sau vào thẻ &lt;code&gt;&amp;lt;configuration&amp;gt;&lt;/code&gt;: Cấu hình này đặt hệ thống tệp mặc định thành HDFS chạy trên localhost với cổng 9000.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;fs.defaultFS&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;hdfs://localhost:9000&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qpfhzunuyn5m6vj5jpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qpfhzunuyn5m6vj5jpv.png" alt="Sửa tệp core-site.xml" width="800" height="477"&gt;&lt;/a&gt;&lt;br&gt;
Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;
&lt;h3&gt;
  
  
  d. Sửa tệp &lt;code&gt;mapred-site.xml&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /opt/apache-hadoop/etc/hadoop/mapred-site.xml 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Khi tệp được mở, hãy chèn cấu hình sau vào thẻ &lt;code&gt;&amp;lt;configuration&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;mapreduce.framework.name&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;yarn&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;mapreduce.application.classpath&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;${HADOOP_MAPRED_HOME}/share/hadoop/mapreduce/*:${HADOOP_MAPRED_HOME}/share/hadoop/mapreduce/lib/*&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;yarn.app.mapreduce.am.env&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;HADOOP_MAPRED_HOME=/opt/apache-hadoop&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;mapreduce.map.env&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;HADOOP_MAPRED_HOME=/opt/apache-hadoop&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;mapreduce.reduce.env&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;HADOOP_MAPRED_HOME=/opt/apache-hadoop&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;mapreduce.jobhistory.address&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;0.0.0.0:10020&amp;lt;/value&amp;gt;
    &amp;lt;description&amp;gt;Address and port for Job History Server (default 0.0.0.0:10020)&amp;lt;/description&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zv5clzn3a1fzp0s9e2i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zv5clzn3a1fzp0s9e2i.png" alt="Sửa tệp mapred-site.xml" width="800" height="476"&gt;&lt;/a&gt;&lt;br&gt;
Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;
&lt;h3&gt;
  
  
  e. Sửa tệp &lt;code&gt;hdfs-site.xml&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /opt/apache-hadoop/etc/hadoop/hdfs-site.xml 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Khi tệp được mở, hãy chèn cấu hình sau vào thẻ &lt;code&gt;&amp;lt;configuration&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;dfs.namenode.name.dir&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;file:///data/hadoop/hdfs/namenode&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;dfs.datanode.data.dir&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;file:///data/hadoop/hdfs/datanode&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;dfs.replication&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;dfs.permissions&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;false&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wpzmqnldmelpcdk50j1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wpzmqnldmelpcdk50j1.png" alt="Sửa tệp hdfs-site.xml" width="800" height="472"&gt;&lt;/a&gt;&lt;br&gt;
Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;
&lt;h3&gt;
  
  
  f. Sửa tệp &lt;code&gt;yarn-site.xml&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /opt/apache-hadoop/etc/hadoop/yarn-site.xml 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Khi tệp được mở, hãy chèn cấu hình sau vào thẻ &lt;code&gt;&amp;lt;configuration&amp;gt;&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;property&amp;gt;
    &amp;lt;name&amp;gt;yarn.nodemanager.aux-services&amp;lt;/name&amp;gt;
    &amp;lt;value&amp;gt;mapreduce_shuffle&amp;lt;/value&amp;gt;
  &amp;lt;/property&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxd9q0hag2toba8p6zo3p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxd9q0hag2toba8p6zo3p.png" alt="Sửa tệp yarn-site.xml" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Khởi tạo Hadoop Distributed File System (HDFS)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /data/hadoop/hdfs/{namenode,datanode}
sudo chown -R hadoop:hadoop /data/hadoop
sudo chmod -R 700 /data/hadoop/hdfs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Định dạng NameNode sẽ khởi tạo metadata cho hệ thống tệp Hadoop. Bước này chỉ nên được thực hiện một lần, thường là trong quá trình thiết lập ban đầu, vì việc định dạng lại sẽ xóa metadata hiện có và nội dung hệ thống tệp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/opt/apache-hadoop/bin/hdfs namenode -format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Tạo systemd service file cho Hadoop
&lt;/h2&gt;

&lt;p&gt;Sau khi định dạng NameNode, bạn cần khởi động HDFS Daemons, bao gồm NameNode và DataNode. Khởi động các dịch vụ Hadoop là quá trình khởi tạo các daemon và thành phần cần thiết trong hệ sinh thái Hadoop để giúp cụm hoạt động. Các dịch vụ này bao gồm cả HDFS và YARN&lt;/p&gt;

&lt;h3&gt;
  
  
  a. Tạo Apache Hadoop DFS Daemons Service File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /lib/systemd/system/hadoop-dfs.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=Apache Hadoop DFS Daemons
Requires=network.target
After=network.target

[Service]
Type=forking
User=hadoop
Group=hadoop
ExecStart=/opt/apache-hadoop/sbin/start-dfs.sh
ExecStop=/opt/apache-hadoop/sbin/stop-dfs.sh
Restart=on-failure
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;br&gt;
Tạo symlink&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ln -s /lib/systemd/system/hadoop-dfs.service /etc/systemd/system/hadoop-dfs.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  b. Tạo Apache Hadoop YARN Daemons Service File
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /lib/systemd/system/hadoop-yarn.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=Apache Hadoop YARN Daemons
Requires=network.target
After=network.target

[Service]
Type=forking
User=hadoop
Group=hadoop
ExecStart=/opt/apache-hadoop/sbin/start-yarn.sh
ExecStop=/opt/apache-hadoop/sbin/stop-yarn.sh
Restart=on-failure
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nhấn &lt;code&gt;Ctrl + X&lt;/code&gt;, sau đó nhấn &lt;code&gt;Y&lt;/code&gt; và nhấn &lt;code&gt;Enter&lt;/code&gt; để lưu các thay đổi và thoát.&lt;br&gt;
Tạo symlink&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ln -s /lib/systemd/system/hadoop-yarn.service /etc/systemd/system/hadoop-yarn.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yêu cầu &lt;code&gt;systemd&lt;/code&gt; tải lại cấu hình của các dịch vụ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Cấu hình hệ thống khởi động tự động dịch vụ cho Hadoop (Optional)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable hadoop-dfs
sudo systemctl enable hadoop-yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Khởi động Hadoop Services và Verify Status
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start hadoop-dfs
sudo systemctl start hadoop-yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Việc xác minh trạng thái daemon của Hadoop bao gồm việc sử dụng lệnh &lt;code&gt;jps&lt;/code&gt;, lệnh này liệt kê các quy trình Java để kiểm tra xem các daemon của Hadoop như NameNode, DataNode, PrimaryNameNode, ResourceManager và NodeManagers có đang chạy hay không. Mỗi daemon tương ứng với một quy trình Java, xác nhận trạng thái hoạt động của nó trong cụm Hadoop. Bước này đảm bảo rằng tất cả các thành phần cần thiết đều hoạt động và sẵn sàng xử lý các tác vụ lưu trữ, xử lý và quản lý tài nguyên dữ liệu một cách hiệu quả.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu các daemons khởi động thành công, thì sẽ thấy kết quả tương tự như dưới đây:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1296 NodeManager
1680 SecondaryNameNode
1104 NameNode
929 ResourceManager
3335 Jps
1415 DataNode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Truy cập WebUI NameNode của Hadoop: &lt;a href="http://localhost:9870/" rel="noopener noreferrer"&gt;http://localhost:9870/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuil1sa202k4p0ok4iv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuil1sa202k4p0ok4iv8.png" alt="WebUI Namenode" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
Giao diện người dùng NameNode thường hiển thị thông tin cần thiết như tóm tắt cụm, nút dữ liệu, dung lượng HDFS, mức sử dụng hệ thống tệp, v.v. Nó cung cấp thông tin chi tiết về trạng thái chung của HDFS, cho phép quản trị viên và người dùng khắc phục sự cố, quản lý tệp và đảm bảo hiệu suất tối ưu của cụm Hadoop.&lt;/p&gt;

&lt;p&gt;Truy cập WebUI của Trình quản lý tài nguyên Hadoop: &lt;a href="http://localhost:8088/" rel="noopener noreferrer"&gt;http://localhost:8088/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs95sw3rhnp58wgo94gde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs95sw3rhnp58wgo94gde.png" alt="WebUI Resource Manager" width="800" height="407"&gt;&lt;/a&gt;&lt;br&gt;
Giao diện người dùng ResourceManager thường hiển thị bảng thông tin bao gồm thông tin tóm tắt về các ứng dụng đang hoạt động và đã hoàn thành, số liệu sử dụng cụm, trình quản lý nút, hàng đợi, v.v. Điều này cho phép quản trị viên và người dùng theo dõi trạng thái phân bổ và sử dụng tài nguyên hiện tại. &lt;/p&gt;

&lt;p&gt;Chúc các bạn thành công!&lt;/p&gt;

</description>
      <category>hadoop</category>
      <category>hdfs</category>
      <category>ubuntu</category>
      <category>bigdata</category>
    </item>
    <item>
      <title>Các khái niệm cơ bản về Apache Kafka</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Mon, 25 Mar 2024 11:44:02 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/cac-khai-niem-co-ban-ve-apache-kafka-1dea</link>
      <guid>https://dev.to/haiphamcoder/cac-khai-niem-co-ban-ve-apache-kafka-1dea</guid>
      <description></description>
      <category>kafka</category>
      <category>datapipeline</category>
      <category>bigdata</category>
      <category>scalable</category>
    </item>
    <item>
      <title>Hướng dẫn cài đặt OpenMPI trên Ubuntu Linux</title>
      <dc:creator>Hải Phạm Ngọc</dc:creator>
      <pubDate>Sat, 23 Mar 2024 07:08:44 +0000</pubDate>
      <link>https://dev.to/haiphamcoder/huong-dan-cai-dat-openmpi-tren-ubuntu-linux-m57</link>
      <guid>https://dev.to/haiphamcoder/huong-dan-cai-dat-openmpi-tren-ubuntu-linux-m57</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg2bnlyvf0e22pl5hbi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg2bnlyvf0e22pl5hbi9.png" alt="OpenMPI Image" width="300" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bước 1: Cài đặt GCC và các công cụ biên dịch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;build-essential
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bước 2: Tải, biên dịch và cài đặt OpenMPI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.2.tar.gz
  &lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvf&lt;/span&gt; openmpi-5.0.2.tar.gz
  &lt;span class="nb"&gt;cd &lt;/span&gt;openmpi-5.0.2
  ./configure &lt;span class="nt"&gt;--prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/usr/local"&lt;/span&gt;
  make
  &lt;span class="nb"&gt;sudo &lt;/span&gt;make all &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Bước 3: Chỉnh sửa file &lt;code&gt;.bashrc&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thêm vào cuối file các dòng sau:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:/usr/local/lib"&lt;/span&gt;
  &lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MANPATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MANPATH&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:/usr/local/share/man"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Ctrl+O&lt;/code&gt; -&amp;gt; &lt;code&gt;Enter&lt;/code&gt; để lưu lại. &lt;code&gt;Ctrl+X&lt;/code&gt; để thoát.&lt;/p&gt;

&lt;p&gt;Sau đó, tắt Terminal đi và bật lại.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bước 4: Kiểm tra&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  mpiexec &lt;span class="nt"&gt;--version&lt;/span&gt;
  mpirun &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nếu kết quả như dưới đây, thì ta đã cài đặt thành công:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  mpiexec (Open MPI) 5.0.2

  Report bugs to https://www.open-mpi.org/community/help/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ubuntu</category>
      <category>openmpi</category>
      <category>opensource</category>
      <category>parallel</category>
    </item>
  </channel>
</rss>
