前段時間搭建Hadoop分佈式集羣,踩了很多坑,網上不少資料都寫得不夠詳細,對於新手來講搭建起來會遇到不少問題。如下是本身根據搭建Hadoop分佈式集羣的經驗但願給新手一些幫助。固然,建議先把HDFS和MapReduce理論原理看懂了再來搭建,會流暢不少。html
準備階段:java
系統:Ubuntu Linux16.04 64位 (下載地址:https://www.ubuntu.com/download/desktop)node
安裝好Ubuntu以後,若是以前沒有安裝過jdk,須要先安裝jdk。這裏安裝jdk的版本是:jdk1.8.0_144 (下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 這裏就不展開安裝說明,安裝jdk很簡單,這裏自行百度吧。apache
建議Ubuntu下載64位,由於Hadoop2.5.0以後的版本里面的庫都是64位的,32位的Linux系統裏面每次運行Hadoop都會報警告。ubuntu
如今準備好了一臺安裝了java的Ubuntu虛擬機,別忘了搭建Hadoop集羣至少須要三臺Ubuntu虛擬機。服務器
最簡單的辦法就是 使用VMware自帶的克隆的辦法,克隆出三臺如出一轍的虛擬機。oracle
具體操做參見地址 (https://jingyan.baidu.com/article/6b97984d9798f11ca2b0bfcd.html)ssh
準備好了三臺Ubuntu Linux虛擬機,接下來就開始搭建集羣。分佈式
先總的看一下全部的步驟:oop
1、配置hosts文件
2、創建hadoop運行賬號
3、配置ssh免密碼連入
4、下載並解壓hadoop安裝包
5、配置 /etc/hadoop目錄下的幾個文件及 /etc/profile
6、格式化namenode並啓動集羣
接下來根據步驟開始搭建:
1、配置hosts文件
以上準備了三臺虛擬機,可是虛擬機的主機名也是同樣的,須要現對虛擬機主機名進行修改,來進行區分一個主節點和兩個從節點。
修改主機名命令:
顯示的master就是主機名,我這裏已經修改好了,能夠把三臺虛擬機分別命名 主節點:master 從節點1:node1 從節點2:node2
修改好了,保存便可。
接下來,分別查看三臺虛擬機的ip地址,命令以下:
inet addr就是這臺虛擬機的ip地址。
接下來打開hosts文件 進行修改:
將三臺虛擬機的ip地址和主機名加在裏面,其它的不用動它。
三臺虛擬機都要修改hosts文件。簡單的說配置hosts後三臺虛擬機就能夠進行通訊了,能夠互相ping一下試試,是能夠ping通的。
2、創建hadoop運行賬號
解釋一下這一步驟,就是創建一個group組,而後在三臺虛擬機上從新創建新的用戶,將這三個用戶都加入到這個group中。
如下操做三臺虛擬機都要進行相同操做:
首先添加一個叫hadoop用戶組進來
添加名叫hduser的用戶,並添加到hadoop組中。
接着輸入如下指令而後輸入兩次密碼
而後賦予hduser用戶admin權限
接下來的操做 切換到剛剛新建的用戶進行
3、配置ssh免密碼連入
開始配置ssh以前,先確保三臺機器都裝了ssh。
輸入如下命令查看安裝的ssh。
若是缺乏了opensh-server,須要進行安裝。
安裝完畢以後開始配置ssh
接下來的這第三個步驟的操做請注意是在哪臺主機上進行,不是在三臺上同時進行。
(1)下面的操做在master機上操做
首先在master機上輸入如下命令,生成master機的一對公鑰和私鑰:
如下命令進入認證目錄能夠看到, id_rsa 和 id_rsa.pub這兩個文件,就是咱們剛剛生成的公鑰和私鑰。
而後,下面的命令將公鑰加入到已認證的key中:
再次進入生成目錄,能夠看到多出authorized_keys這個文件:
而後輸入ssh localhost 登陸本機命令,第一次提示輸入密碼,輸入exit退出,再次輸入ssh localhost不用輸入密碼就能夠登陸本機成功,則本機ssh免密碼登陸已經成功。
到這裏是否是已經對ssh免密碼登陸有了認識,不要着急,開始配置node1和node2節點的ssh免密碼登陸,目的是讓master主機能夠不用密碼登陸到node1和node2主機。
(2)這一步分別在node1和node2主機上操做:
將master主機上的is_dsa.pub複製到node1主機上,命名爲node1_dsa.pub。node2主機進行一樣的操做。
將從master獲得的密鑰加入到認證,node2主機進行一樣的操做。
而後開始驗證是否是已經能夠進行ssh免密碼登陸。
(3)在master機上進行驗證
一樣第一次須要密碼,以後exit退出,再ssh node1就不須要密碼登陸成功,說明ssh免密碼登陸配置成功!
若是失敗了,多是前面的認證沒有認證好,能夠將.ssh目錄下的密鑰都刪了從新生成和配置一遍。或者檢查下hosts文件ip地址寫的對不對。
4、下載並解壓hadoop安裝包
版本:Hadoop2.6.0 (下載地址:http://mirrors.hust.edu.cn/apache/hadoop/common/)
建議初學者選擇2.6.0或者2.7.0版本就能夠了,並且若是後面要配置Eclipse開發環境的話,這兩個版本的插件很容易找到,不用本身去編譯。
話很少說,將hadoop壓縮包,解壓到一個文件夾裏面,我這裏解壓到了home文件夾,並修改文件夾名爲hadoop2.6。所在的目錄就是/home/hduser/hadoop2.6
三臺主機都要解壓到相應位置
5、配置 /etc/hadoop目錄下的幾個文件及 /etc/profile
主要有這5個文件須要修改:
~/etc/hadoop/hadoop-env.sh
~/etc/hadoop/core-site.xml
~/etc/hadoop/hdfs-site.xml
~/etc/hadoop/mapred-site.xml
~/etc/hadoop/slaves
/etc/profile
三臺機都要進行這些操做,能夠先在一臺主機上修改,修改完了複製到其它主機就能夠了。
首先是hadoop-env.sh ,添加java安裝的地址,保存退出便可。
而後core-site.cml
解釋下:第一個fs.default.name設置master機爲namenode 第二個hadoop.tmp.dir配置Hadoop的一個臨時目錄,用來存放每次運行的做業jpb的信息。
接下來hdfs-site.xml的修改:
解釋下:dfs.name.dir是namenode存儲永久性的元數據的目錄列表。這個目錄會建立在master機上。dfs.data.dir是datanode存放數據塊的目錄列表,這個目錄在node1和node2機都會建立。 dfs.replication 設置文件副本數,這裏兩個datanode,因此設置副本數爲2。
接下來mapred-site.xml的修改:
解釋下:這裏設置的是運行jobtracker的服務器主機名和端口,也就是做業將在master主機的9001端口執行。
接下來修改slaves文件
這裏將兩臺從主機的主機名node1和node2加進去就能夠了。
最後修改profile文件 ,以下進入profile:
將這幾個路徑添加到末尾:
修改完讓它生效:
檢查下是否能夠看到hadoop版本信息
顯示出了版本信息,若是沒有顯示出來,回過去檢查 profile路徑是否填寫錯誤。
6、格式化namenode並啓動集羣
接下來須要格式化namenode,注意只須要在 master主機上進行格式化。格式化命令以下:
看到successful表示格式化成功。
接下來啓動集羣:
啓動完畢,檢查下啓動狀況: master主機看到四個開啓的進程,node1和node2看到三個開啓的進程表示啓動成功。
若是有疑問或疏漏的地方,歡迎你們指出和討論哈哈!!!