Hadoop完全分散式叢集配置

bleso發表於2021-05-01

準備三臺客戶機

模板虛擬機器準備

安裝模板虛擬機器

  1. ip地址192.168.10.100
  2. 主機名稱hadoop100
  3. 記憶體4g
  4. 硬碟50g

配置

  1. 測試網路

    ping www.baidu.com
    
  2. 安裝epel-release

    yum install -y epel-release
    
  3. 安裝net-tools

    yum install -y net-tools
    
  4. 安裝vim

    yum install -y vim
    

關閉防火牆

systemctl stop firewalld
systemctl disable firewalld.service

解除安裝虛擬機器自帶的JDK

 rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

克隆虛擬機器

利用hadoop100,克隆出hadoop102、hadoop103、hadoop104

修改克隆機ip

  1. 修改靜態ip

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    
    DEVICE=ens33
    TYPE=Ethernet
    ONBOOT=yes
    BOOTPROTO=static
    NAME="ens33"
    IPADDR=192.168.10.102
    PREFIX=24
    GATEWAY=192.168.10.2
    DNS1=192.168.10.2
    
  2. 檢視 Linux 虛擬機器的虛擬網路編輯器,編輯->虛擬網路編輯器->VMnet8image-20210501153433555image-20210501153525525

  3. 檢視 Windows 系統介面卡 VMware Network Adapter VMnet8 的 IP 地址image-20210501153751285

  4. 保證 Linux 系統 ifcfg-ens33 檔案中 IP 地址、虛擬網路編輯器地址和 Windows 系統 VM8 網路 IP 地址相同。

修改克隆機主機名

  1. 修改主機名稱

    vim /etc/hostname
    
    hadoop102
    
  2. 配置 Linux 克隆機主機名稱對映 hosts 檔案,開啟/etc/hosts

     vim /etc/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
    192.168.10.106 hadoop106
    192.168.10.107 hadoop107
    192.168.10.108 hadoop108
    
  3. 修改 windows 的主機對映檔案(hosts 檔案)

    1. 進入 C:\Windows\System32\drivers\etc 路徑

    2. 開啟 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
      192.168.10.106 hadoop106
      192.168.10.107 hadoop107
      192.168.10.108 hadoop108
      

安裝JDK和Hadoop

3.x版本的hadoop不支援jdk11,這裡我們使用jdk8

  1. 用 xftp 傳輸工具將 JDK,hadoop匯入到 opt 目錄下面的 software 資料夾下面

  2. 將事先在/opt/software 下的jdk,hadoop解壓到指位置

tar -zxvf jdk-8u291-linux-x64.tar.gz -C /opt/module/
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

配置環境變數

  1. 新建/etc/profile.d/my_env.sh 檔案

    vim /etc/profile.d/my_env.sh
    
  2. #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk8
    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
    
    #root使用者使用Hadoop需要的環境變數
    export HDFS_NAMENODE_USER="root"
    export HDFS_DATANODE_USER="root"
    export HDFS_SECONDARYNAMENODE_USER="root"
    export YARN_RESOURCEMANAGER_USER="root"
    export YARN_NODEMANAGER_USER="root"
    
  3. source /etc/profile
    
  4. 檢測

    java -version
    hadoop version
    

配置叢集

編寫叢集分發指令碼xsync

  1. scp(secure copy)安全拷貝

    scp -r $pdir/$fname $user@$host:$pdir/$fname
    
  2. rsync 遠端同步工具

    rsync -av $pdir/$fname $user@$host:$pdir/$fname
    
  3. xsync叢集分發指令碼

    1. 在/root/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
      done
      
    2. 修改許可權

      chmod +x xsync
      

ssh無密登入

  1. 生成公鑰和私鑰

    pwd
    /root/.ssh/
    
    ssh-keygen -t rsa
    
  2. 將公鑰拷貝到要免密登入的目標機器上

    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104
    
  3. 其它機器同理配置一遍

配置檔案

  1. 配置 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-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-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_CONF_DIR,
            CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
     	</property>
    </configuration>
    
  4. 配置 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>
    
  5. 分發叢集配置檔案

    xsync /opt/module/hadoop-3.1.3/etc/hadoop
    

群起叢集

配置workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104

同步配置檔案

xsync /opt/module/hadoop-3.1.3/etc

啟動叢集

  1. 如果第一次啟動需要在102節點格式化NameNode

    若叢集崩潰應先刪除每臺機器的./data、./logs

    hdfs namenode -format
    
  2. 啟動 HDFS

    start-dfs.sh
    
  3. 在配置了 ResourceManager的節點(hadoop103)啟動 YARN

    start-yarn.sh
    
  4. Web 端檢視 HDFS 的 NameNode

    1. 瀏覽器中輸入:http://hadoop102:9870

    2. 檢視 HDFS 上儲存的資料資訊

  5. Web 端檢視 YARN 的 ResourceManager

    1. 瀏覽器中輸入:http://hadoop103:8088
    2. 檢視 YARN 上執行的 Job 資訊

配置歷史伺服器

  1. 配置 mapred-site.xml

    <!-- 歷史伺服器端地址 -->
    <property>
     	<name>mapreduce.jobhistory.address</name>
     	<value>hadoop102:10020</value>
    </property>
    <!-- 歷史伺服器 web 端地址 -->
    <property>
     	<name>mapreduce.jobhistory.webapp.address</name>
     	<value>hadoop102:19888</value>
    </property>
    
  2. 分發配置

    xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
    
  3. 在 hadoop102啟動歷史伺服器

    mapred --daemon start historyserver
    
  4. 檢視JobHistory http://hadoop102:19888/jobhistory

配置日誌的聚集

  1. 配置yarn-site.xml

     vim yarn-site.xml
    
    <!-- 開啟日誌聚集功能 -->
    <property>
     	<name>yarn.log-aggregation-enable</name>
     	<value>true</value>
    </property>
    <!-- 設定日誌聚集伺服器地址 -->
    <property> 
     	<name>yarn.log.server.url</name> 
     	<value>http://hadoop102:19888/jobhistory/logs</value>
    </property>
    <!-- 設定日誌保留時間為 7 天 -->
    <property>
     	<name>yarn.log-aggregation.retain-seconds</name>
     	<value>604800</value>
    </property>
    
  2. 分發配置

  3. 重啟NodeManager、ResourceManager 和 HistoryServer

相關文章