兩台實體機器4個虛擬機節點的Hadoop集群搭建(Ubuntu版)

来源:https://www.cnblogs.com/ggyt/archive/2023/10/22/17781118.html
-Advertisement-
Play Games

安裝Ubuntu Linux元信息 兩台機器,每台機器兩台Ubuntu Ubuntu版本:ubuntu-22.04.3-desktop-amd64.iso 處理器數量2,每個處理器的核心數量2,總處理器核心數量4 單個虛擬機記憶體8192MB(8G),最大磁碟大小30G 參考鏈接 清華大學開源軟體鏡像 ...


安裝Ubuntu

Linux元信息

  1. 兩台機器,每台機器兩台Ubuntu
  2. Ubuntu版本:ubuntu-22.04.3-desktop-amd64.iso
  3. 處理器數量2,每個處理器的核心數量2,總處理器核心數量4
  4. 單個虛擬機記憶體8192MB(8G),最大磁碟大小30G

參考鏈接

  1. 清華大學開源軟體鏡像站

    https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/

  2. 虛擬機(VMware)安裝Linux(Ubuntu)安裝教程

    https://blog.csdn.net/qq_39657434/article/details/112252844

具體步驟

  1. 把下載好的iso文件保存到一個位置

  2. 開始在VMware安裝Ubuntu

  3. 選擇網路類型(圖片錯了,應該是“橋接網路”,詳見“配置虛擬機網路”)

  4. 指定磁碟容量

  5. 設置鏡像文件

  6. 開始安裝Ubuntu

配置虛擬機網路

配置橋接模式

  1. 查看宿主機WLAN硬體配置信息

  2. 打開VMware中的虛擬網路編輯器,根據宿主機WLAN硬體配置如下信息

設置虛擬機靜態IP

​ 防止每次開機隨機IP,導致無法連接到其他虛擬機

  1. 切換root用戶(第一次切換root用戶需要配置root密碼)

    sudo passwd
    
  2. 打開01-network-manager-all.yaml文件(網卡配置文件)

    vim /etc/netplan/01-network-manager-all.yaml
    
  3. 刪除原內容,複製粘貼如下信息(根據實際情況更改)

    # Let NetworkManager manage all devices on this system
    network:
      ethernets:
        ens33:
          dhcp4: false
          addresses: [192.168.139.101/24]
          routes:
            - to: default
              via: 192.168.139.92
          nameservers:
            addresses: [8.8.8.8]
      version: 2
    
  4. 在宿主機的cmd中運行ipconfig命令查看網路信息,如下圖所示:

  5. 根據第四步更改第三步的部分信息

    • via:宿主機的預設網關
    • addresses:前三位和宿主機預設網關保持一致,後一位自己隨便設置(但要避免和已有ip重覆)

安裝Hadoop

Hadoop元信息

  1. 統一用戶名:hjm,密碼:000000

  2. 四台虛擬機分別為gyt1,gyt2,hjm1,hjm2

  3. 四台虛擬機用橋接模式,連接一臺手機的熱點,虛擬機ip如下:

    hjm1:192.168.139.101

    hjm2:192.168.139.102

    gyt1:192.168.139.103

    gyt2:192.168.139.104

  4. 集群部署規劃

    hjm1 hjm2 gyt1 gyt2
    HDFS NameNode、DataNode DataNode SecondaryNameNode、DataNode DataNode
    YARN NodeManager NodeManager NodeManager ResourceManager、NodeManager

配置用戶sudo許可權

​ 配置以後,每次使用sudo,無需輸入密碼

  1. 用sudo許可權打開sudoers文件

    sudo vim /etc/sudoers
    
  2. 增加修改sudoers文件,在%sudo下麵新加一行(這裡以hjm用戶為例)

    # Allow members of group sudo to execute any command
    %sudo   ALL=(ALL:ALL) ALL
    
    hjm ALL=(ALL) NOPASSWD: ALL
    

創建目錄並更改許可權

  1. 創建module和software文件夾

    sudo mkdir /opt/module
    sudo mkdir /opt/software
    
  2. 修改 module、software 文件夾的所有者和所屬組均為hjm用戶

    sudo chown hjm:hjm /opt/module
    sudo chown hjm:hjm /opt/software
    

Ubuntu查看、安裝和開啟ssh服務

  1. 查看ssh服務的開啟狀態,如果開啟,則可以跳過這一部分

    ps -e|grep ssh
    
  2. 安裝ssh服務

    sudo apt-get install openssh-server
    
  3. 啟動ssh服務

    sudo /etc/init.d/ssh start
    

​ 註意:

​ 當你用ssh軟體(這裡預設是Xhell 7)連接時,不要用root用戶連,ssh預設 不能用root直接連,除非修改配置文件

安裝JDK

  1. 用xftp工具將jdk導入到opt目錄下麵的software文件夾下麵

  2. 解壓jdk到opt/module目錄下

    tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
    
  3. 配置jdk環境變數

    (1)新建/etc/profile.d/my_env.sh 文件

    sudo vim /etc/profile.d/my_env.sh
    

    (2)添加以下內容

    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    

    (3)保存後退出,source 一下/etc/profile 文件,讓新的環境變數 PATH 生效

    source /etc/profile
    

    (4)測試jdk是否安裝成功

    java -version
    

安裝Hadoop

  1. 用xftp工具將hadoop導入到opt目錄下麵的software文件夾下麵

  2. 解壓hadoop到opt/module目錄下

    tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
    
  3. 配置hadoop環境變數

    (1)打開/etc/profile.d/my_env.sh 文件

    sudo vim /etc/profile.d/my_env.sh
    

    (2)在 my_env.sh 文件末尾添加如下內容

    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.1.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    

    (3)保存後退出,source 一下/etc/profile 文件,讓新的環境變數 PATH 生效

    source /etc/profile
    

    (4)測試hadoop是否安裝成功

    hadoop version
    

修改配置文件

​ cd到$HADOOP_HOME/etc/hadoop目錄

core-site.xml

<configuration>
 <!-- 指定 NameNode 的地址 -->
 <property>
 <name>fs.defaultFS</name>
 <value>hdfs://hjm1:8020</value>
 </property>
 <!-- 指定 hadoop 數據的存儲目錄 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.1.3/data</value>
 </property>
 <!-- 配置 HDFS 網頁登錄使用的靜態用戶為 hjm -->
 <property>
 <name>hadoop.http.staticuser.user</name>
 <value>hjm</value>
 </property>
</configuration>

hdfs-site.xml

<configuration>
<!-- nn web 端訪問地址-->
<property>
 <name>dfs.namenode.http-address</name>
 <value>hjm1:9870</value>
 </property>
<!-- 2nn web 端訪問地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>gyt1:9868</value>
 </property>
</configuration>

yarn-site.xml

<configuration>
 <!-- 指定 MR 走 shuffle -->
 <property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
 </property>
 <!-- 指定 ResourceManager 的地址-->
 <property>
 <name>yarn.resourcemanager.hostname</name>
 <value>gyt2</value>
 </property>
 <!-- 環境變數的繼承 -->
 <property>
 <name>yarn.nodemanager.env-whitelist</name>
 
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>
</configuration>

mapred-site.xml

<configuration>
<!-- 指定 MapReduce 程式運行在 Yarn 上 -->
 <property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value>
 </property>
</configuration>

workers

hjm1
hjm2
gyt1
gyt2

克隆虛擬機

  1. 在hjm1和gyt1的兩台宿主機上分別克隆出hjm2和gyt2

  2. 按照“配置虛擬機網路-設置虛擬機靜態IP”的方式,配置hjm2的ip為192.168.139.102,gyt2的ip為192.168.139.104

  3. 改每台虛擬機的ubuntu映射文件,這裡以gyt2為例

    127.0.0.1       localhost
    # 127.0.1.1       gyt2 記得刪除這一行
    192.168.139.101 hjm1
    192.168.139.102 hjm2
    192.168.139.103 gyt1
    192.168.139.104 gyt2
    
  4. 修改四台虛擬機的主機名分別為hjm1,hjm2,gyty1,gyt2

    sudo vim /etc/hostname
    
  5. 重啟虛擬機

ssh免密登錄

  1. 分別要配置16種免密登錄,如下圖所示

  1. 切換hjm用戶,cd到~/.ssh,生成公鑰和私鑰

    ssh-keygen -t rsa
    
  2. 將公鑰複製到目的機上,這裡以hjm1舉例

    ssh-copy-id hjm1
    

xsync集群分發腳本

  1. 在/home/hjm/bin目錄下創建xsync文件

  2. 在該文件中編寫如下代碼

    #!/bin/bash
    #1. 判斷參數個數
    if [ $# -lt 1 ]
    then
     echo Not Enough Arguement!
     exit;
    fi
    #2. 遍歷集群所有機器
    for host in hadoop102 hadoop103 hadoop104
    do
     echo ==================== $host ====================
     #3. 遍歷所有目錄,挨個發送
     for file in $@
     do
     #4. 判斷文件是否存在
     if [ -e $file ]
     then
     #5. 獲取父目錄
     pdir=$(cd -P $(dirname $file); pwd)
     #6. 獲取當前文件的名稱
     fname=$(basename $file)
     ssh $host "mkdir -p $pdir"
     rsync -av $pdir/$fname $host:$pdir
     else
     echo $file does not exists!
     fi
     done
    done
    
  3. 修改腳本xsync具有執行許可權

    chmod +x xsync
    
  4. 測試腳本

    xsync /home/atguigu/bin
    
  5. 將腳本複製到/bin中,以便全局調用

    sudo cp xsync /bin/
    
  6. 在客戶端電腦(預設windows)配置映射

    (1)windows + R

    (2)輸入drivers,回車

    (3)進入etc文件夾

    (4)編輯hosts文件

    192.168.139.101 hjm1
    192.168.139.102 hjm2
    192.168.139.103 gyt1
    192.168.139.104 gyt2
    

測試hadoop

  1. 格式化NameNode

    如果集群是第一次啟動,需要在 hadoop102 節點格式化 NameNode(註意:格式化 NameNode,會產生新的集群 id,導致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往數據。如果集群在運行過程中報錯,需要重新格式化 NameNode 的話,一定要先停止 namenode 和 datanode 進程,並且要刪除所有機器的 data 和 logs 目錄,然後再進行格式化。)

    hdfs namenode -format
    
  2. 在hjm1上啟動hdfs

    sbin/start-dfs.sh
    
  3. 在gyt2上啟動yarn

    sbin/start-yarn.sh
    
  4. Web 端查看 HDFS 的 NameNode

    http://hjm1:9870

  5. Web 端查看 YARN 的 ResourceManager

    http://gyt2:8088

  6. 測試結果

    (1)datanode

    (2)Yarn

    (3)WordCount

報錯及解決

  1. https://blog.csdn.net/sinat_23225111/article/details/127497281

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝: go install github.com/jan-bar/interesting/findModVer@latest 執行:findModVer d:\myproject 結果如下圖所示: 根據結果可以找到哪個依賴導致google.golang.org/grpc v1.45.0使用了這個版 ...
  • 本文介紹在C++語言中,使用一個函數,並返回兩個及以上、同類型或不同類型的返回值的具體方法。 對於C++語言而言,其不能像Python等語言一樣在一個函數中返回多個返回值;但是我們也會經常遇到需要返回兩個甚至更多個值的需求。針對這種情況,我們可以通過pair、tuple(元組)等數據結構,實現C++ ...
  • 1. 什麼是虛擬線程 虛擬線程是JDK21版本正式發佈的一個新特性。虛擬線程和平臺線程主要區別在於,虛擬線程在運行周期內不依賴操作系統線程:它們與硬體脫鉤,因此被稱為“虛擬”。這種解耦是由JVM提供的抽象層賦予的。 虛擬線程的運行成本遠低於平臺線程。它們消耗的記憶體要少得多。這就是為什麼我們可以創建數 ...
  • 大家好,我是大彬~ 今天跟大家分享知識星球小伙伴關於【非科班轉碼如何補基礎】的提問。 往期星球提問整理: 讀博?找工作? 性格測試真的很重要 想找一份實習工作,需要準備什麼 球友提問: 大彬大佬,想問下非科班要補哪些基礎? 求推薦視頻,國內國外都行。 大彬的回答: 你好,我也是非科班轉碼的,Java ...
  • ARP (Address Resolution Protocol,地址解析協議),是一種用於將 `IP` 地址轉換為物理地址(`MAC地址`)的協議。它在 `TCP/IP` 協議棧中處於鏈路層,為了在區域網中能夠正確傳輸數據包而設計,由協議數據單元和對應的操作命令組成。`ARP` 既可以由操作系統處... ...
  • aspnetcore微服務之間通信grpc,一般服務對外介面用restful架構,HTTP請求,服務之間的通信grpc多走內網。 以前寫過一篇grpc和web前端之間的通訊,代碼如下: exercisebook/grpc/grpc-web at main · liuzhixin405/exercis ...
  • 正則表達式是一種用來匹配字元串的規則。每個字元在正則表達式中都有其特定的含義,下麵是一些常見的字元及其含義: 1. ^:匹配字元串的開頭位置。 2. $:匹配字元串的結尾位置。 3. .:匹配任意單個字元。 4. *:匹配0個或多個前面的字元。 5. +:匹配1個或多個前面的字元。 6. ?:匹配0 ...
  • 在我們開發的前端項目中,往往為了方便,都需對一些控制項進行自定義的處理,以便實現快速的數據綁定以及便捷的使用,本篇隨筆介紹通過抽取常見字典列表,實現通用的字典類型綁定;以及通過自定義控制項的屬性處理,實現系統字典內容的快捷綁定的操作。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...