1. 程式人生 > 其它 >hadoop執行環境搭建

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“服務。

  • 安全策略:保持預設的開啟。

  1. 設定完成之後根據提示重啟,進入系統桌面即安裝完成。

配置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行下面。

建立叢集所需資料夾

  1. 在/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:強制解除安裝軟體。

克隆三臺模板虛擬機器並配置環境

剋制三臺虛擬機器

  1. 直接右鍵虛擬機器>管理>克隆

將剋制的虛擬機器命名為hadoop102,注意建立克隆時需要建立完整克隆,不能使用連結克隆。

  1. 以此方法繼續克隆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 表示顯示覆制過程

完全分散式執行模式準備

叢集分發指令碼

  1. 需求: 迴圈複製檔案到所有節點的相同目錄下

  2. 期望分析:

    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
  1. 指令碼實現

    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免密登入

  1. 免密登入原理

    注意: 免密登入是單向的, 這裡A訪問B無需金鑰, 但是B訪問A仍需要金鑰.

  2. 生成公鑰和私鑰

[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(公鑰)
  1. 將公鑰拷貝到要免密登入的目標機器上
#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;

叢集配置

  1. 叢集部署規劃

    1. NameNode 和 SecondaryNameNode 不要安裝在同一臺伺服器。
    2. ResourceManager 也很消耗記憶體,不要和 NameNode、SecondaryNameNode 配置在同一臺機器上。
  2. 配置檔案說明

    Hadoop配置檔案分兩類:預設配置檔案和自定義配置檔案,只有使用者想修改某一預設配置值時,才需要修改自定義配置檔案,更改相應屬性值。

    1. 預設配置檔案:
要獲取的預設檔案 檔案存放在 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. 配置叢集

    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>

  1. 在叢集上分發配置好的Hadoop配置檔案
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
  1. 檢視分發情況
[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