1. 程式人生 > >Ubuntu搭建Hadoop的踩坑之旅(三)

Ubuntu搭建Hadoop的踩坑之旅(三)

namenode 結束 ctu mapreduce 分布 使用 framework 2.6 start

之前的兩篇文章介紹了如何從0開始到搭建好帶有JDK的Ubuntu的過程,本來這篇文章是打算介紹搭建偽分布式集群的。但是後來想想反正偽分布式和完全分布式差不多,所幸直接介紹完全分布式了。

如果你想自己搭建偽分布式玩的話,參考:在VMware下安裝Ubuntu並部署Hadoop1.2.1分布式環境 - CSDN博客

這一篇主要參考這篇文章:Hadoop2.6.0安裝 - 集群(搭建的過程中沒截圖,大家可以到原博客看)

一、所需的環境和軟件:(以下是我們的環境,僅供參考)

1. 操作系統:Windows 10 64位

2. 內存:4G以上(4G 可以搭建,不過虛擬機的運行可能會比較慢,這種情況可以考慮雙系統)

3. VMware Workstation 12:VMware-workstation-full-12.5.7-5813279.exe

4. VMware Tools:通過VMware來安裝

5. Ubuntu12.04:ubuntu-14.04.5-desktop-amd64.iso,ubuntu-16.04.3-desktop-amd64.iso(團隊中兩種系統都有人成功,不過高版本的比較順利)

6. SSH:通過linux命令來安裝

7. JDK1.8:jdk-8u11-linux-x64.tar.gz

8. Hadoop2.6.0:hadoop-2.6.0.tar.gz

二、集群的搭建(以三臺機器為例子,一臺master(主機),兩臺Slave(從機),在虛擬機的設置中將網絡適配改為橋接)

1.為了使得機器間能夠互相連通,我們需要修改/etc/hosts文件。

首先我們要知道每一臺機器的IP地址:通過 ifconfig 來查看

技術分享圖片

使用ping命令來測試能不能連通其他的機器

ping IP

使用 Ctrl+c來停止

知道了每臺主機的IP之後就可以去修改hosts文件了(每一臺主機做同樣的配置),sudo gedit /etc/hosts

修改成下面的樣子

192.168.31.61 Master

192.168.31.29 Slave1

192.168.31.34 Slave2

修改完之後就可以用ping Slave1來測試能否鏈接。

2、配置SSH登錄

配置SSH是為了使得每臺機器之間能夠通過SSH實現無密碼登錄

安裝ssh:

apt-get install ssh

安裝好後生成ssh公鑰。

$cd ~/.ssh # 如果沒有該目錄,先執行一次ssh localhost,生成.ssh目錄
$rm ./id_rsa* # 刪除之前生成的公匙(如果有)
$ssh-keygen -t rsa # 一直按回車就可以
$cat ./id_rsa.pub >> ./authorized_keys #將公鑰加入授權

將Master 上生成的公鑰傳到各個Slave節點

$scp ~/.ssh/id_rsa.pub hadoop@Slave0:/home/hadoop/
$scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

這裏的hadoop是指用戶名,如果你集群中的機器名字不一樣,就直接改成相應的用戶名就行了。

Master將公鑰傳輸到各個節點後,Slave 要將公鑰加入授權,這樣Master 就能通過ssh免密碼登錄各臺機器了。

$cd ~/.ssh

$cat /home/hadoop/id_rsa.pub >> ./authorized_keys #將Master的公鑰加入授權,/home/hadoop/換成自己的目錄

每一臺Slave機器都完成上述工作後,Master可以使用ssh登錄各臺主機了。

$ssh Slave1 #登錄Slave1,成功的話是不需要密碼的,然後$前面的提示信息會變成你登錄的那臺主機的信息

$ exit #退出登錄

註意:如果你的從機用戶名和hosts文件裏面的Slave1不一樣的話,直接ssh Slave1可能會登陸不了。所以這時可以改成:ssh 用戶名@Slave1

如果沒什麽問題的話,就表明ssh操作就是成功了

3、集群xml文件的配置

將Hadoop解壓所有機器統一放到同一個目錄下。(節點啟動是master通過ssh登陸到每一臺從機然後在相同的目錄啟動Hadoop)

配置文件必須要配置的有5個,還有一個可能要配置。

必要的是: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

可能:hadoop-env.sh

先說hadoop-env.sh這個文件,為什麽是可能呢?因為如果每一臺機子的JDK路徑不同的話需要在文件中加入JDK路徑:

技術分享圖片

紅框部分:你的JDK路徑。

slaves文件:

將作為 DataNode 的主機名寫入該文件,每行一個,默認為 localhost,所以在偽分布式配置時,節點即作為 NameNode 也作為 DataNode。分布式配置可以保留 localhost,也可以刪掉,讓 Master 節點僅作為 NameNode 使用。;例如直接將 Slave1 和 Slave2 都加入其中。

core-site.xml文件

<configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://Master:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                    <value>file:/usr/local/hadoop/tmp</value>
                    <description>Abase for other temporary directories.</description>
            </property>
    </configuration>

hdfs-site.xml文件:

<configuration>
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>Master:50090</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
            <property>
                    <name>dfs.namenode.name.dir</name>
                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
            </property>
            <property>
                    <name>dfs.datanode.data.dir</name>
                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
            </property>
    </configuration>

dfs.replication是hdfs數據塊的復制份數一般默認為3,但是這裏只有兩臺機器,所以改為2.

mapred-site.xml 文件(默認文件名為 mapred-site.xml.template,需要將文件名改成mapred-site.xml),然後配置修改如下:

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

yarn-site.xml文件

<configuration>
            <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>Master</value>
            </property>
            <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
            </property>
    </configuration>

ok配置完成

4、對從機的每一臺主機做同樣的配置

把/usr/local/hadoop文件夾拷貝到每一臺從機上面可以用U盤或者遠程拷貝

$cd /usr/local
$sudo rm -r ./hadoop/tmp     # 刪除 Hadoop 臨時文件
$sudo rm -r ./hadoop/logs/*   # 刪除日誌文件
$tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先壓縮再復制
$cd ~
$scp ./hadoop.master.tar.gz Slave0:/home/hadoop

copy結束後,在Slave1和Slave2節點上直接將copy過來的目錄解壓即可(Master節點需要和Slave節點有相同的配置)。

$sudo rm -r /usr/local/hadoop    # 刪掉舊的(如果存在)
$sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
3 $sudo chown -R hadoop /usr/local/hadoop

5、啟動Hadoop集群(在Master上啟動):

$cd /usr/local/hadoop               #你的Hadoop文件夾
$hdfs namenode -format             #格式化namenode
$start-dfs.sh                      #啟動hdfs
$start-yarn.sh                     #啟動yarn框架
$mr-jobhistory-daemon.sh start historyserver  

然後用JPS查看每個節點的守護進程:

Master節點

技術分享圖片樓主沒截圖,圖片取自原參考博客

Slave1

技術分享圖片樓主沒截圖,圖片取自原參考博客

Slave2

技術分享圖片樓主沒截圖,圖片取自原參考博客

這時可以上web頁面查看節點狀態

1. 訪問 http://localhost:50070 可以查看Hadoop集群的節點數、NameNode及整個分布式系統的狀態等(live node是存活幾點個數,不為0則成功)。

2. 訪問 http://localhost:50030 可以查看JobTracker的運行狀態,如Job運行的速度、Map個數、Reduce個數等。

3.訪問 http://localhost:8088 可以查看節點狀態等

6、停止集群

$stop-yarn.sh
$stop-dfs.sh
$mr-jobhistory-daemon.sh stop historyserver

*備註:遇到問題查看日誌文件一個很好的選擇

坑:

9000端口:jps顯示有datenode,但是livenode為0。9000端口真的是一個很詭異的問題,一度在這裏卡了很久。查過很多方法,最後大致是這麽解決的:

卸載防火墻:

sudo apt-get remove iptable

/etc/hosts文件做如下改動

127.0.0.1 localhost

127.0.1.1 localhost.localdomain localhost

0.0.0.0 Master

還有的是這樣:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.20.77.172 hadoop-master

10.20.77.173 hadoop-slave1

10.20.77.174 hadoop-slave2

10.20.77.175 hadoop-slave3

網上各種版本,我也依舊不是很確定,大家試著吧。

datenode未啟動:

將所有機器的hadoop下的tmp文件夾內的東西刪掉就好

Ubuntu搭建Hadoop的踩坑之旅(三)