叢集規劃
本次安裝擬使用的各軟體版本如下
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
機器規劃
一、安裝CentOS 7。6
若使用虛擬機器,建議選擇2CPU2執行緒,4G或以上記憶體,至少50G硬碟。
安裝過程注意事項主要包括:
日期和時間:選擇上海
語言支援:簡體中文和英語
軟體選擇:最小安裝,選擇其中的除錯工具、相容性程式庫、開發工具、安全性工具、和系統管理工具
設定root密碼:root123
安裝完成後,重啟即可登入系統
二、配置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
驗證是否安裝完成
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 克隆虛擬機器
將本基礎機器關閉,再克隆生成三臺新的虛擬機器,注意克隆時選擇建立完整克隆
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/*
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
四、安裝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值保持一致 ——>
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
<!—— 副本數配置 ——>
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。 首次啟動叢集
將同步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問題,新增該配置,以增加重試次數和間隔
隨後啟動格式化後的namenode(在hadoop101執行)
hdfs ——daemon start namenode
在其他namenode節點同步資訊(在hadoop102執行)
偽分散式部署時,不用執行本步驟
hdfs namenode -bootstrapStandby
格式化zookeeper節點,出現以下資訊即為執行成功(在hadoop101執行)
偽分散式不用執行本步驟
hdfs zkfc -formatZKssh
啟動hdfs叢集(在hadoop101執行)
start-dfs。sh# 隨後檢視各機器程序jpsall
4。 日常啟停HDFS叢集
啟動hdfs
start-dfs。sh# 若報錯:publickey,gssapi-keyex,gssapi-with-mic,password# 是因為ssh配置問題,需要生成~/。ssh/authorized_keys檔案
關閉hdfs
stop-dfs。sh
5. 頁面檢視叢集
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
6。1。3 配置yarn-site。xml
<!—— 指定MR走shuffle ——>
6。2。 啟動yarn
# 先同步配置檔案到各伺服器xsync /app/hadoop-3。2。2/etc/hadoop# 啟動yarnstart-yarn。sh
6.3. web頁面檢視
7。 歷史伺服器配置
為了檢視程式的歷史執行情況,需要配置一下歷史伺服器,步驟如下:
7。1。 配置mapred-site。xml
vi /app/hadoop-3。2。2/etc/hadoop/mapred-site。xml
, 新增下列配置
<!—— 歷史伺服器端地址 ——>
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
<!—— 開啟日誌聚集功能 ——>
同步配置到各伺服器
# 先同步配置檔案到各伺服器xsync /app/hadoop-3。2。2/etc/hadoop
9。 常用命令
# 檢視叢集可用空間等hdfs dfsadmin -report# 檢視空間使用情況hadoop fs -du -h /# 檢視namenode是否處於只讀模式下hdfs dfsadmin -safemode get
關注本頭條號
回覆:
hadoop
,獲取完整文件
未完待續!