上一篇我們完成了ContOS網路配置以及JDK的安裝,這一篇將在上一篇的基礎上繼續講解虛擬機器的克隆,hadoop環境搭建

虛擬機器克隆.

利用上一篇已經完成網路配置和jdk安裝的虛擬機器在克隆兩臺虛擬機器.
1. 將擬機hadoop01關機.
2. 如動圖演示那樣,選中hadoop01,然後滑鼠右鍵,在出來的選單中選擇 管理—>克隆:
這裡寫圖片描述
3. 下一步:
這裡寫圖片描述
4. 選中虛擬機器中當前狀態,然後下一步:
這裡寫圖片描述
5. 選擇建立完成克隆,然後下一步:
這裡寫圖片描述
6. 這一步,將虛擬機器名稱更改為hadoop02,並將儲存位置修改為與上一個虛擬機器在相同資料夾下,其中每個虛擬機器各自有一個資料夾,這裡我的目錄可能與上面兩篇文章的目錄有所不一樣,原因是我發現之前的Hadoop就存了一個hadoop01,為了區分我的其他虛擬機器,以及讓每個虛擬機器單獨一個資料夾,我將Hadoop命名為hadoop01,並在上層目錄下新建了一個bolg-hadoopes目錄,然後將hadoop01拖到bolg-hadoopes下.注意,在改動了目錄機構以後,在VMware中選中虛擬機器可能就會報一個找不到虛擬機器的錯誤,然後提示移除,移除就好了,然後VMware的選單中 檔案—>開啟—>定位到hadoop01的位置,選中hadoop01.vmx開啟即可.
這裡寫圖片描述
這裡寫圖片描述
7. 點選完成,等待克隆結束,就又建立了一個和上面那個一模一樣的虛擬機器:
這裡寫圖片描述
這裡寫圖片描述
8. 同樣的方式,再克隆一臺取名為hadoop03的虛擬機器.
9. 分別開啟剛克隆的這兩臺以及之前的那一臺共3臺虛擬機器.
10. 用XShell登入到hadoop01,hadoop02,hadoop03,為避免混亂,在XShell中分別將3個虛擬機器命名為h1,h2,h3.XShell連線到虛擬機器的方式請參見上一篇文章.
這裡寫圖片描述
11. 開啟克隆的兩臺虛擬機器的時候,我們會看到主機名都是hadoop1,ip也沒有規律,這將給初學者的我們帶來很大的不便,所以我決定將他們規劃如下:
hadoop1(192.168.93.120),
hadoop2(192.168.93.121),
hadoop3(192.168.93.122)

分別修改克隆的兩臺虛擬機器主機名和IP地址

  1. 編輯/etc/udev/rules.d/70-persistent-net.rules 這個檔案:
    vim /etc/udev/rules.d/70-persistent-net.rules

    
    # PCI device 0x8086:0x100f (e1000)
    
    
    #這條是來自克隆的那臺虛擬機器的配置,將這條註釋:原因是ATTR{address}=="00:0c:29:21:6f:26"的實體地址資訊是來自克隆的虛擬機器
    
    
    #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:21:6f:26", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
    
    
    # PCI device 0x8086:0x100f (e1000)
    
    
    #將這條的NAME="eth1" 改成 NAME="eth0" 
    
    
    #經過實體地址資訊檢視對比,00:0c:29:64:74:a4才是當前這臺機器對應的實體地址.
    
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:64:74:a4", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
    
  2. 編輯網絡卡配置資訊,修還實體地址和IP地址即可.實體地址檢視方式請參見上一篇文章.
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    DEVICE=eth0
    HWADDR=00:0c:29:64:74:a4   #修改實體地址,實體地址請根據自己的VMware獲取
    TYPE=Ethernet
    UUID=afcc5664-3e15-4768-b5ab-45f1c53f7a68
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=none
    IPADDR=192.168.93.121    #修改IP地址
    PREFIX=24
    GATEWAY=192.168.93.2
    DNS1=8.8.8.8
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    NAME="System eth0"
    
  3. 修改主機名:
    vim /etc/sysconfig/network

    NETWORKING=yes
    HOSTNAME=hadoop2
    
  4. 分別編輯3臺機器的hosts檔案,在已有內容後面新增地址對映:
    vim /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.93.120 hadoop1 www.hadoop1.com
    192.168.93.121 hadoop2 www.hadoop2.com
    192.168.93.122 hadoop3 www.hadoop3.com
    
  5. 重啟克隆的兩臺機器.
  6. 測試3臺機器之前是否可以相互通訊.
    1. 用hadoop1分別ping hadoop2,hadoop3:
      這裡寫圖片描述
    2. 用hadoop2分別ping hadoop1,hadoop3.
    3. 用hadoop3分別ping hadoop1,hadoop2.

新建使用者並配置sudo許可權

  1. 我們在安裝CentOS系統的時候,因為直接用root使用者而被警告,因為root使用者許可權過大,如果經常有刪除修改操作,可能會有危險,接下來,我們在hadoop1上新建一個hadoop使用者,之後搭建hadoop環境,都用hadoop使用者來完成,除非特別說明.
  2. 新增hadoop使用者
    useradd hadoop
  3. 給hadoop設定密碼
    passwd hadoop
  4. 給hadoop配置sudo許可權(在命令前加上sudo,可以執行root許可權才能執行的命令)

    1. 編輯sudoers檔案,在編輯之前我們可能檢視一下sudoers的資訊:
      ll /etc/sudoers

      -r--r-----. 1 root root 4002 Mar  2  2012 /etc/sudoers
      

      我們可以看到該檔案連root使用者都是隻讀的.所以要想修改該檔案內容,需要先修改一下該檔案的許可權,給root新增寫許可權:
      chmod u+w /etc/sudoers
      編輯該檔案:vim /etc/sudoers

      
      ##
      
      
      ## Allow root to run any commands anywhere 
      
      root    ALL=(ALL)       ALL
      
      #給hadoop使用者新增sudo許可權
      
      hadoop  ALL=(ALL)       ALL
      
      ## Allows members of the 'sys' group to run networking, software, 
      
      
      ## service management apps and more.
      
      
      # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
      
      
      ## Allows people in group wheel to run all commands
      
      
      # %wheel        ALL=(ALL)       ALL
      
      
      ## Same thing without a password
      
      
      # %wheel        ALL=(ALL)       NOPASSWD: ALL
      
      
      # 執行sudo許可權時不需要輸入密碼
      
      %hadoop ALL=(ALL)       NOPASSWD: ALL
      
      ## Allows members of the users group to mount and unmount the 
      
      
  5. 測試sudo許可權.

    1. 在hadoop的home下新建一個file1檔案.
      touch /home/file1.
    2. 檢視/home/file1. 資訊:

      -rw-r--r--. 1 root root 0 May  1 00:32 /home/file1

      從檔案資訊 可以看出,只有root可以讀寫刪除該檔案.

    3. 切換到hadoop
      su hadoop
    4. 刪除/home/file1檔案
      rm -rf hadoop

      rm: cannot remove `/home/file1': Permission denied

      結果是刪除檔案失敗,許可權異常.

    5. 用新增sudo來刪除
      sudo rm -rf /home/file1
      可以看到結果刪除成功了,說明我們sudo許可權配置成功.
  6. 在hadoop2,hadoop3上同樣的分別新建一個hadoop使用者,並配置sudo許可權.

安裝hadoop並配置相關檔案.

  1. 在hadoop1上切換至hadoop使用者,注意,接下來的配置需要在hadoop使用者下完成,如果在配置過程中,隨意切換使用者,導致某些操作在不同使用者下來完成的,後期啟動hadoop叢集的時候會因hadoop檔案的許可權問題導致啟動失敗,排查起錯誤來也會比較困難.
  2. 在hadoop的家目錄下新建一個apps資料夾
    mkdir /home/hadoop/apps
  3. 用xftp上傳hadoop-2.7.5.tar.gz包到該目錄下(具體操作請參見上一篇)上傳jdk的方式.
    hadoop-2.7.5.tar.gz的連結:https://pan.baidu.com/s/1o9CXsn71kfNVNKIQX0PW5w 密碼:hf19
  4. 解壓hadoop-2.7.5.tar.gz包:
    tar -zxvf /home/hadoop/apps/hadoop-2.7.5.tar.gz
  5. 解壓後的結果:
    這裡寫圖片描述
  6. 進入到hadoop-2.7.5
    cd /home/hadoop/apps/hadoop-2.7.5
  7. 在/home/hadoop/apps/hadoop-2.7.5新建一個data目錄(hadoop引數的資料存放目錄)
    mkdir /home/hadoop/apps/hadoop-2.7.5/data
  8. 配置hadoop-env.sh檔案:
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim hadoop-env.sh

    
    # set JAVA_HOME in this file, so that it is correctly defined on
    
    
    # remote nodes.
    
    
    # The java implementation to use.
    
    
    #在這裡新增JDK安裝目錄的環境變數,這裡我又嘗試過 JAVA_HOME=${JAVA_HOME},但是不能起作用,還是老老實實的寫吧
    
    export JAVA_HOME=/home/java/jdk1.7.0_79
    
    # The jsvc implementation to use. Jsvc is required to run secure datanodes
    
  9. 配置core-site.xml配置檔案
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim core-site.xml

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop1:9000</value><!--這裡hadoop需要換成自己配置的第一臺機器的hostname,比如我的是hadoop1,所以我這裡寫的就是hadoop1-->
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <!--配置hadoop叢集資料存放路徑,注意最後不要有空格-->
                    <value>/home/hadoop/apps/hadoop-2.7.5/data</value>
            </property>
    </configuration>
    
  10. 設定hdfs-site.xml配置檔案
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim hdfs-site.xml

    <configuration>
            <!--配置副本數量-->
            <property>
                    <name>dfs.replication</name>
                    <value>2</value>
            </property>
    </configuration>
    
  11. 配置mapred-site.xml配置檔案
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    預設mapred-site.xml不存在,將mapred-site.xml.template改成mapred-site.xml即可
    mv mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    <configuration>
            <!--指定mapreduce在yarn上執行-->
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    </configuration>
    
  12. 配置yarn-site.xml配置檔案
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim yarn-site.xml

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>hadoop1</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    
    </configuration>
    
  13. 配置slaves配置檔案
    cd /home/hadoop/apps/hadoop-2.7.5/etc/hadoop/
    vim slaves

    
    #指定幹活的datanode
    
    hadoop2
    hadoop3
  14. 配置hadoop1到hadoop2,hadoop3之間的免密通訊,完成這一步操作,需要安裝ssh軟體,注意 如果機器中沒有安裝ssh-client軟體,先需要安裝,如果沒有安裝軟體技能,推薦先了解下linux安裝安軟的知識.安裝步驟如下1,2:
    1. 查詢適合的軟體包:yum list | grep openssh-clients
    2. 安裝:yum install openssh-clients.x86_64 (openssh-clients.x86_64 是我查詢到的結果).
    3. 啟動hadoop2,hadoop3,並都切換到hadoop使用者下.
    4. 配置免密登入之前,登入到hadoop2看看效果:
      ssh hadoop2
      這裡寫圖片描述
      退出hadoop2的登入:exit
      這裡寫圖片描述
    5. 在hadoop1的hadoop使用者根目錄下(注意,必須用hadoop使用者來執行),執行以下命令產來金鑰對:
      cd ~
      ssh-keygen -t rsa
      結果如下:
      這裡寫圖片描述
    6. 將金鑰拷貝到hadoop2,hadoop3:
      cd .ssh #.ssh是生成金鑰對時產生的資料夾
      ssh-copy-id hadoop1 #拷貝到hadoop1(hadoop1就是當前的機器,當前機器也需要設定免密登入)
      ssh-copy-id hadoop2 #拷貝到hadoop2
      ssh-copy-id hadoop3 #拷貝到hadoop3
      拷貝到hadoop2的截圖如下:
      這裡寫圖片描述
      拷貝到其他機器也是一樣,就不一一截圖了.
    7. 驗證免密登入是否配置成功.
      這裡寫圖片描述
      不需要密碼,直接就登入成功了.記得退出登入.
  15. 配置hadoop軟體的環境變數:

    1. 配置之前:輸入: which hadoop
      這裡寫圖片描述
      發現是找不到hadoop這個命令的.
    2. 在/etc/profile檔案中新增hadoop的環境變數
      sudo vim /etc/profile #因為只有root使用者才能編輯該檔案,所以hadoop想要編輯,需要用sudo許可權:

      ```
      export JAVA_HOME=/home/java/jdk1.7.0_79
      #申明hadoop的路徑變數
      export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.5
      #在之前配置JAVA的環境變數之後追加hadoop的環境變數
      export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      
      ```
      
    3. source vim /etc/profile #讓環境變數生效
    4. 驗證配置是否成功:which hadoop
      這裡寫圖片描述
      結果如上表示配置成功.
  16. 將已經配置好的hadoop整個檔案包拷貝到hadoop2,hadoop3,這裡需要注意的是hadoop2和hadoop3中即將放置hadoop包的路徑需要保持一致,如果不一致,需要在上面配置的那幾個hadoop配置檔案中修改有路徑的地方.
    1. 在hadoop2,hadoop3的hadoop家目錄下新建一個apps目錄.
    2. scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop2:/home/hadoop/apps/
    3. scp -r /home/hadoop/apps/hadoop-2.7.5 hadoop3:/home/hadoop/apps/
  17. 根據上面配置hadoop軟體的環境變數一樣去hadoop2和hadoop3上配置好hadoop的環境變數.
  18. 分別重啟3臺機器.
  19. hadoop1上,使用者hadoop使用者,格式化hadoop 的HDFS(檔案系統),第一次使用需要格式化:
    hadoop namenode -format
    這裡寫圖片描述
  20. 在hadoop1上啟動hdfs檔案系統:
    start-dfs.sh
    待啟動完成,再驗證是否有該有程序:jps
    這裡寫圖片描述
    在hadoop2,hadoop3上檢視hadoop的程序:jps
    這裡寫圖片描述
  21. 在hadoop1上啟動yarn叢集
    start-yarn.sh
    這裡寫圖片描述
    在hadoop2,hadoop3上檢視程序:
    這裡寫圖片描述
  22. 使用瀏覽器檢視叢集狀態:http://192.168.93.120:8088
    如果沒法訪問,檢視防火牆狀態:
    sudo service iptables status
    這裡寫圖片描述
    關閉防火牆:
    sudo service iptables stop
    這裡寫圖片描述
    最後正確的結果:
    這裡寫圖片描述
  23. 檢視HDFS檔案系統狀態:http://192.168.93.120:50070
    這裡寫圖片描述
    如果結果都如上,表示hadoop叢集搭建成功.那這篇文章的目的就達到了.

總結

我在配置的時候,也出現這樣那樣的問題.所以配置過程中需要注意以下幾點:
1. 配置主機名時,以及在新增使用者時,千萬不要使用帶有下劃線的以及其他不符合規範的命名,我第一次配置時因為使用了下劃線,導致啟動叢集時一直啟動失敗,折騰了好久好久.
2. hadoop的解壓,配置,拷貝,需要使用配置了免密登入的使用者來完成.比如我以上配置的就是hadoop使用者來完成的.
3. 初始hadoop叢集的時候,需要使用與解壓,配置,拷貝hadoop時的使用者一致.
4. 配置的時候仔細,仔細再仔細.可能因為一個字母錯誤,就會導致很多問題.
5. 我的3臺虛擬機器的hostname命名分別是hadoop1,hadoop2,hadoop3,在這三臺虛擬機器下都有一個用來搭建hadoop叢集的使用者hadoop,所以再閱讀的時候不要混淆了.
6. 如果按照我的步驟來搭建,最後叢集搭建完成時,每臺機器的程序規劃如下:

主機名程序
hadoop1 SecondaryNameNode
ResourceManager
NameNode
hadoop2 DataNode
NodeManager
hadoop3 DataNode
NodeManager

盡情期待下一篇Zookeeper的環境搭建,或者HDFS的API操作

















創作不易.轉載註明出處.
qq交流群:775661488