目錄: 1、集群部署介紹 1.1 Hadoop簡介 1.2 環境說明 1.3 環境配置 1.4 所需軟體 2、SSH無密碼驗證配置 2.1 SSH基本原理和用法 2.2 配置Master無密碼登錄所有Salve 3、Java環境安裝 3.1 安裝JDK 3.2 配置環境變數 3.3 驗證安裝成功 3 ...
目錄:
1、集群部署介紹
1.1 Hadoop簡介
1.2 環境說明
1.3 環境配置
1.4 所需軟體
2、SSH無密碼驗證配置
2.1 SSH基本原理和用法
2.2 配置Master無密碼登錄所有Salve
3、Java環境安裝
3.1 安裝JDK
3.2 配置環境變數
3.3 驗證安裝成功
3.4 安裝剩餘機器
4、Hadoop集群安裝
4.1 安裝hadoop
4.2 配置hadoop
4.3 啟動及驗證
4.4 網頁查看集群
5、常見問題FAQ
5.1 關於 Warning: $HADOOP_HOME is deprecated.
5.2 解決"no datanode to stop"問題
5.3 Slave伺服器中datanode啟動後又自動關閉
5.4 從本地往hdfs文件系統上傳文件
5.5 安全模式導致的錯誤
1、集群部署介紹
1.1 Hadoop簡介
Hadoop是Apache軟體基金會旗下的一個開源分散式計算平臺。以Hadoop分散式文件系統HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的開源實現)為核心的Hadoop為用戶提供了系統底層細節透明的分散式基礎架構。
對於Hadoop的集群來講,可以分成兩大類角色:Master和Salve。一個HDFS集群是由一個NameNode和若幹個DataNode組 成的。其中NameNode作為主伺服器,管理文件系統的命名空間和客戶端對文件系統的訪問操作;集群中的DataNode管理存儲的數據。 MapReduce框架是由一個單獨運行在主節點上的JobTracker和運行在每個從節點的TaskTracker共同組成的。主節點負責調度構成一 個作業的所有任 務,這些任務分佈在不同的從節點上。主節點監控它們的執行情況,並且重新執行之前的失敗任務;從節點僅負責由主節點指派的任務。當一個Job被提交 時,JobTracker接收到提交作業和配置信息之後,就會將配置信息等分發給從節點,同時調度任務並監控TaskTracker的執行。
從上面的介紹可以看出,HDFS和MapReduce共同組成了Hadoop分散式系統體繫結構的核心。HDFS在集群上實現分散式文件系統,MapReduce在集群上實現了分散式計算和任務處理。HDFS在MapReduce任務處理過程中提供了文件操作和存儲等支持,MapReduce在HDFS的基礎上實現了任務的分發、跟蹤、執行等工作,並收集結果,二者相互作用,完成了Hadoop分散式集群的主要任務。
1.2 環境說明
我的環境是在虛擬機中配置的,Hadoop集群中包括4個節點:1個Master,2個Salve,節點之間區域網連接,可以相互ping通,節點IP地址分佈如下:
虛擬機系統 |
機器名稱 |
IP地址 |
Ubuntu 13.04 |
Master.Hadoop |
192.168.1.141 |
Ubuntu 9.11 |
Salve1.Hadoop |
192.168.1.142 |
Fedora 17 |
Salve2.Hadoop |
192.168.1.137 |
Master機器主要配置NameNode和JobTracker的角色,負責總管分散式數據和分解任務的執行;3個 Salve機器配置DataNode 和TaskTracker的角色,負責分散式數據存儲以及任務的執行。其實應該還應該有1個Master機器,用來作為備用,以防止Master伺服器宕機,還有一個備用馬上啟用。後續經驗積累一定階段後補上一臺備用Master機器(可通過配置文件修改備用機器數)。
註意:由於hadoop要求所有機器上hadoop的部署目錄結構要求相同(因為在啟動時按與主節點相同的目錄啟動其它任務節點),並且都有一個相同的用戶名賬戶。參考各種文檔上說的是所有機器都建立一個hadoop用戶,使用這個賬戶來實現無密碼認證。這裡為了方便,分別在三台機器上都重新建立一個hadoop用戶。
1.3 環境配置
Hadoop集群要按照1.2小節表格所示進行配置,下麵介紹如何修改機器名稱和配置hosts文件,以方便使用。
註意:我的虛擬機都採用NAT方式連接網路,IP地址是自動分配的,所以這裡就使用自動分配的IP地址而未特地修改為某些IP地址。
(1)修改當前機器名稱
假定我們發現我們的機器的主機名不是我們想要的。
1)在Ubuntu下修改機器名稱
修改文件/etc/hostname里的值即可,修改成功後用hostname命令查看當前主機名是否設置成功。
另外為了能正確解析主機名,最好也修改/etc/hosts文件里對應的主機名
2)在Fedora下修改機器名稱
通過對"/etc/sysconfig/network"文件修改其中"HOSTNAME"後面的值,改成我們規定的名稱。
命令:vi /etc/sysconfig/network,修改如下:
同樣為了能正確解析主機名,最好也修改/etc/hosts文件里對應的主機名。
(2)配置hosts文件(必須)
"/etc/hosts"這個文件是用來配置主機將用的DNS伺服器信息,是記載LAN內接續的各主機的對應[HostName IP]用的。當用戶在進行網路連接時,首先查找該文件,尋找對應主機名對應的IP地址。
我們要測試兩台機器之間知否連通,一般用"ping 機器的IP",如果想用"ping 機器的主機名"發現找不見該名稱的機器(這也就是為什麼在修改主機名的同時最好修改該文件中對應的主機名),解決的辦法就是修改"/etc/hosts"這個文件,通過把LAN內的各主機的IP地址和HostName的一一對應寫入這個文件的時候,就可以解決問題。
例如:機器為"Master.Hadoop:192.168.1.141"對機器為"Salve1.Hadoop:192.168.1.142"用命令"ping"記性連接測試。測試結果如下:
從 上圖中的值,直接對IP地址進行測試,能夠ping通,但是對主機名進行測試,發現沒有ping通,提示"unknown host——未知主機",這時查看"Master.Hadoop"的"/etc/hosts"文件內容會發現裡面沒 有"192.168.1.142 Slave1.Hadoop"內容,故而本機器是無法對機器的主機名為"Slave1.Hadoop" 解析。
在進行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有機器的IP與主機名,這樣Master與所有的Slave機器之間不僅可以通過IP進行通信,而且還可以通過主機名進行通信。所以在所有的機器上的"/etc/hosts"文件中都要添加如下內容:
192.168.1.141 Master.Hadoop
192.168.1.142 Slave1.Hadoop
192.168.1.137 Slave2.Hadoop
現在我們在進行對機器為"Slave1.Hadoop"的主機名進行ping通測試,看是否能測試成功。
從上圖中我們已經能用主機名進行ping通了,說明我們剛纔添加的內容,在區域網內能進行DNS解析了,那麼現在剩下的事兒就是在其餘的Slave機器上進行相同的配置。然後進行測試。
1.4 所需軟體
(1)JDK軟體
下載地址:http://www.oracle.com/technetwork/java/javase/index.html
JDK版本:jdk-7u25-linux-i586.tar.gz
(2)Hadoop軟體
下載地址:http://hadoop.apache.org/common/releases.html
Hadoop版本:hadoop-1.1.2.tar.gz