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

以前的兩篇文章介紹瞭如何從0開始到搭建好帶有JDK的Ubuntu的過程,原本這篇文章是打算介紹搭建僞分佈式集羣的。可是後來想一想反正僞分佈式和徹底分佈式差很少,所幸直接介紹徹底分佈式了。html

若是你想本身搭建僞分佈式玩的話,參考:在VMware下安裝Ubuntu並部署Hadoop1.2.1分佈式環境 - CSDN博客node

這一篇主要參考這篇文章:Hadoop2.6.0安裝 - 集羣(搭建的過程當中沒截圖,你們能夠到原博客看)linux

1、所需的環境和軟件:(如下是咱們的環境,僅供參考)

1. 操做系統:Windows 10 64位web

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

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

4. VMware Tools:經過VMware來安裝app

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

6. SSH:經過linux命令來安裝dom

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

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

2、集羣的搭建(以三臺機器爲例子,一臺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來測試可否連接。

二、配置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操做就是成功了

三、集羣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配置完成

四、對從機的每一臺主機作一樣的配置

把/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

五、啓動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 能夠查看節點狀態等

六、中止集羣

$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文件夾內的東西刪掉就好

相關文章
相關標籤/搜索