Hadoop3高可用叢集搭建

叢集規劃

本次安裝擬使用的各軟體版本如下

CentOS 7。6

Zookeeper 3。6。3

Hadoop 3。2。2

Hive 3。1。2

Spark 3。0。2

Sqoop 1。4。7

MySQL 8。0。21

機器規劃

Hadoop3高可用叢集搭建

一、安裝CentOS 7。6

若使用虛擬機器,建議選擇2CPU2執行緒,4G或以上記憶體,至少50G硬碟。

安裝過程注意事項主要包括:

日期和時間:選擇上海

語言支援:簡體中文和英語

軟體選擇:最小安裝,選擇其中的除錯工具、相容性程式庫、開發工具、安全性工具、和系統管理工具

設定root密碼:root123

安裝完成後,重啟即可登入系統

Hadoop3高可用叢集搭建

Hadoop3高可用叢集搭建

二、配置Linux

使用root使用者登入機器,進行相關配置

2。1 配置IP地址

修改檔案/etc/sysconfig/network-scripts/ifcfg-ens33,變更相關配置,應保證hadoop叢集機器IP地址不變

ONBOOT=yesBOOTPROTO=staticIPADDR=192。168。100。124NETMASK=255。255。255。0GATEWAY=192。168。100。1DNS1=114。114。114。114DNS2=218。2。135。1

2。2 基礎配置

配置主機名。根據機器不同,設定不同的主機名,從hadoop101開始。命令:

hostnamectl set-hostname hadoop101

關閉防火牆。依次執行下列命令,最後檢視防火牆狀態

systemctl stop firewalld。service #停止firewallsystemctl disable firewalld。service #禁止firewall開機啟動systemctl status firewalld。service #檢視firewall狀態

關閉selinux。修改檔案/etc/sysconfig/selinux,將SELINUX=enforcing改為SELINUX=disabled。然後重啟後用

sestatus

命令檢視狀態

# sestatusSELinux status: disabled

安裝net-tools。可線上或離線安裝

# 線上安裝命令sudo yum -y install net-tools# 離線安裝# 下載net-tools包,centos7版本: http://mirrors。163。com/centos/7/os/x86_64/Packages/net-tools-2。0-0。25。20131004git。el7。x86_64。rpm# 離線安裝命令sudo rpm -Uvh net-tools-2。0-0。25。20131004git。el7。x86_64。rpm# 驗證安裝是否成功netstat -nltp

2。3 配置hadoop使用者

本次安裝計劃在hadoop使用者下,安裝和使用hadoop叢集 。命令如下:

# 首先建立使用者useradd hadoop# 配置密碼passwd hadoop # 將hadoop的密碼設定為:hadoop123# 配置sudo許可權vi /etc/sudoers# 在101行左右,新增一行:hadoop ALL=(ALL) NOPASSWD:ALL

2。4 配置基本目錄

為hadoop叢集安排3個目錄存放相關內容

程式目錄:/app

資料目錄:/data

日誌目錄:/applogs

mkdir /app /applogs /datachown -R hadoop: /app /data /applogs

從本步驟之後,不做特別說明,均使用hadoop使用者進行相關操作

2。5 安裝jdk

下載:https://www。oracle。com/java/technologies/javase/javase-jdk8-downloads。html

上傳到Centos後解壓並安裝

# 解壓上傳的檔案tar zxvf jdk-8u281-linux-x64。tar。gz -C /app/# 配置環境變數sudo vi /etc/profile。d/env。shsudo chmod 777 /etc/profile。d/env。sh# 在檔案中新增下列配置export JAVA_HOME=/app/jdk1。8。0_281export CLASSPATH=。:$JAVA_HOME/lib/dt。jar:$JAVA_HOME/lib/tools。jarexport PATH=$JAVA_HOME/bin:$PATH# 完成後,啟用環境變數source /etc/profile

驗證是否安裝完成

Hadoop3高可用叢集搭建

2。6 配置管理指令碼

建立指令碼存放目錄:mkdir -p /home/hadoop/bin

2。6。1 配置分發指令碼

建立指令碼/home/hadoop/xsync,檔案寫入下列內容,並賦予執行許可權

chmod +x xsync

#!/bin/bash#1。 判斷引數個數[ $# -lt 1 ] && { echo Not Enough Arguement! exit}# 遍歷所有目標,同步所有檔案for file in $@ do echo ====================== sync $file ===================== [ -e $file ] && { for host in hadoop101 hadoop102 hadoop103 do echo ————————- $host —————————— #5。 獲取父目錄 pdir=$(cd -P $(dirname $file); pwd) #6。 獲取當前檔案的名稱 fname=$(basename $file) ssh $host “mkdir -p $pdir” rsync -av $pdir/$fname $host:$pdir done } || { echo $file does not exists, please check again! }done

2。6。2 配置程序檢視指令碼

建立檔案 /home/hadoop/bin/jpsall,輸入下列內容,並授予執行許可權

#!/bin/bashfor host in hadoop101 hadoop102 hadoop103do echo =============== $host =============== ssh $host jpsdone

2。7 克隆虛擬機器

將本基礎機器關閉,再克隆生成三臺新的虛擬機器,注意克隆時選擇建立完整克隆

Hadoop3高可用叢集搭建

Hadoop3高可用叢集搭建

2。8 依次配置3臺機器

配置ip地址

配置主機名,主機名配置為hadoop101、hadoop102、hadoop103

hostnamectl set-hostname hadoop101

修改所有機器的 /etc/hosts,新增以下內容:

192。168。100。124 hadoop101 192。168。100。129 hadoop102 192。168。100。130 hadoop103

為3臺機器做ssh免密訪問。要求效果root之間免密訪問,hadoop使用者之間免密訪問。

ssh-keygen -t rsa

#

將所有伺服器的 id_rsa。pub 內容彙總到 authorized_keys

#

!!! 偽分散式,也必須要先生成 authorized_keys 檔案!!!

#

複製到其他伺服器

#

scp authorized_keys @hadoop002:

$PWD

#

ssh-copy-id 將key寫到遠端機器的 ~/ 。ssh/authorized_key。檔案中

ssh-copy-id -i ~/。ssh/id_rsa。pub hadoop@hadoop101

#

修改hadoop使用者的。ssh下的許可權(root不用修改)

sudo chmod 700 /home/hadoop/。ssh

sudo chmod 600 /home/hadoop/。ssh/*

Hadoop3高可用叢集搭建

Hadoop3高可用叢集搭建

2。9 配置時間同步

首先從伺服器先同步時間,再執行以下操作

sudo ntpdate ntp1。aliyun。com

或者使用命令

sudo ntpdate 192。168。100。124

編輯 hadoop101 時間伺服器配置檔案

sudo vi /etc/ntp。conf

#這一行的含義是授權172。16。128。0網段上的所有機器可以從這臺機器上查詢和同步時間。 restrict 192。168。100。0 mask 255。255。255。0 nomodify notrap # 修改server段內容 server 210。72。145。44 server ntp1。aliyun。com server ntp2。aliyun。com server ntp3。aliyun。com server 0。centos。pool。ntp。org iburst server 1。centos。pool。ntp。org iburst server 2。centos。pool。ntp。org iburst server 3。centos。pool。ntp。org iburst server 127。127。1。0 fudge 127。127。1。0 stratum 10

編輯其他機器的時間服務配置檔案

sudo vi /etc/ntp。conf

server 192。168。100。124 fudge 192。168。100。124 stratum 10

啟動ntpd服務並設定開機啟動

sudo service ntpd start sudo systemctl enable ntpd sudo systemctl enable ntpdate sudo systemctl is-enabled ntpd

參考文件:

https://blog。csdn。net/vic_qxz/article/details/80343351 https://www。linuxprobe。com/centos7-ntp-time。html

三、安裝Zookeeper

1。 安裝步驟

下載zookeeper3。6。3版本,解壓檔案到/app路徑下

下載地址:https://mirrors。tuna。tsinghua。edu。cn/apache/zookeeper/zookeeper-3。6。3/apache-zookeeper-3。6。3-bin。tar。gz

tar zxvf apache-zookeeper-3。6。3-bin。tar。gz -C /app/

建立相關的目錄,存放資料和日誌

mkdir -p /data/zookeeper/zdata/data

mkdir -p /data/zookeeper/zdata/logs

為各伺服器在data目錄下,生成myid檔案,不同伺服器myid內值不能相同。從1開始,依次增加

echo 1 > /data/zookeeper/zdata/data/myid

修改zookeeper的配置檔案,複製zoo_sample。cfg為zoo。cfg

cd /app

ln -s apache-zookeeper-3。6。3-bin zookeeper

cd zookeeper/conf

cp zoo_sample。cfg zoo。cfg

#

修改zoo。cfg,以下為配置資訊

dataDir=/data/zookeeper/zdata/data

dataLogsDir=/data/zookeeper/zdata/logs

#

副本數

autopurge。snapRetainCount=3

server。1=hadoop101:2888:3888

server。2=hadoop102:2888:3888

server。3=hadoop103:2888:3888

4lw。commands。whitelist=*

分發zookeeper到各伺服器,注意修改各伺服器的myid

cd /app

xsync apache-zookeeper-3。6。3-bin zookeeper

cd /data

xsync zookeeper

#

在hadoop102執行

echo 2 > /data/zookeeper/zdata/data/myid

#

在hadoop103執行

echo 3 > /data/zookeeper/zdata/data/myid

配置環境變數

#

在/etc/profile。d/env。sh中新增

export ZOOKEEPER_HOME=/app/apache-zookeeper-3。6。3

#

同步到各機器

sudo /home/hadoop/bin/xsync /etc/profile。d/env。sh

#

在所有伺服器應用新的環境變數

編寫叢集管理指令碼 myzookeeper。sh,指令碼放置在home目錄下面的bin目錄中(/home/hadoop/bin)

#

!/bin/bash

if [ $# -lt 1 ]

then

echo “No Args Input。。。”

exit ;

fi

case $1 in

“start”)

echo “ =================== 啟動 zookeeper 叢集 ======================”

for host in hadoop101 hadoop102 hadoop103

do

echo “————————- 啟動 $host ——————————-”

ssh $host “/app/apache-zookeeper-3。6。3/bin/zkServer。sh start”

done

;;

“stop”)

echo “ =================== 關閉 zookeeper 叢集 ======================”

for host in hadoop101 hadoop102 hadoop103

do

echo “————————- 關閉 $host ——————————-”

ssh $host “/app/apache-zookeeper-3。6。3/bin/zkServer。sh stop”

done

;;

“status”)

echo “ =================== 檢查 zookeeper 叢集 ======================”

for host in hadoop101 hadoop102 hadoop103

do

echo “————————- 檢查 $host ——————————-”

ssh $host “/app/apache-zookeeper-3。6。3/bin/zkServer。sh status”

done

esac

2。 啟動驗證

myzookeeper。sh start

Hadoop3高可用叢集搭建

四、安裝Hadoop

1。 安裝說明

本次使用Hadoop3。2。2版本,重點參考文件 https://blog。csdn。net/u012760435/article/details/104401268

本次安裝程式是基於zookeeper搭建HA環境,請先安裝zookeeper

2。 檔案配置

下載解壓hadoop:

https://mirrors.bfsu.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz

tar zxvf hadoop-3。2。2。tar。gz -C /appcd /appln -s hadoop-3。2。2 hadoop

2。2 配置core-site。xml

<!—— HDFS主入口,mycluster僅是作為叢集的邏輯名稱,可隨意更改但務必與hdfs-site。xml中dfs。nameservices值保持一致 ——> fs。defaultFS hdfs://mycluster<!—— 預設的hadoop。tmp。dir指向的是/tmp目錄,將導致namenode與datanode資料全都儲存在易失目錄中,此處進行修改 ——> hadoop。tmp。dir /data/hadoop/tmp<!—— 使用者角色配置,不配置此項會導致web頁面報錯(不能操作資料) ——> hadoop。http。staticuser。user hadoop<!—— zookeeper叢集地址,這裡只配置了單臺,如是叢集以逗號進行分隔 ——> ha。zookeeper。quorum hadoop101:2181,hadoop102:2181,hadoop103:2181<!—— 許可權配置 hadoop。proxyuser。{填寫自己的使用者名稱}。hosts——> hadoop。proxyuser。hadoop。hosts * hadoop。proxyuser。hadoop。groups *<!—— 解決journalnode連線不上,導致namenode啟動問題 ——><!—— 也有可能是網路的問題,參考該文章:https://blog。csdn。net/tototuzuoquan/article/details/89644127 ——><!—— 在dev環境中出現連不上journalnode問題,新增該配置,以增加重試次數和間隔 ——> ipc。client。connect。max。retries 100 Indicates the number of retries a client will make to establish a server connection。 ipc。client。connect。retry。interval 10000 Indicates the number of milliseconds a client will wait for before retrying to establish a server connection。

2。3 配置hadoop-env。sh

export JAVA_HOME=/app/jdk1。8。0_281export HDFS_NAMENODE_USER=“hadoop”export HDFS_DATANODE_USER=“hadoop”export HDFS_ZKFC_USER=“hadoop”export HDFS_JOURNALNODE_USER=“hadoop”

2。4 配置hdfs-site。xml

<!—— 副本數配置 ——> dfs。replication 2<!—— 叢集名稱,此值在接下來的配置中將多次出現務必注意同步修改 ——> dfs。nameservices mycluster<!—— 所有的namenode列表,此處也只是邏輯名稱,非namenode所在的主機名稱 ——> dfs。ha。namenodes。mycluster nn1,nn2<!—— namenode之間用於RPC通訊的地址,value填寫namenode所在的主機地址 ——><!—— 預設埠8020,注意mycluster與nn1要和上文的配置一致 ——> dfs。namenode。rpc-address。mycluster。nn1 hadoop101:8020 dfs。namenode。rpc-address。mycluster。nn2 hadoop102:8020<!—— namenode的web訪問地址,預設埠9870 ——> dfs。namenode。http-address。mycluster。nn1 hadoop101:9870 dfs。namenode。http-address。mycluster。nn2 hadoop102:9870<!—— journalnode主機地址,最少三臺,預設埠8485 ——><!—— 格式為 qjournal://jn1:port;jn2:port;jn3:port/${nameservices} ——><!—— a shared edits dir must not be specified if HA is not enabled ——><!—— 偽分散式時,取消該配置 ——> dfs。namenode。shared。edits。dir qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/mycluster<!—— 故障時自動切換的實現類,照抄即可 ——> dfs。client。failover。proxy。provider。mycluster org。apache。hadoop。hdfs。server。namenode。ha。ConfiguredFailoverProxyProvider<!—— 故障時相互操作方式(namenode要切換active和standby),這裡我們選ssh方式 ——> dfs。ha。fencing。methods sshfence<!—— 修改為自己使用者的ssh key存放地址 ——> dfs。ha。fencing。ssh。private-key-files /home/hadoop/。ssh/id_rsa<!—— namenode日誌檔案輸出路徑,即journalnode讀取變更的位置 ——> dfs。journalnode。edits。dir /data/hadoop/journalnode<!—— 啟用自動故障轉移 ——> dfs。ha。automatic-failover。enabled true dfs。webhdfs。enabled true<!—— 解決 DataXceiver error processing WRITE_BLOCK operation src ——> dfs。datanode。max。transfer。threads 8192 Specifies the maximum number of threads to use for transferring data in and out of the DN。

2。5 配置workers

填入所有datanode的主機名稱,不能留有空格

hadoop101hadoop102hadoop103

2。6 配置環境變數

export HADOOP_HOME=/app/hadoop-3。2。2export PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbin# 同步到各機器sudo /home/hadoop/bin/xsync /etc/profile。d/env。sh# 在所有伺服器應用新的環境變數

2。7 修改程序最大檔案開啟數

sudo vi /etc/security/limits。conf

# 參考 https://blog。csdn。net/knowledgeaaa/article/details/21240247# 新增以下內容* - nofile 1000000* - nproc 1000000

3。 首次啟動叢集

Hadoop3高可用叢集搭建

將同步hadoop目錄及配置檔案到所有機器

cd /appxsync hadoop-3。2。2

啟動journalnode,在所有journalnode節點上啟動journalnode(本例中是所有機器)

hdfs ——daemon start journalnode

初始化namenode,在任意namenode節點上執行格式化命令,出現successfully formated即為執行成功(本次在hadoop101執行)

hdfs namenode -format# 安裝時出現過一次錯誤:Unable to check if JNs are ready for formatting。# 類似 https://blog。csdn。net/Maricle_Again/article/details/96481845# 解決辦法是刪除所有機器 /data/hadoop/journalnode/mycluster 目錄下的檔案# cd /data/hadoop/journalnode/mycluster# rm -rf in_use。lock current edits。sync

# 也有可能是網路的問題,參考該文章:https://blog。csdn。net/tototuzuoquan/article/details/89644127# 在dev環境中出現連不上journalnode問題,新增該配置,以增加重試次數和間隔 ipc。client。connect。max。retries 100 Indicates the number of retries a client will make to establish a server connection。 ipc。client。connect。retry。interval 10000 Indicates the number of milliseconds a client will wait for before retrying to establish a server connection。

Hadoop3高可用叢集搭建

隨後啟動格式化後的namenode(在hadoop101執行)

hdfs ——daemon start namenode

在其他namenode節點同步資訊(在hadoop102執行)

偽分散式部署時,不用執行本步驟

hdfs namenode -bootstrapStandby

Hadoop3高可用叢集搭建

格式化zookeeper節點,出現以下資訊即為執行成功(在hadoop101執行)

偽分散式不用執行本步驟

hdfs zkfc -formatZKssh

Hadoop3高可用叢集搭建

啟動hdfs叢集(在hadoop101執行)

start-dfs。sh# 隨後檢視各機器程序jpsall

Hadoop3高可用叢集搭建

4。 日常啟停HDFS叢集

啟動hdfs

start-dfs。sh# 若報錯:publickey,gssapi-keyex,gssapi-with-mic,password# 是因為ssh配置問題,需要生成~/。ssh/authorized_keys檔案

關閉hdfs

stop-dfs。sh

Hadoop3高可用叢集搭建

5. 頁面檢視叢集

Hadoop3高可用叢集搭建

Hadoop3高可用叢集搭建

6。 配置YARN及其HA

使用yarn來管理hdfs叢集的資源分配,yarn的功能概述參見:https://blog。csdn。net/scgaliguodong123_/article/details/46603827

6。1。 檔案配置

參考文件:https://blog。csdn。net/u012760435/article/details/104541021

6。1。1 配置hadoop-env。sh

因為hadoop3限制必須要宣告角色執行程序,vi /app/hadoop-3。2。2/etc/hadoop/hadoop-env。sh

export YARN_NODEMANAGER_USER=“hadoop”export YARN_RESOURCEMANAGER_USER=“hadoop”

6。1。2 配置mapred-site。xml

vi /app/hadoop-3。2。2/etc/hadoop/mapred-site。xml

mapreduce。framework。name yarn mapreduce。application。classpath $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*<!—— 歷史伺服器端地址 ——> mapreduce。jobhistory。address hadoop102:10020<!—— 歷史伺服器web端地址 ——> mapreduce。jobhistory。webapp。address hadoop102:19888<!—— mapred-site。xml中設定Map和Reduce任務的記憶體配置如下:(value中實際配置的記憶體需要根據自己機器記憶體大小及應用情況進行修改) ——> mapreduce。map。memory。mb 1024 mapreduce。map。java。opts -Xmx1024M mapreduce。reduce。memory。mb 1024 mapreduce。reduce。java。opts -Xmx1024M

6。1。3 配置yarn-site。xml

<!—— 指定MR走shuffle ——> yarn。nodemanager。aux-services mapreduce_shuffle<!—— 固定寫法 ——> yarn。nodemanager。env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME<!—— yarn的叢集id ——> yarn。resourcemanager。cluster-id yarncluster<!—— 啟用HA ——><!—— 偽分散式時,請設定為false,會出現 ——> yarn。resourcemanager。ha。enabled true yarn。resourcemanager。ha。rm-ids rm1,rm2 yarn。resourcemanager。hostname。rm1 hadoop101 yarn。resourcemanager。hostname。rm2 hadoop103<!—— webapp的地址務必要配置,不然yarn可以啟動但是無法執行map任務,大坑 ——> yarn。resourcemanager。webapp。address。rm1 hadoop101:8088 yarn。resourcemanager。webapp。address。rm2 hadoop103:8088 hadoop。zk。address hadoop101:2181,hadoop102:2181,hadoop103:2181<!—— 啟用自動恢復 ——> yarn。resourcemanager。recovery。enabled true<!—— 持久化方式,既然啟用了ZK那就把資訊儲存到ZK裡面 ——> yarn。resourcemanager。store。class org。apache。hadoop。yarn。server。resourcemanager。recovery。ZKRMStateStore<!—— 自動檢測硬體配置,視機器配置酌情開啟,預設關閉 ——> yarn。nodemanager。resource。detect-hardware-capabilities false<!—— 開啟日誌聚集功能 ——> yarn。log-aggregation-enable true<!—— 設定日誌聚集伺服器地址 ——> yarn。log。server。url http://hadoop102:19888/jobhistory/logs<!—— 設定日誌保留時間為7天 ——> yarn。log-aggregation。retain-seconds 604800<!—— 配置yarn資源,要根據實際情況配置,避免各種問題——><!—— 每個節點可用記憶體,單位MB,一般為實際記憶體*0。8 ——> yarn。nodemanager。resource。memory-mb 4096 yarn。nodemanager。resource。cpu-vcores 4 yarn。nodemanager。vmem-check-enabled true Whether virtual memory limits will be enforced for containers yarn。nodemanager。vemem-pmem-ration 2。1 Ration between virtual memory to physical memory when setting memoery limits for containers yarn。nodemanager。pmem-check-enabled true yarn。scheduler。minimum-allocation-mb 1024 yarn。scheduler。maximum-allocation-mb 4096<!—— 參考配置,暫不配置 ——><!—— yarn。app。mapreduce。am。resource。mb 2048 yarn。app。mapreduce。am。resource。cpu-vcores 1——>

6。2。 啟動yarn

# 先同步配置檔案到各伺服器xsync /app/hadoop-3。2。2/etc/hadoop# 啟動yarnstart-yarn。sh

Hadoop3高可用叢集搭建

6.3. web頁面檢視

Hadoop3高可用叢集搭建

7。 歷史伺服器配置

​ 為了檢視程式的歷史執行情況,需要配置一下歷史伺服器,步驟如下:

7。1。 配置mapred-site。xml

vi /app/hadoop-3。2。2/etc/hadoop/mapred-site。xml

, 新增下列配置

<!—— 歷史伺服器端地址 ——> mapreduce。jobhistory。address hadoop102:10020<!—— 歷史伺服器web端地址 ——> mapreduce。jobhistory。webapp。address hadoop102:19888

7。2。 啟動歷史伺服器

mapred ——daemon start historyserver# 關閉mapred ——daemon stop historyserver

8。 日誌聚集

日誌聚集概念:應用執行完成以後,將程式執行日誌資訊上傳到HDFS系統上。

配置yarn-site。xml

vi /app/hadoop-3。2。2/etc/hadoop/yarn-site。xml

<!—— 開啟日誌聚集功能 ——> yarn。log-aggregation-enable true<!—— 設定日誌聚集伺服器地址 ——> yarn。log。server。url http://hadoop102:19888/jobhistory/logs<!—— 設定日誌保留時間為7天 ——> yarn。log-aggregation。retain-seconds 604800

同步配置到各伺服器

# 先同步配置檔案到各伺服器xsync /app/hadoop-3。2。2/etc/hadoop

9。 常用命令

# 檢視叢集可用空間等hdfs dfsadmin -report# 檢視空間使用情況hadoop fs -du -h /# 檢視namenode是否處於只讀模式下hdfs dfsadmin -safemode get

關注本頭條號

回覆:

hadoop

,獲取完整文件

未完待續!