大數據完全分散式配置(一)——基礎環境配置、java、zookeeper、hadoop、jobHisoryServer

来源:https://www.cnblogs.com/xxxchik/archive/2022/04/25/16190527.html
-Advertisement-
Play Games

大數據集群配置系列一,完全分散式搭建hadoop,zookeeper。簡單介紹jobhistory的配置流程。 ...


準備工作

最小化安裝master後,確定可以連接Xshell後。克隆出slave1、slave2,修改好網路配置並且確保三台虛擬機都在一個網關里,並能連接Xshell。

使用此教程前,確保已安裝過偽分散式,有一定的linux基礎。(還沒走穩就想跑你想啥呢,老老實實安裝偽分佈去)

同時對三台虛擬機操作有兩種方式:

1、使用Xshall中發送鍵到所有對話功能

2、在一臺虛擬機中配置完畢後,使用scp命令將文件發送其他主機,如果沒有進行過SSH免密配置,scp命令需要輸入接收方主機密碼,進行SSH免密配置後不需要再輸密碼,非常方便。

命名約定:

安裝包提前拷貝在/usr/local/package中,三台虛擬機都有。

安裝的軟體都在/usr/local/下,配置的數據文件地址一般在軟體安裝文件夾中。

基礎環境配置(master、slave1、slave2)

基礎環境配置在三台主機上都要運行命令

修改主機名

分別在三台對應主機上修改,bash命令使改名及時生效

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

bash

關閉防火牆

關閉防火牆

systemctl stop firewalld

禁止防火牆開機自啟

systemctl disable firewalld.service

安裝vim

由於最小化安裝,預設自帶的文件編輯是vi,沒有代碼高亮很不方便,於是安裝vim

首先配置源

1、將源文件備份

cd /etc/yum.repos.d/ && mkdir backup && mv *repo backup/

2、下載阿裡源文件

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

3、更新源裡面的地址

sed -i -e "s|mirrors.cloud.aliyuncs.com|mirrors.aliyun.com|g " /etc/yum.repos.d/CentOS-*
sed -i -e "s|releasever|releasever-stream|g" /etc/yum.repos.d/CentOS-*

4、生成緩存

yum clean all && yum makecache

安裝vim

yum install vim

hosts添加映射

在文件中添加對應ip地址

vim /etc/hosts

192.168.178.100 master
192.168.178.101 slave1
192.168.178.102 slave2

更改時區

timedatectl set-timezone Asia/Shanghai

SSH配置

首先生成密鑰(master、slave1、slave2)

輸入三個回車

ssh-keygen -t rsa
cd ~/.ssh

生成後把密鑰分發,使三台主機之間可以互相連接

由於現在SSH沒有完成,使用scp命令需要輸入主機密碼

# master將生成的密鑰複製到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# slave1和slave2的authorized_keys文件發送給master
# 下麵兩行命令分別slave1和slave2運行
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub_s1  # slave1
scp id_rsa.pub root@master:~/.ssh/id_rsa.pub_s2  # slave2

# master上把密鑰整合,再發放給slave1和slave2
# 下麵命令都在master上運行
cat id_rsa.pub_s1 >> authorized_keys
cat id_rsa.pub_s2 >> authorized_keys
scp ~/.ssh/authorized_keys root@slave1:~/.ssh/
scp ~/.ssh/authorized_keys root@slave2:~/.ssh/

註:如果遇到許可權錯誤,使用下麵兩個命令

# 修改許可權,不一定會用到
chmod 600 ~/.ssh/authorized_keys
chmod 700 -R ~/.ssh

查看三台主機的authorized_keys文件中有三台主機的密鑰。

cat authorized_keys

測試ssh是否成功,不需要再輸密碼,三台虛擬機都可以正常聯通。

ssh master
ssh slave1
ssh slave2

java配置(master、slave1、slave2)

進入安裝包文件夾,解壓java到/usr/local目錄下

tar -xzf /usr/local/package/jdk-8u221-linux-x64.tar.gz -C /usr/local

# 修改文件夾名字
mv /usr/local/jdk1.8.0_202 /usr/local/jdk

配置環境變數

vim /etc/profile

export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

或者/etc/profile中可以這樣配置

export JAVA_HOME=/usr/local/jdk
export JRE_HOME=/usr/local/jdk/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

檢測是否安裝

java -version

分發文件(如果使用了Xshell發送到所有會話,則不用運行下麵命令)

註:分發後記得 source /etc/profile

scp -r /usr/local/jdk root@slave1:/usr/local/
scp -r /usr/local/jdk root@slave2:/usr/local/

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

zookeeper完全分散式配置(master、slave1、slave2)

解壓安裝,修改文件名

tar -zxf /usr/local/package/apache-zookeeper-3.7.0-bin.tar.gz -C /usr/local/

mv /usr/local/apache-zookeeper-3.7.0-bin /usr/local/zookeeper

配置zookeeper系統環境變數($ZOOKEEPER_HOME)

vim /etc/profile

export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

source /etc/profile

修改zkServer.sh文件,加上JAVA_HOME

vim /usr/local/zookeeper/bin/zkServer.sh

export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH

修改配置文件zoo.cfg
zoo.cfg裡面的東西不要刪,增加修改就行

cd /usr/local/zookeeper
mkdir zkdata
mkdir zkdatalog

# 進入配置文件夾
cd conf

# 複製配置模板
cp zoo_sample.cfg zoo.cfg

# 編輯配置
vim zoo.cfg

# 修改其中
dataDir=/usr/local/zookeeper/zkdata
# 增加
dataLogDir=/usr/local/zookeeper/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888下麵是zoo.cfg原文件

數據存儲路徑下創建myid

touch /usr/local/zookeeper/zkdata/myid

分發

scp -r /usr/local/zookeeper root@slave1:/usr/local/
scp -r /usr/local/zookeeper root@slave2:/usr/local/

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

source /etc/profile

修改myid,分別為123。

master中myid寫入1,slave1中myid寫入2,slave2中myid寫入3

可以用cat /usr/local/zookeeper/zkdata/myid命令查看裡面內容

# master
echo 1 > /usr/local/zookeeper/zkdata/myid
# slave1
echo 2 > /usr/local/zookeeper/zkdata/myid
# slave2
echo 3 > /usr/local/zookeeper/zkdata/myid

啟動zookeeper服務(三台同時啟動)

zkServer.sh start

# 如果上面的不行用這個
/usr/local/zookeeper/bin/zkServer.sh start

驗證是否成功

輸入jps後三台主機都顯示

[root@master zkdata]# jps
6075 Jps
6031 QuorumPeerMain

查看三台主機狀態,可以看到一臺主機為leader,另外兩台為follower。

[root@master zkdata]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

[root@slave1 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

[root@slave2 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

常用命令

# 啟動
zkServer.sh start
# 重啟
zkServer.sh restart
# 停止
zkServer.sh stop
# 查看狀態
zkServer.sh status

# 這樣啟動就知道錯誤原因了
zkServer.sh start-foreground

debug

查看日誌發現報錯Cannot open channel to 3 at election address

將本機zoo.cfg中的ip改為0.0.0.0

如何查看日誌?

會在當前終端目錄下生成zookeeper.out文件

Hadoop完全分散式集群配置(master、slave1、slave2)

解壓安裝

tar -zxf /usr/local/package/hadoop-2.7.7.tar.gz -C /usr/local/

mv /usr/local/hadoop-2.7.7 /usr/local/hadoop

配置Hadoop環境變數,註意生效

vim /etc/profile

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

source /etc/profile

配置Hadoop運行環境JAVA_HOME
hadoop-env.sh 用來定義Hadoop運行環境相關的配置信息;

cd /usr/local/hadoop/etc/hadoop

vim hadoop-env.sh

export JAVA_HOME=/usr/local/jdk

core-site.xml全局參數
設置全局參數,指定HDFS上NameNode地址為master,埠預設為9000

vim core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoopData/tmp</value>
</property>

hdfs-site.xml 定義名稱節點、數據節點的存放位置、文本副本的個數、文件讀取許可權等;

vim hdfs-site.xml

<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoopData/name</value>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoopData/data</value>
</property>

<property>
<name>dfs.replication</name>
<value>2</value>
</property>

<property><name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>

<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.permissions</name>
<value>false</value>
</property>

<property>
<name>dfs.datanode.use.datanode.hostnamedatanode</name>
<value>true</value>
</property>

設置YARN運行環境JAVA_HOME參數

vim yarn-env.sh

export JAVA_HOME=/usr/local/jdk

yarn-site.xml 集群資源管理系統參數配置
設置YARN核心參數,指定ResourceManager進程所在主機為master,埠為18141
設置YARN核心參數,指定NodeManager上運行的附屬服務為mapreduce_shuffle

vim yarn-site.xml
<!--nomenodeManager獲取數據的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--配置shuffle,因為map和reduce之間有個shuffle過程,-->
<property>
<name>yarn.nademanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>

<!--調度器介面的地址。-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<!--對每個rm-id,指定RM webapp對應的host-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<!--對每個rm-id設置NodeManager連接的host-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<!--對每個rm-id指定管理命令的host-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>

mapred-site.xml MapReduce參數
設置計算框架參數,指定MR運行在yarn上

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>

設置節點文件,要求master為主節點; slave1、slave2為子節點

echo master > master && echo slave1 > slaves && echo slave2 >> slaves

分發文件

scp -r /usr/local/hadoop root@slave1:/usr/local/
scp -r /usr/local/hadoop root@slave2:/usr/local/

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

source /etc/profile

文件系統格式化 (只在master)

建議格式化之前存快照,三個主機都存,方便後期修改

hadoop namenode -format

啟動Hadoop集群 (只在master)

/usr/local/hadoop/sbin/start-all.sh

開啟集群後在三台主機上運行jps命令查看輸出

[root@master hadoop]# jps
6672 SecondaryNameNode
6817 ResourceManager
7074 Jps
6483 NameNode
6031 QuorumPeerMain

[root@slave1 ~]# jps
2481 DataNode
2150 QuorumPeerMain
2586 NodeManager
2686 Jps

[root@slave2 ~]# jps
2582 NodeManager
2682 Jps
2156 QuorumPeerMain
2477 DataNode

JobHistoryServer(master)

JobHistoryServer是hadoop自帶的歷史伺服器,可以通過歷史伺服器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等信息。在後期學習mapreduce後,這個功能非常有用。

但是JobHistoryServer預設是不開啟的,需要自己配置。但是不需要三台主機都配置,只在master主機配置就可以,流程如下。

首先master關閉集群

/usr/local/hadoop/sbin/stop-all.sh

在 mapred-site.xml 文件中配置,添加下麵內容

cd /usr/local/hadoop/etc/hadoop
vim mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

開啟 jobhistoryserver

/usr/local/hadoop/sbin/mr-jobhistory-daemon.sh start historyserver

開啟集群

/usr/local/hadoop/sbin/start-all.sh

最後使用jps命令查看服務是否都打開

[root@master hadoop]# jps
7569 JobHistoryServer
8083 ResourceManager
8341 Jps
7737 NameNode
7931 SecondaryNameNode
6031 QuorumPeerMain

測試

運行mapreduce實例,結果為4.000000

cd /usr/local/hadoop/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-2.7.7.jar pi 2 3

打開jobhistory WEB UI埠查看信息,可以看到剛剛運行的實例信息。

http://192.168.178.100:19888/


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

-Advertisement-
Play Games
更多相關文章
  • 項目名為“零錢通” 細節參考: 【零基礎 快速學Java】韓順平 零基礎30天學會Java 基本版: 1 package project; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 import java.ut ...
  • 我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 好幾天沒更新austin的系列文章啦,主要是一直在寫austin的代碼。而這篇文章我想了很久標題,最後定為《優雅,不過時》。文章的內容主要由以下部分組成: 應用發佈重啟了怎麼辦?記憶體數據不是丟失了嗎? 什 ...
  • 本文以C#和vb.net代碼示例展示如何來獲取Excel工作表中圖片的坐標位置。這裡的坐標位置是指圖片左上角頂點所在的單元格行和列位置,橫坐標即頂點所在的第幾列、縱坐標即頂點所在的第幾行。下麵是獲取圖片位置的詳細方法及步驟。 【程式環境】 按照如下方法來引用Spire.Xls.dll 版本:12.2 ...
  • 前些天有 AgileConfig 的用戶反映,如果把 AgileConfig 部署成 Windows 服務程式會啟動失敗。我看了一下日誌,發現根目錄被定位到了 C:\Windows\System32 下,那麼讀取 appsettings.json 配置文件自然就失敗了。 var builder = ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 STM32單片機控制單個LED燈亮滅,在PC0引腳控制LED燈以1s為周期閃爍。 硬體設計 在上一節的基礎上,在 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 Arch Linux安裝完gnome桌面後,一般還需要配置好軟體倉庫環境(如AUR助手工具PARU),並需要進行進一步個性化配置(主題、擴展等)。 1. 安裝和使用PARU(AUR助手) AUR 是基於Arch Linux的一個用戶倉庫。 由於 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、問題概述: 由於網路和時間的限制,很多的 conda 源,如 清華源,中科大源都需要想辦法才能創建好虛擬環境(如本人發現的將清華源中的 https:// 改為 http:// 之後效果好很多),但這些源要麼在前幾次創建虛擬環境時奏效,時間長了 ...
  • 通配符 通配符必須全文匹配時才為真,使用LIKE關鍵字 |字元|示例|含義| | | |: | |_|"a_b"|任意一個字元"axb",其中x可以使任意字元,包括漢字| |%|"%a"|任意一個以a結尾的字元串| 正則表達式 字元串str中有任意一個子串能匹配正則表達式,則結果為真。使用REGEX ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...