Hadoop集羣搭建詳解

寫在前面

在剛開始接觸hadoop的時候,在學習了好多久,有一些不仔細導致掉了好多坑,後面搭建成功寫下這篇文章希望能幫助到更多人少掉坑。我的慣例先介紹各個版本:

系統環境:Linux Mint 18.2(Ubuntu16.04)
hadoop版本:hadoop 2.7.1

其次我用到了兩臺電腦作爲集羣的節點,應用如下:

節點類型 節點機器名稱 IP
master mryang 192.168.27.228
slave workstation 192.168.27.165

注意:此處坑來了
1.必須保證兩個機器的IP的路由段一樣,之前遇到兩個IP分別是:192.168.1.112和192.168.27.170,到後面無論如何有一個都拒絕ssh訪問通信。
2.必須保證在所有slave節點上創建的用戶名和master節點上創建的用戶名一樣,因爲hadoop是通過hadoop2.7.1@slave來訪問slave節點的,master節點上的用戶名(本文爲hadoop2.7.1),如果不一樣則訪問不了。

SSH無密碼登錄節點

  • 選擇一臺機器作爲master

    在這臺master機器首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶(一旦創建就會在主用戶的/home/目錄產生一個對應目錄如下,其中youjun是我的主用戶,其它兩個爲我新創建的用戶用來搭建hadoop集羣的,請勿刪除) :

    sudo useradd -m hadoop2.7.1 -s /bin/bash

    這裏寫圖片描述

    這條命令創建了可以登陸的hadoop2.7.1用戶,並使用/bin/bash作爲shell。
    接着使用如下命令設置密碼,按提示輸入兩次密碼:

    sudo passwd hadoop2.7.1

    可爲hadoop_master用戶增加管理員權限,並且給hadoop2.7.1用戶處理/home/hadoop2.7.1/目錄的權限,方便部署,避免一些對剛接觸的人來說比較棘手的權限問題:

    sudo adduser hadoop2.7.1 sudo
    sudo chown -R hadoop2.7.1 /home/hadoop2.7.1/

    執行效果如下圖:

    這裏寫圖片描述

    最後註銷當前用戶(註銷,免得佔用進程),在登陸界面使用剛創建的hadoop2.7.1用戶進行登陸。

  • 選定另一臺機器作爲slave

    以下的創建用戶同理上述創建過程,只是在另外一個機器上創建一個新的同名用戶(前面已經說了,爲了不出錯誤,請設置和master機器上創建的hadoop2.7.1用戶名字相同的用戶,假設你還有機器可用於slave節點,你就做和這臺機器相同的操作就好)
    在這臺slave機器上首先按 ctrl+alt+t 打開終端窗口,輸入如下命令創建新用戶 :

    sudo useradd -m hadoop2.7.1 -s /bin/bash

    這條命令創建了可以登陸的hadoop2.7.1用戶,並使用/bin/bash作爲shell。
    接着使用如下命令設置密碼,按提示輸入兩次密碼:

    sudo passwd hadoop2.7.1

    可爲hadoop_slave用戶增加管理員權限,方便部署,避免一些對剛接觸的人來說比較棘手的權限問題:

    sudo adduser hadoop2.7.1 sudo
    sudo chown -R hadoop2.7.1 /home/hadoop2.7.1/

    創建過程如下圖:

    這裏寫圖片描述

    另外講一個刪除用戶的命令(hadoop_master是我之前在這臺機器上創建的用戶,其中-r代表刪除根目錄,hadoop_master是我要刪除的用戶名,提示郵件池未找到不管,因爲之前沒有設置用戶信息):

    sudo userdel -r hadoop_master

    這裏寫圖片描述
    最後註銷當前用戶(註銷,免得佔用進程),在登陸界面使用剛創建的hadoop_slave用戶進行登陸。

  • 在master機器上的配置

    如果沒有安裝vim的話先安裝:

    sudo apt-get install vim

    按 ctrl+alt+t 打開終端窗口,輸入如下命令():

    sudo vim /etc/hosts

    將IP和別名全部寫入(不會用vim的百度一下,按i鍵開始編輯,插入下面兩行後按esc鍵退出編輯,再輸入:wq回車就保存了):

    192.168.27.165  mryang
    192.168.27.228  slave

    這裏寫圖片描述

    繼續執行如下命令(第一次執行會產生.ssh目錄,否則後面無法打開.ssh目錄):

    ssh mryang

    輸入yes回車繼續,輸入本用戶的密碼繼續,出現welcome to …代表連接成功。
    這裏寫圖片描述

    接着進入.ssh目錄,生成公鑰:

    cd ~/.ssh
    ssh-keygen -t rsa

    連續回車(使用默認)產生公鑰:

    這裏寫圖片描述

    如果你想實現後續ssh無密登錄mryang(本機的IP),執行如下第一條命令(不執行的話後面開啓hadoop的時候會要求你輸入密碼,所以也執行了吧),第二條命令將生成的公鑰傳輸給slave對應IP下的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄下
    注意:你的slave節點的hadoop2.7.1用戶必須包含/home/hadoop2.7.1/這個目錄,這個目錄你可以更改,但是必須保證在hadoop2.7.1用戶中有這個目錄。

    cat ./id_rsa.pub >> ./authorized_keys
    scp ~/.ssh/id_rsa.pub hadoop2.7.1@slave:/home/hadoop2.7.1/

    輸入yes回車,再輸入hadoop_slave用戶的密碼回車,接下來就會看到id_rsa.pub文件傳輸成功:

    這裏寫圖片描述

    你現在可以去slave節點的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄看到這個文件了。

  • 在slave節點上的配置

    當你還有一個作爲slave節點的時候配置可類似做配置。
    如果沒有安裝vim的話先安裝:

    sudo apt-get install vim

    按 ctrl+alt+t 打開終端窗口,輸入如下命令():

    sudo vim /etc/hosts

    將IP和別名全部寫入(這個別名以後就可以代替其前面的IP了,不會用vim的百度一下,按i鍵開始編輯,插入下面兩行後按esc鍵退出編輯,再輸入:wq回車就保存了):

    192.168.27.165  mryang
    192.168.27.228  slave

    繼續執行如下命令(第一次執行會產生.ssh目錄,否則後面無法打開.ssh目錄):

    ssh slave

    輸入yes回車繼續

    cd ~/.ssh
    ssh-keygen -t rsa

    連續回車產生公鑰,以上和master節點的hadoop2.7.1用戶的操作一樣我就不上圖了。
    如果你想實現後續在slave節點上ssh無密登錄無密登錄slave(本機的IP別名,一般不用),則執行下述第一條命令,第二條命令將生成的公鑰傳輸給mryang對應IP下的hadoop2.7.1用戶的/home/hadoop2.7.1/目錄下

    cat ./id_rsa.pub >> ./authorized_keys
    scp ~/.ssh/id_rsa.pub hadoop2.7.1@mryang:/home/hadoop2.7.1/

    一旦執行了第一條命令則再連接slave就不用輸密碼了,如下:

    這裏寫圖片描述

    接下來將master節點的hadoop2.7.1用戶傳過來的公鑰加入authorized_keys就可以實現用master節點的hadoop2.7.1用戶ssh無密碼登錄slave節點(你可以理解爲master機器向slave機器提交一個申請,申請以後連接slave不需要密碼,這個申請書就是id_rsa.pub公鑰,而slave將這個公鑰接受(如下命令,在slave節點的hadoop2.7.1用戶上把公鑰加入authorized_keys)就行了):

    cat /home/hadoop2.7.1/id_rsa.pub >> ~/.ssh/authorized_keys

    這裏寫圖片描述

    同樣,如果想slave節點的hadoop2.7.1用戶也能無密碼登錄master節點(一般也不用,只需要master節點的hadoop2.7.1用戶能無密碼訪問所有的slave節點就ok),那麼在master節點的hadoop2.7.1用戶上也將slave節點的hadoop2.7.1用戶傳過去的公鑰加入到authorized_keys中就行,不過得先傳公鑰過去再切換到master節點的hadoop2.7.1用戶,執行:

    cat /home/hadoop2.7.1/id_rsa.pub >> ~/.ssh/authorized_keys

    至此,你就可以在master節點的hadoop2.7.1用戶上無密碼登錄slave節點了,切換到master節點的hadoop2.7.1用戶,執行以下命令(slave其實就是一個IP的別名,hadoop2.7.1是slave節點創建的一個用戶),結果如圖:

    ssh hadoop2.7.1@slave

    這裏寫圖片描述

hadoop配置

  • 下載hadoop 2.7.1
  • 安裝hadoop2.7.1

    切換到master機器的hadoop2.7.1用戶:
    首先我將下載的hadoop-2.7.1.tar.gz文件解壓並放在/home/hadoop2.7.1/目錄下(不要放到其它目錄,不然會導致權限問題,因爲hadoop2.7.1用戶只對/home/hadoop2.7.1/目錄有操作權限),然後修改其名字爲hadoop,最後修改這個文件的權限,命令如下:

    sudo tar -zxf ~/下載/hadoop-2.7.1.tar.gz -C /home/hadoop2.7.1/
    cd /home/hadoop2.7.1/
    sudo mv ./hadoop-2.7.1/ ./hadoop
    sudo chown -R hadoop2.7.1 ./hadoop

    這裏寫圖片描述

    集羣/分佈式模式需要修改 /home/hadoop2.7.1/hadoop/etc/hadoop 中的5個配置文件,更多設置項可點擊查看官方說明,這裏僅設置了正常啓動所必須的設置項: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
    首先進入/home/hadoop2.7.1/hadoop/etc/hadoop,執行如下:

    cd /home/hadoop2.7.1/hadoop/etc/hadoop

    這裏寫圖片描述

    然後修改以下幾個文件:
    1.文件 slaves。
    將作爲 DataNode 的主機名寫入該文件,每行一個。分佈式配置可以保留 localhost,也可以刪掉,讓 mryang 節點僅作爲 NameNode 使用。
    本教程讓 mryang 節點僅作爲 NameNode 使用,因此將文件中原來的 localhost 刪除,只添加一行內容:slave。

    這裏寫圖片描述

    2.文件core-site.xml修改爲下面,同樣用“sudo vim core-site.xml”命令來修改,以下類似:

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://mryang:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/home/hadoop2.7.1/hadoop/tmp</value>
                    <description>Abase for other temporary directories.</description>
            </property>
    </configuration>
    

    3.文件 hdfs-site.xml,dfs.replication 一般設爲 3,但我們只有一個 slave 節點,所以 dfs.replication 的值還是設爲 1:

    <configuration>
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>mryang:50090</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>file:/home/hadoop2.7.1/hadoop/tmp/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>file:/home/hadoop2.7.1/hadoop/tmp/dfs/data</value>
            </property>
    </configuration>

    4.文件 mapred-site.xml (可能需要先重命名重命名的命令是“sudo mv mapred-site.xml.template mapred-site.xml ”,默認文件名爲 mapred-site.xml.template),然後配置修改如下:

    <configuration>
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.address</name>
                    <value>mryang:10020</value>
            </property>
            <property>
                    <name>mapreduce.jobhistory.webapp.address</name>
                    <value>mryang:19888</value>
            </property>
    </configuration>

    5.文件 yarn-site.xml:

    <configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>mryang</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    </configuration>
  • 配置環境變量

    首先切換到mater機器的hadoop2.7.1用戶執行下述操作。
    如果安裝了Java jdk的話,使用以下命令查看jdk的安裝路徑:

    echo $JAVA_HOME

    注意:即使安裝了jdk,由於這是新建的用戶,所以JAVA_HOME就在這個用戶中不存在,需要重新配置,由於我的jdk安裝在/usr/lib/jvm/java-8-oracle目錄(如果你沒安裝jdk則先去主用戶安裝)。
    執行下述命令:

    sudo vim ~/.bashrc

    這裏寫圖片描述

    PATH是hadoop的安裝路徑,先寫上去,後面再配置,不過怎麼寫就得怎麼安裝。
    進入到/home/hadoop2.7.1/目錄然後打包之前修改好的hadoop配置文件,然後傳輸到slave節點上,執行如下:

    cd /home/hadoop2.7.1/
    tar zcvf hadoop.tar.gz hadoop
    scp ./hadoop.tar.gz hadoop2.7.1@slave:/home/hadoop2.7.1/

    壓縮成功截圖:

    這裏寫圖片描述

    下圖爲傳輸成功圖:

    這裏寫圖片描述

    然後切換到slave機器的hadoop2.7.1用戶執行下述操作。

    進入到/home/hadoop2.7.1/目錄然後解壓master機器傳輸過來的壓縮文件,然後修改~/.bashrc文件的環境變量:

        cd /home/hadoop2.7.1/
        tar zxvf hadoop.tar.gz hadoop

啓動

先切換到master的hadoop2.7.1用戶。

cd /home/hadoop2.7.1/hadoop/

第一次啓動得格式化(緊接上面執行):

./bin/hdfs namenode -format

這裏寫圖片描述

啓動dfs

./sbin/start-dfs.sh

這裏寫圖片描述

啓動yarn

./sbin/start-yarn.sh

這裏寫圖片描述

停止hadoop(注意目錄):

這裏寫圖片描述

後面再開啓hadoop:

這裏寫圖片描述

master機器的hadoop2.7.1用戶下jps查看:

這裏寫圖片描述

slave機器的hadoop2.7.1用戶下jps查看(切換機器):

這裏寫圖片描述

結語

以上就是hadoop集羣的搭建的大部分內容了,總的注意那幾個坑就是。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章