Ubuntu搭建Hadoop的踩坑之旅(三)
之前的兩篇文章介紹了如何從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/local3 $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文件夾內的東西刪掉就好
推薦閱讀:
※做好機器學習,數學要學到什麼程度?
※有沒有trace hadoop運行詳細流程的工具,可以profiling hadoop的性能瓶頸,或者可以監控比如提交job在hadoop中如何調度,相關的好工具包推薦大家也推薦下
※穩定和性能如何兼顧?58大數據平台的技術演進與實踐
※Apache Hadoop mapreduce 的Shuffle過程詳解
※虛擬機安裝部署hadoop集群記錄
TAG:Hadoop |