在阿裡雲和騰訊雲的輕量應用伺服器上搭建Hadoop集群

来源:https://www.cnblogs.com/ggyt/archive/2023/09/20/17716287.html
-Advertisement-
Play Games

引入 本文在兩台2核2g的雲伺服器上搭建了Hadoop集群,兩台雲伺服器分別是阿裡雲(hjm)和騰訊雲(gyt),集群部署規劃如下: hjm gyt HDFS NameNode\SecondaryNameNode\DataNode DataNode YARN ResourceManager\Node ...


引入

本文在兩台2核2g的雲伺服器上搭建了Hadoop集群,兩台雲伺服器分別是阿裡雲(hjm)和騰訊雲(gyt),集群部署規劃如下:

hjm gyt
HDFS NameNode\SecondaryNameNode\DataNode DataNode
YARN ResourceManager\NodeManager NodeManager

經實驗,目前可以正常實現文件上傳下載,但跑mapreduce程式還出現伺服器資源不夠的情況

搭建過程

新增用戶

useradd hujinming
passwd hujinming

配置用戶sudo許可權

vim /etc/sudoers

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

下麵新增一行

hujinming ALL=(ALL) NOPASSWD:ALL

創建目錄並更改許可權

在/opt 目錄下創建 module、software 文件夾

mkdir /opt/module
mkdir /opt/software

切換到root用戶下,修改 module、software 文件夾的所有者和所屬組均為hujinming用戶

chown hujinming:hujinming /opt/module
chown hujinming:hujinming /opt/software

查看 module、software 文件夾的所有者和所屬組

ll

安裝JDK

  • 用xftp工具將jdk導入到opt目錄下麵的software文件夾下麵
  • 解壓jdk到opt/module目錄下
tar -zxvf jdk-8u212-linux.x64.tar.gz -C /opt/module/
  • 配置jdk環境變數

    • 新建/etc/profile.d/my_env.sh 文件
    sudo vim /etc/profile.d/my_env.sh
    
    • 添加如下內容
    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_212
    export PATH=$PATH:$JAVA_HOME/bin
    
    • 保存後退出,source 一下/etc/profile 文件,讓新的環境變數 PATH 生效
    source /etc/profile
    
    • 測試jdk是否安裝成功
    java -version
    

安裝hadoop

  • xftp傳輸

  • 解壓安裝到/opt/module下麵

  • 將hadoop添加到環境變數

    • 獲取hadoop安裝路徑

      pwd
      
    • 打開/etc/profile.d/my_env.sh 文件

      sudo vim /etc/profile.d/my_env.sh
      
    • 在 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
      
    • 保存退出,讓修改後的文件生效

    • 測試是否安裝成功

伺服器IP映射

  • 修改主機名
vim /etc/hostname

分別把兩台伺服器的名字改成hjm和gyt,這裡以gyt舉例,直接在hostname文件上輸入

gyt
  • 改映射文件
vim /etc/hosts

在linux中鍵入ifconfig命令可以查看內網ip。在兩台伺服器中,填寫自己的私網,訪問別人的填寫公網,這裡以gyt為例,gyt的公網IP是175.178.236.48,內網IP是10.0.12.1。這裡要註意一點,阿裡雲在hosts文件中已經將本地IP映射成了一串英文,把這行信息刪掉再進行上面的操作

47.115.207.108 hjm
10.0.12.1 gyt
  • 在客戶端電腦(預設windows)配置映射

    因為在客戶端電腦進行hadoop的操作時,兩台機子會產生通信,他們通信時發送的網路請求url是gyt或者hjm,這在客戶端電腦是無法識別的,所以要將gyt和hjm都映射為他們的公網IP

    • windows + R

    • 輸入drivers,回車

    • 進入etc文件

    • 編輯hosts文件(都是公網IP)

      175.178.236.48 gyt
      47.115.207.108 hjm
      

ssh免密登錄

分別要配置4種免密登錄:

  • hjm -> gyt
  • gyt -> hjm
  • hjm -> hjm
  • gyt -> gyt

註意切換對應用戶操作。先cd到~/.ssh,生成公鑰和私鑰

ssh-keygen -t rsa

這裡以gyt -> hjm或hjm -> hjm為例:

ssh-copy-id hjm

修改配置文件

cd到$HADOOP_HOME/etc/hadoop目錄

core-site.xml

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

hdfs-site.xml

<configuration>
<!-- nn web 端訪問地址-->
<property>
 <name>dfs.namenode.http-address</name>
 <value>hjm:9870</value>
 </property>
<!-- 2nn web 端訪問地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hjm: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>hjm</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

hjm
gyt

去伺服器上啟動對應埠

  • 用各自的伺服器對雙方暴露所有的埠
  • 同時,對公網暴露9864、9866、9870、9868埠

問題與解決

  1. ./sbin/start-dfs.sh 開啟NameNode 和 DataNode 守護進程報錯:

    Starting namenodes on [hjm]
    ERROR: Attempting to operate on hdfs namenode as root
    ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
    Starting datanodes
    ERROR: Attempting to operate on hdfs datanode as root
    ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
    Starting secondary namenodes [hjm]
    ERROR: Attempting to operate on hdfs secondarynamenode as root
    ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
    

    解決方法:

    在hjm上的start-dfs.sh和stop-dfs.sh上增加如下幾行:

    HDFS_DATANODE_USER=hujinming
    HADOOP_SECURE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=hujinming
    HDFS_SECONDARYNAMENODE_USER=hujinming
    

    在hjm上的start-yarn.sh和stop-yarn.sh上增加如下幾行:

    YARN_RESOURCEMANAGER_USER=hujinming
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=hujinming
    
  2. 報錯hjm: ERROR: Cannot set priority of namenode process 23214,沒有啟動NameNode和SecondaryNameNode

​ 解決方法:

​ 在兩台伺服器的/etc/hosts中,填寫自己的私網,訪問別人的填寫公網

  1. 找不到NameNode和SecondaryNameNode

​ 解決方法:

​ 把所有節點logs和data刪掉,重新格式化namenode,在hjm機子上,執行下麵命令:

hdfs namenode -format
  1. 客戶端(windows)識別不了hjm和gyt

​ 解決方法:改windows下麵的主機名映射

  1. 配置WebUI可跨域?

​ 解決方法:在兩台伺服器的core-site.xml加入下麵代碼

        <!--web console cors settings-->
        <property>
            <name>hadoop.http.filter.initializers</name>
            <value>org.apache.hadoop.security.HttpCrossOriginFilterInitializer</value>
        </property>
        <property>
            <name>hadoop.http.cross-origin.enabled</name>
            <value>true</value>
        </property>
        <property>
            <name>hadoop.http.cross-origin.allowed-origins</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.http.cross-origin.allowed-methods</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.http.cross-origin.allowed-headers</name>
            <value>X-Requested-With,Content-Type,Accept,Origin</value>
        </property>
        <property>
            <name>hadoop.http.cross-origin.max-age</name>
            <value>1800</value>
        </property>
  1. 沒有足夠的副本數量?

​ 解決方法:還得看DataNode的數量。因為目前只有2台設備,最多也就2個副本,HDFS預設是3個副本,只有節點數的增加到10台時,副本數才能達到10。詳細請看https://www.yii666.com/article/664023.html

  1. hadoop腳本啟動時,錯誤: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain?

​ 解決方法:在master主機的slaves文件中刪除localhost即可。詳細請看https://blog.csdn.net/Mr_ZNC/article/details/80700652

  1. HDFS的webui界面上傳下載文件,出現卡死情況?

​ 解決方法:暴露伺服器所有埠給對方


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

-Advertisement-
Play Games
更多相關文章
  • 在我們設計軟體的很多地方,都看到需要對錶格數據進行導入和導出的操作,主要是方便客戶進行快速的數據處理和分享的功能,本篇隨筆介紹基於WPF實現DataGrid數據的導入和導出操作。 ...
  • 摘要:本智能化住宅防盜報警系統通過PLC以及組態監控實現了多種功能。系統可以自動控制和手動控制,在家人離開後啟動,在到達家後停止。當家裡沒有人時,系統會模擬有人居住的情況,通過設置燈光變換和排氣扇間斷工作來製造有人的情況。晚上通過設置燈光的變化來模擬生活的場景,白天的時候關閉燈光,晚上的時候打開卧室 ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他生產上的程式有記憶體暴漲情況,讓我幫忙看下怎麼回事,最簡單粗暴的方法就是讓朋友在記憶體暴漲的時候抓一個dump下來,看一看大概就知道咋回事了。 二:Windbg 分析 1. 到底是誰吃了記憶體 這個問題說的再多也不為過,一定要看清楚這個程式是如何個性化發展 ...
  • 前言 在構建API項目時,有時出於安全考慮,防止訪問用戶惡意攻擊,希望限制此用戶ip地址的請求次數,減輕拒絕服務攻擊可能性,也稱作限流。接下來,我們就來學習開源庫DotNetRateLimiter 如何輕鬆實現限流。 項目使用配置 安裝Nuget包 在新建立的WebAPI項目中,通過Nuget包管理 ...
  • 因為我本身沒有參與過項目架構,所以為了避免後續的開發過程中項目無序,繁雜。所以在這裡我要給我自己設定一個規範。 後端 目前採用的就是:Net6(長期支持)+倉儲模式(類似三層架構) 雖然現在流行微服務,但我目前還沒法自己完全去做,還得學啊! 目前8的預覽版已經出現,但是得申請,7的話是標準期限支持, ...
  • 可擴展性對於物聯網管理系統的設計和開發非常重要,它直接影響著系統的性能、可靠性和能耗等方面,是評估一個系統優劣的重要因素之一。可擴展性對物聯網管理系統的影響主要體現在以下幾個方面: ...
  • 引言 作為一名後端工程師,使用終端是一種常見的做法,也是你應該學習的技能。許多命令和實用程式可以幫助你在使用 Linux 時更有效地完成任務。 基本 Linux 命令 如果你想使用 Linux 操作系統,學習常用的命令將會大有幫助。本篇將為後端工程師回顧一些基本到高級的 Linux 操作命令。 基礎 ...
  • 1. MySQL的客戶端/伺服器通信協議 1.1. MySQL的客戶端和伺服器之間的通信協議是“半雙工”的 1.2. 在任何時刻,要麼是由伺服器向客戶端發送數據,要麼是由客戶端向伺服器發送數據,這兩個動作不能同時發生 1.3. 當查詢的語句很長的時候,參數max_allowed_packet就特別重 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...