1. 程式人生 > >Hadoop叢集搭建與經驗總結

Hadoop叢集搭建與經驗總結

(002)最近要研發一款資料傳輸服務的產品需要用到Hadoop叢集,之前搭建過後來長時間不用就給忘記了,這次搭好來記錄一下搭建方法與經驗總結

Hadoop叢集的搭建

原料:

  • VM虛擬機器
  • JDK1.8
  • hadoop2.7.3

注:將jdk1.8.tar.gz和hadoop-2.7.3.tar.gz放在/opt/bigdata目錄下(沒有請自行建立)
附件:
連結:https://pan.baidu.com/s/1oII8j97sAEQDokE9kYJTzA
提取碼:eau1

設計叢集

以一主兩從為例搭建叢集環境,在VM虛擬機器中建立三個
具體設計如下:
192.168.225.100 -- master(主機),namenode, datanode, 
jobtracker, tasktracker -- master(主機名)
192.168.225.101 -- slave1(從機),datanode, tasktracker -- slave1(主機名)
192.168.225.102 -- slave2(從機),datanode,tasktracker -- slave2(主機名)

建立使用者
命令:
# useradd hadoop
# id hadoop
# passwd hadoop
注:我這裡設定的密碼是123456,需要打兩遍
使hadoop使用者成為sudoers,以root使用者修改檔案/etc/sudoers,
命令:
# vim /etc/sudoers
在這裡插入圖片描述
修改資料夾許可權
我未來準備將hadoop安裝到/opt/bigdata資料夾下,所以希望修改該資料夾許可權,使hadoop使用者能夠自由操作該資料夾下的所有檔案
在這裡插入圖片描述

安裝JDK

解壓檔案
在這裡插入圖片描述
移動資料夾
在這裡插入圖片描述
刪除資料夾
在這裡插入圖片描述
注:移動資料夾和刪除資料夾這兩步可以不做,應該是我拿到這個jdk安裝包中間多打了兩層目錄,如果其他包沒有這個問題就不用做這兩步,最後做到如下圖目錄效果就可以了


在這裡插入圖片描述
配置JDK環境變數(以root身份配置)
在這裡插入圖片描述
使profile檔案生效
在這裡插入圖片描述
使用java命令檢視jdk版本以驗證是否安裝成功
在這裡插入圖片描述

搭建Hadoop叢集

解壓檔案
在這裡插入圖片描述
檢視目錄列表
在這裡插入圖片描述
在hadoop目錄下建立tmp目錄,並將許可權設定為777
命令:
$ mkdir tmp
$ chmod 777 tmp
$ mkdir dfs
$ mkdir dfs/name
$ mkdir dfs/data
修改hadoop配置檔案
待修改清單:

  1. hadoop-env.sh

  2. mapred-env.sh

  3. yarn-env.sh

  4. core-site.xml

  5. hdfs-site.xml

  6. mapred-stie.xml

  7. yarn-site.xml

  8. masters

  9. slaves
    進入hadoop配置檔案目錄
    修改 hadoop-env.sh
    在這裡插入圖片描述
    在這裡插入圖片描述
    修改 mapred-env.sh
    在這裡插入圖片描述
    修改 yarn-env.sh
    在這裡插入圖片描述
    修改 core-site.xml
    在這裡插入圖片描述
    修改 hdfs-site.xml
    在這裡插入圖片描述
    修改 mapred-site.xml
    在這裡插入圖片描述
    修改 yarn-site.xml
    在這裡插入圖片描述
    修改 slaves (master、slave1和slave2均作為datanode)
    在這裡插入圖片描述
    配置系統變數
    命令:
    $ sudo su - root
    123456
    #vim /etc/profile
    在這裡插入圖片描述
    使配置生效(切換回hadoop使用者)
    命令:
    $ source /etc/profile
    將hadoop、jdk、以及配置檔案傳送到slave1、slave2節點
    命令:(以slave1為例,slave2同理)
    $ scp -r /opt/bigdata/hadoop-2.7.3 [email protected]:/opt/bigdata/
    $ scp -r /opt/bigdata/jdk1.8 [email protected]:/opt/bigdata/
    注:slave1和slave2的/etc/profile檔案按照master/etc/profile重新配置一遍(我是利用xftp從master下載並分別上傳至slave1和slave2中的)
    修改hosts檔案(使用root使用者)
    為了使外部應用可以訪問到服務(slave1和salve2同理)
    命令:
    #vim /etc/hosts
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述

    授權(hadoop使用者,目錄定位到home目錄即:~(這個符號代表的home 目錄,不是表情……)
    master給自己和salve1,slave2發證書
    命令:(初次授權一路回車)
    $ ssh-keygen
    $ ssh-copy-id -i .ssh/id_rsa.pub [email protected]
    $ ssh-copy-id -i .ssh/id_rsa.pub [email protected]
    $ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    slave1給master發證書(基礎狀態和master一致)
    $ ssh-keygen
    $ ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    slave2給master發證書(基礎狀態和master一致)
    $ ssh-keygen
    $ ssh-copy-id -i .ssh/id_rsa.pub [email protected]
    測試
    使用ssh從master登入到slave1,然後再從slave1登入到master,接著從master登入到slave2,最後從salve2登入到master
    命令:(從master主機開始)
    $ ssh slave1
    $ ssh master
    $ ssh slave2
    $ ssh master

啟動叢集

啟動叢集有兩種方法,一種是全部啟動,一種是分步啟動
方法一(全部啟動):
定位到/opt/bigdata/hadoop-2.7.3/sbin/目錄下,輸入./start-all.sh命令
在這裡插入圖片描述
方法二(分佈啟動)
啟動HDFS
命令:
$ ./start-hdfs.sh
啟動YARN
$ ./start-yarn.sh

驗證

web介面
在瀏覽器中輸入 http://192.168.225.100:50070
在這裡插入圖片描述
點選Datanodes頁面
在這裡插入圖片描述
在瀏覽器中輸入http://192.168.225.100:8088
在這裡插入圖片描述
測試程式
在叢集上執行一個小程式來測試一下我們的叢集有沒有問題
以wordcount程式為例
使用hadoop命令建立一個測試目錄
在這裡插入圖片描述
執行如下命令:
在這裡插入圖片描述
檢視結果:
$ hadoop fs -cat /test/part-r-00000
在這裡插入圖片描述
注:部分結果。

1. 修改由於拷貝造成的datanodeid重複
命令:(slave1和slave2同理)
$ vim /opt/bigdata/hadoop-2.7.3/dfs/data/current/VERSION
master:
在這裡插入圖片描述
slave1:
在這裡插入圖片描述
slave2:
在這裡插入圖片描述
注:我這裡改動了datanodeUuid的後兩位

2. 執行作業報如下異常
18/11/03 16:50:10 INFO input.FileInputFormat: Total input paths to process : 1
18/11/03 16:50:10 WARN hdfs.DFSClient: Caught exception
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1249)
at java.lang.Thread.join(Thread.java:1323)
at org.apache.hadoop.hdfs.DFSOutputStream D a t a S t r e a m e r . c l o s e R e s p o n d e r ( D F S O u t p u t S t r e a m . j a v a : 609 ) a t o r g . a p a c h e . h a d o o p . h d f s . D F S O u t p u t S t r e a m DataStreamer.closeResponder(DFSOutputStream.java:609) at org.apache.hadoop.hdfs.DFSOutputStream DataStreamer.endBlock(DFSOutputStream.java:370)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:546)

這個異常據網上說是hadoop的一個bug可以忽略……,不影響叢集的正常工作,如果誰知道是什麼原因的話可以告訴我,謝謝啦!

總結

一個完美的叢集是很需要花時間和心思研究它的每一個細節的……