hadoop執行環境搭建
模板虛擬機器環境準備
系統安裝
配置硬體
在vmware上使用centos7.5的映象安裝模板虛擬機器,其中虛擬機器名稱為hadoop100,虛擬機器ip設定為192.168.10.100,記憶體和硬碟按具體情況分配。
安裝時可選擇自定義安裝,選擇稍後安裝作業系統,這樣可以獻給模板虛擬機器配置資源,資源配置完成後,在選擇相應的映象安裝系統。
在自定義建立虛擬機器時,vmware提供了三種網路連結型別:橋接模式,NAT模式,僅主機模式。
具體區別請參考VMware中四種網路連線模式的區別。
注意:安裝系統時需要開啟電腦的虛擬化技術,可在bios中進行開啟。可以在工作管理員中檢視電腦是否開啟虛擬化技術。
配置軟體
-
時間:當前系統時間,未聯網時無法同步網路時間,安裝完成網路連線成功後可以自行設定。
-
軟體選擇:在生產環境下,一般都會選擇最小安裝。學習階段,可以選擇GNOME桌面(影象化桌面)以方便學習。
-
安裝位置:選擇我要配置分割槽(手動分配分割槽),之後點選完成將進行手動分配。分配一個掛載點/boot,1g,檔案系統選擇ext4(系統啟動時需要的資源);分配一個掛載點swap,4g(在記憶體不夠用時,將使用硬碟當作記憶體繼續執行,速度會減慢);分配一個掛載點根目錄/ ,45g
-
KDUNP:系統崩潰時,崩潰前夕將備份一部分資料。需要開闢一塊記憶體來備份崩潰的資料。學習階段為了節省資源可以關閉。
-
網路和主機名:開啟乙太網,如果顯示被拔出需要去windows服務中開啟VMware DHCP Service”和”VMware NAT Service“服務。
-
安全策略:保持預設的開啟。
- 設定完成之後根據提示重啟,進入系統桌面即安裝完成。
配置ip地址
配置vmware的ip地址
在vmware編輯處進入虛擬網路編輯器,配置VMnet8介面卡的子網為192.168.10.0。
將NAT設定中,閘道器設定成192.168.10.2(閘道器一般都為2)。
配置windows下vmware相應的網路介面卡的ip地址
配置虛擬機器linux的ip地址
在root使用者下配置ens33網路介面卡的配置檔案
vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置檔案為
YPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #這裡的dhcp動態獲取ip改為static靜態獲取ip
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="e24fd100-16d6-4705-b22c-51addb7b22e5" #隨機id
DEVICE="ens33" #介面名(裝置,網絡卡)
ONBOOT="yes" #系統啟動的時候網路介面是否有效(yes/no)
#新增靜態ip地址
IPADDR=192.168.10.100
#新增閘道器
GATEWAY=192.168.10.2
#新增域名解析器
DNS1=192.168.10.2
修改主機名稱
vim /etc/hostname
#將檔案修改為
hadoop100
在hosts中新增主機名稱對映
vim /etc/hosts
#在hosts中新增
192.168.10.100 hadoop100
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103
192.168.10.104 hadoop104
192.168.10.105 hadoop105
新增後重啟,並檢查是否設定成功
hostname #檢查主機名稱
ifconfig #檢查ip地址
ping baidu.com #檢查網路是否連通
安裝epel-release
Extra Packages for Enterprise Linux 是為“紅帽系”的作業系統提供額外的軟體包,適用於RHEL、CentOS 和 Scientific Linux。相當於是一個軟體倉庫,大多數rpm包在官方repository是找不到的
yum install -y epel-release
最小系統安裝外掛
如果Linux安裝的是最小系統,還需要安裝如下工具。如果安裝時選擇的是桌面標準版,則不需要安裝。
安裝net-tool:工具包含集合,包含ifconfig等指令
yum install -y net-tools
vim編輯器
yum install -y vim
關閉防火牆
在企業開發時,通常單個伺服器的防火牆是關閉的。公司整體對外會設定非常安全的防火牆。
systemctl stop firewalld
systemctl disable firewalld.service
配置個人使用者root許可權
方便後期使用個人使用者時可以在命令前加 sudo 執行root許可權命令
vim /etc/sudoers
修改/etc/sudoers檔案,在%wheel這行下面新增一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
boqiang ALL=(ALL) NOPASSWDL:ALL
注意:boqiang這一行不能直接放到root行下面,因為所有使用者都屬於wheel組,你先配置了boqiang具有免密功能,但是程式執行到%wheel行時,該功能又被覆蓋回需要密碼。所以boqiang要放到%wheel行下面。
建立叢集所需資料夾
- 在/opt下建立module、software資料夾
mkdir /opt/software
mkdir /opt/module
2)修改資料夾許可權所有者和所屬組均為boqiang
chown boqiang:boqiang /opt/module
chown boqiang:boqiang /opt/software
解除安裝自帶的JDK
如果是最小化安裝可以忽略此項
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
rpm -qa:查詢所安裝的所有rpm包。
grep -i:忽略大小小。
xargs -n1:表示每次只傳遞一個引數。
rpm -e --nodeps:強制解除安裝軟體。
克隆三臺模板虛擬機器並配置環境
剋制三臺虛擬機器
- 直接右鍵虛擬機器>管理>克隆
將剋制的虛擬機器命名為hadoop102,注意建立克隆時需要建立完整克隆,不能使用連結克隆。
- 以此方法繼續克隆hadoop103,hadoop104。
克隆虛擬機器的環境配置
配置ip地址
修改三臺虛擬機器的網路介面卡檔案,參考配置虛擬機器linux的ip地址
修改主機名稱
修改三臺虛擬機器的主機名稱
vim /etc/hostname
全部配置完成之後reboot,並檢查
在hadoop102安裝jdk
- 將jdk檔案拷貝到/opt/software
- 解壓,將jdk解壓到/opt/module
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module
在hadoop102安裝hadoop
- 將hadoop檔案拷貝到/opt/software
- 解壓,將hadoop解壓到/opt/module
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module
配置環境變數
- 以前可以在/etc/profile檔案上直接宣告環境變數
- 現在可以在/etc/profile.d目錄下建立宣告環境變數的檔案,系統啟動時就會載入這個目錄裡面的檔案讓其生效
- 我們在此目錄下建立自己的環境變數檔案
sudo vim /etc/profile.d/my_env.sh
- my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
- 配置完成後使用source使配置生效
source /etc/profile
從hadoop102向其他虛擬機器傳遞jdk和hadoop
使用scp命令將jdk從hadoop102傳遞給hadoop103
scp -r jdk1.8.0_212/ boqiang@hadoop103:/opt/module/
使用scp命令將hadoop從hadoop103拉取hadoop102的hadoop
scp -r boqiang@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
在hadoop103中使用scp命令將jdk從hadoop102拷貝給hadoop104
scp -r boqiang@hadoop102:/opt/module/jdk1.8.0_212/ boqiang@hadoop104:/opt/module/
**關於 rsync **
主要用於備份和映象。具有速度快、避免重複複製相同內容和支援符號連結的有點。第一次使用時等同於scp,因為rsync只對差異檔案做更新,而scp是將所有檔案都複製過去。
rsync -av $pdir/$fname $user@host:$pdir/$fname
# -a 表示歸檔拷貝
# -v 表示顯示覆制過程
完全分散式執行模式準備
叢集分發指令碼
-
需求: 迴圈複製檔案到所有節點的相同目錄下
-
期望分析:
a. rsync 命令原始拷貝
rsync -av /opt/module boqiang@hadoop103:/opt/
b. 期望指令碼:
xsync 要同步的檔名稱
c. 期望指令碼在任何路徑都能使用(指令碼放在聲明瞭全域性環境變數的路徑)
[boqiang@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/boqiang/.local/bin:/home/boqiang/bin:/opt/module/jdk1.8.0_212/bin
-
指令碼實現
a. 在/home/boqiang/bin 目錄下建立 xsync 檔案
[boqiang@hadoop102 opt]$ cd /home/boqiang
[boqiang@hadoop102 ~]$ mkdir bin
[boqiang@hadoop102 ~]$ cd bin
[boqiang@hadoop102 bin]$ vim xsync
在檔案中編寫如下程式碼
#!/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
b. 修改指令碼 xsync 具有執行許可權
[boqiang@hadoop102 bin]$ chmod +x xsync
c. 測試指令碼
[boqiang@hadoop102 ~]$ xsync /home/atguigu/bin
d. 將指令碼複製到/bin 中,以便全域性呼叫
[boqiang@hadoop102 bin]$ sudo cp xsync /bin/
e. 同步環境變數配置(root 所有者)
[boqiang@hadoop102 ~]$ sudo ./bin/xsync /etc/profile.d/my_env.sh
注意:如果用了 sudo,那麼 xsync 一定要給它的路徑補全。
讓環境變數生效
[boqiang@hadoop103 bin]$ source /etc/profile
[boqiang@hadoop104 opt]$ source /etc/profile
ssh免密登入
-
免密登入原理
注意: 免密登入是單向的, 這裡A訪問B無需金鑰, 但是B訪問A仍需要金鑰.
-
生成公鑰和私鑰
[boqiang@hadoop102 ~]$ ls -al
[boqiang@hadoop102 ~]$ cd .ssh/
[boqiang@hadoop102 ~]$ pwd
/home/boqiang/.ssh
#生成公鑰和私鑰
[boqiang@hadoop102 .ssh]$ ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案 id_rsa(私鑰)、id_rsa.pub(公鑰)
- 將公鑰拷貝到要免密登入的目標機器上
#ssh訪問自己也需要密碼,所以需要對自己也配置免密登入
[boqiang@hadoop102 .ssh]$ ssh-copy-id hadoop102
[boqiang@hadoop102 .ssh]$ ssh-copy-id hadoop103
[boqiang@hadoop102 .ssh]$ ssh-copy-id hadoop104
注意:所配置的免密登入只對單個使用者滿足, 如果只配置了boqiang使用者,那麼root使用者不能夠免密登入.
還需要在 hadoop103 上採用 boqiang 賬號配置一下無密登入到 hadoop102、hadoop103、hadoop104 伺服器上。
還需要在 hadoop104 上採用 boqiang 賬號配置一下無密登入到 hadoop102、hadoop103、hadoop104 伺服器上。
還需要在 hadoop102 上採用 root 賬號,配置一下無密登入到 hadoop102、hadoop103、hadoop104;
叢集配置
-
叢集部署規劃
- NameNode 和 SecondaryNameNode 不要安裝在同一臺伺服器。
- ResourceManager 也很消耗記憶體,不要和 NameNode、SecondaryNameNode 配置在同一臺機器上。
-
配置檔案說明
Hadoop配置檔案分兩類:預設配置檔案和自定義配置檔案,只有使用者想修改某一預設配置值時,才需要修改自定義配置檔案,更改相應屬性值。
- 預設配置檔案:
要獲取的預設檔案 | 檔案存放在 Hadoop 的 jar 包中的位置 |
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
2) 自定義配置檔案:
**core-site.xml** 、**hdfs-site.xml** **、** **yarn-site.xml**、**mapred-site.xml** 四個配置檔案存放在$HADOOP_HOME/etc/hadoop 這個路徑上,使用者可以根據專案需求重新進行修改配置。
-
配置叢集
1)核心配置檔案
配置 core-site.xml
[atguigu@hadoop102 ~]$ cd $HADOOP_HOME/etc/hadoop
[atguigu@hadoop102 hadoop]$ vim core-site.xml
內容如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name> <value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 資料的儲存目錄 -->
<property>
<name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 網頁登入使用的靜態使用者為 atguigu --> <property>
<name>hadoop.http.staticuser.user</name> <value>atguigu</value>
</property>
</configuration>
2)hdfs配置檔案
配置 hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vim hdfs-site.xml
配置檔案如下
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端訪問地址-->
<property>
<name>dfs.namenode.http-address</name> <value>hadoop102:9870</value>
</property>
<!-- 2nn web 端訪問地址-->
<property>
<name>dfs.namenode.secondary.http-address</name> <value>hadoop104:9868</value>
</property>
</configuration>
3)YARN配置檔案
配置 yarn-site.xml
[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name> <value>hadoop103</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>
4)MapReduce 配置檔案
配置 mapred-site.xml
[atguigu@hadoop102 hadoop]$ vim mapred-site.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程式執行在 Yarn 上 --> <property>
<name>mapreduce.framework.name</name> <value>yarn</value>
</property>
</configuration>
- 在叢集上分發配置好的Hadoop配置檔案
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
- 檢視分發情況
[atguigu@hadoop103 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[atguigu@hadoop104 ~]$ cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml