hadoop2.7.2搭建完全分散式叢集

2020-10-12 11:00:22
  1. 新建虛擬機器器

  2. 修改虛擬機器器的靜態IP

  3. 修改主機名,新增主機和ip的對映關係

  4. 關閉防火牆 (1-4 通過指令碼完成)

  5. 建立普通使用者
      useradd jinghang
      passwd jinghang

  6. 設定普通使用者具有root許可權
      vim /etc/sudoers
        在91行下新增如下內容:
        jinghang ALL=(ALL) NOPASSWD:ALL
    完成後:wq!

7.在/opt目錄下建立資料夾(software存放壓縮軟體包,modul存放解壓後的軟體包)

  • 在/opt目錄下建立module、software資料夾

     		mkdir /opt/module /opt/software
    
  • 修改module、software資料夾所有者和所屬組

     	chown jinghang:jinghang /opt/module /opt/software
    

8、關機拍攝快照

9、從拍照位置克隆三臺虛擬機器器

10、克隆虛擬機器器有兩個網路卡(三臺都需要改):

  • 進入這個檔案 vim /etc/udev/rules.d/70-persistent-net.rules

     	 1.刪除 NAME="eth0"這一行
     	 2.修改NAME="eth1" -> NAME="eth0" (:wq!)
     	 3.複製ADDR地址(虛擬mac地址)
     	 4.進入到 vim /etc/sysconfig/network-scripts/ifcfg-eth0
     	 	HWADDR=賦值ADDR地址(虛擬mac地址)
     	 	:wq! 
     	 5.service network restart (如果失敗,reboot) 
    

11、修改克隆後虛擬機器器的ip和主機名、ip主機的對映關係(使用指令碼完成)

12、確定任務

  • 簡介

     HDFS: namenode datanode secondarynamenode
     YARN:resourcemanager nodemanager
     history: historyserver
    
  • master(主節點) slaves(從節點)

  • hadoop叢集預設3個副本,這裡叢集搭建3臺伺服器,對應伺服器上存放的服務

     Hadoop03     	Hadoop04     	Hadoop05 
     datanode     	datanode         datanode 
     namenode    		resourcemanager    secondarynamenode
     nodemanager   	 nodemanager    nodemanager
     historyserver
    

13、編輯 /etc/profile來設定環境

  [jinghang@Hadoop02 hadoop-2.7.2]$ sudo vim /etc/profile
    #設定JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_144
    export PATH=$ PATH:$ JAVA_HOME/bin

    #設定HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-2.7.2
    export PATH=$ PATH:$ HADOOP_HOME/bin
    export PATH=$ PATH:$ HADOOP_HOME/sbin

  新增完環境source一下:
    [jinghang@Hadoop02 hadoop-2.7.2]$ source /etc/profile

14、檢視環境是否設定成功

 [jinghang@Hadoop02 hadoop-2.7.2]$ hadoop version
 [jinghang@Hadoop02 hadoop-2.7.2]$ java -version
 如果java不是1.8.0_144版本
 	解除安裝之前的版本
   rpm -qa | grep java  (檢視java安裝包)
   sudo rpm -e java-1.6.0-openjdk-1.6.0.41-1.13.13.1.el6_8.x86_64      (解除安裝jdk安裝包)
   sudo rpm -e java-1.7.0-openjdk-1.7.0.181-2.6.14.10.el6.x86_64 --nodeps  (忽略依賴解除安裝jdk安裝包)

15、設定叢集

  • 在hadoop-2.7.2目錄下:

     vim etc/hadoop/hadoop-env.sh
     	修改JAVA_HOME路徑 export JAVA_HOME=/opt/module/jdk1.8.0_144
     vim etc/hadoop/yarn-env.sh
     	修改JAVA_HOME路徑 export JAVA_HOME=/opt/module/jdk1.8.0_144
     vim etc/hadoop/mapred-env.sh 
     	修改JAVA_HOME路徑 export JAVA_HOME=/opt/module/jdk1.8.0_144
    

  • 設定HDFS,在hadoop-2.7.2目錄下:
vim etc/hadoop/core-site.xml
新增設定 

<! -- 指定HDFS中NameNode的地址 -->
	<property>
 		<name>fs.defaultFS</name>
 		<value>hdfs://Hadoop03:9000</value> 
	</property>
<! -- 指定Hadoop執行時產生檔案的儲存目錄 -->
	<property>
		<name>hadoop.tmp.dir</name>
 		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
 	</property>
vim etc/hadoop/hdfs-site.xml
新增設定

< !-- 指定HDFS副本的數量 -->
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
< !-- 指定Hadoop輔助名稱節點主機設定 -->
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>Hadoop05:50090</value>
	</property>

  • 設定YARN,在hadoop-2.7.2目錄下:
vim etc/hadoop/yarn-site.xml 
 新增設定 

<!-- Reducer獲取資料的方式 -->
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
      </property>

      <!-- 指定YARN的ResourceManager的地址 -->
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>Hadoop04</value>
      </property>

      <!-- 紀錄檔聚集功能使能 -->
      <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
      </property>
      <!-- 紀錄檔保留時間設定7天 -->
      <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
      </property>

  • 在hadoop-2.7.2目錄下,重新命名mapred-site.xml.template:mv
    etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
然後編輯: vim etc/hadoop/mapred-site.xml 
新增設定:
	
 <!-- 指定MapReduce執行在YARN上 -->
        <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
        </property>

        <!-- 歷史伺服器端地址 -->
        <property>
          <name>mapreduce.jobhistory.address</name>
          <value>Hadoop03:10020</value>
        </property>
        <!-- 歷史伺服器web端地址 -->
        <property>
          <name>mapreduce.jobhistory.webapp.address</name>
          <value>Hadoop03:19888</value>
        </property>

16、分發

這時一臺伺服器已經設定完成,將設定分發到其他的伺服器上。
    1、將Hadoop03伺服器的hadoop-2.7.2分發給Hadoop04伺服器
      rsync -av /opt/module/hadoop-2.7.2 jinghang@Hadoop04:/opt/module/
    2、將Hadoop03伺服器的hadoop-2.7.2分發給Hadoop05伺服器
      rsync -av /opt/module/hadoop-2.7.2 jinghang@Hadoop05:/opt/module/
    3、將Hadoop03伺服器的 jdk1.8.0_144 分發給Hadoop04伺服器
      rsync -av /opt/module/ jdk1.8.0_144 jinghang@Hadoop04:/opt/module/
    4、將Hadoop03伺服器的 jdk1.8.0_144 分發給Hadoop05伺服器
      rsync -av /opt/module/ jdk1.8.0_144 jinghang@Hadoop05:/opt/module/
    5、將Hadoop03伺服器的 /etc/profile 分發給Hadoop04伺服器的root使用者
      rsync -av /etc/profile root@Hadoop04:/etc/profile
    在Hadoop04伺服器上 source /etc/profile
    6、將Hadoop03伺服器的/etc/hosts分發給Hadoop04伺服器的root使用者
      rsync -av /etc/hosts root@Hadoop04:/etc/hosts
    7、分發完畢,檢查三臺伺服器的java版本和hadoop版本

17、啟動叢集(在叢集的各臺伺服器上啟動對應的服務程序)

 1、啟動叢集之前一定要格式化(/opt/module/hadoop-2.7.2)
   bin/hdfs namenode -format ( has been successfully formatted)
   如果格式化失敗了:
    1.刪除/opt/module/hadoop-2.7.2目錄下的data logs
    2.bin/hdfs namenode --format
   注意:格式化NameNode,會產生新的叢集id,導致NameNode和DataNode的叢集id不一致,
   叢集找不到已往資料。所以,格式NameNode時,一定要先刪除data資料和log紀錄檔,
   然後再格式化NameNode。

  2 啟動HDFS服務
    啟動namenode
      sbin/hadoop-daemon.sh start/stop namenode
    啟動datanode
      sbin/hadoop-daemon.sh start/stop datanode
    啟動secondarynamenode

    檢查namenode的web頁面是否可以存取
      http://192.168.232.202:50070
      
  3 啟動YARN服務
    啟動resourcemanager
      sbin/yarn-daemon.sh start/stop resourcemanager
    啟動nodemanager
      sbin/yarn-daemon.sh start/stop nodemanager
    檢查yarn的web頁面:http://192.168.232.201:8088
  
  4 開啟歷史服務
    sbin/mr-jobhistory-daemon.sh start/stop historyserver

18、設定免密登入,實現群起群停

	1、生成公鑰和私鑰
    ssh-keygen -t rsa
	2、分發公鑰祕鑰
    rsync -av /home/jinghang/.ssh jinghang@Hadoop04:/home/jinghang/
    rsync -av /home/jinghang/.ssh jinghang@Hadoop05:/home/jinghang/

	3、在namenode所在的伺服器的hadoop-2.7.2目錄下
    編輯 etc/hadoop/slaves
      刪掉其他,新增
      Hadoop03
      Hadoop04
      Hadoop05

	4、將slaves檔案分發給 執行resourcemanager的伺服器
    rsync -av slaves jinghang@Hadoop04:/opt/module/hadoop-2.7.2/etc/hadoop/

	5、現在可以群起群停了
    1、在設定namenode的伺服器(03)
      start-dfs.sh stop-dfs.sh 
    2、在設定resourcemanager的伺服器(04)
      start-yarn.sh stop-yarn.sh

      start-all.sh stop-all.sh

19、設定叢集時間同步

	檢查ntp是否安裝
    rpm -qa|grep ntp
  	
  	檢視ntp的狀態:切記正在執行的狀態是不可以的,需要先停止,不然埠會被佔用
    [jinghang@Hadoop03 ~]$ service ntpd status

  如果ntp服務開著,要先關閉ntpd服務
    關閉
      [jinghang@Hadoop03 ~]$ service ntpd stop
    關閉開機自啟
      [jinghang@Hadoop03 ~]$ sudo chkconfig ntpd off

  修改 /etc/ntp.conf 組態檔
    進入編輯:
      [jinghang@Hadoop03 ~]$ sudo vim /etc/ntp.conf 
    修改1(授權192.168.1.0-192.168.1.255網段上的所有機器可以從這臺機器上查詢和同步時間)
      解開註釋 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    修改2(叢集在區域網中,不使用其他網際網路上的時間)
      加上註釋
        #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
    新增3(當該節點丟失網路連線,依然可以採用本地時間作為時間伺服器為叢集中的其他節點提供時間同步)
      server 127.127.1.0
      fudge 127.127.1.0 stratum 10

  修改/etc/sysconfig/ntpd 檔案
    進入編輯:
      [jinghang@Hadoop03 ~]$ sudo vim /etc/sysconfig/ntpd
    增加內容如下(讓硬體時間與系統時間一起同步)
      SYNC_HWCLOCK=yes

  重新啟動ntpd服務
    [jinghang@Hadoop03 ~]$ sudo service ntpd start
  設定ntpd服務開機啟動
    [jinghang@Hadoop03 ~]$ sudo chkconfig ntpd on

  其他伺服器設定
    在其他機器設定10分鐘與時間伺服器同步一次
    root使用者登入,編寫定時任務:
      [root@Hadoop04 jinghang]# crontab -e
      */10 * * * * /usr/sbin/ntpdate Hadoop03

  現在修改任意的伺服器時間,三臺伺服器10分鐘後都可以實現同步時間
  如果沒同步成功,開啟一下另外兩臺伺服器的ntpd服務
    service ntpd start
    chkconfig ntpd on