在通過幾天折騰,終於將hadoop環境搭建成功,整個過程當中遇到各類坑,反覆了不少遍,光虛擬機就從新安裝了四、5次,接下來就把搭建的過程詳細敘述一下html
0.相關工具:java
1,系統環境說明:node
我這邊給出個人集羣環境是由一臺主節點master和2臺從節點slave組成: web
master 192.168.137.122 slave1 192.168.137.123 slave2 192.168.137.124
3個節點上均是CentOS7.0系統apache
2,虛擬機設置windows
這裏用的是 VMware12.1,虛擬CentOS7環境,虛擬機環境配置以下: centos
系統配置:
虛擬機:一個master,slave1, slave2
網絡設置:共享主機IP
內存:每一個虛擬機配置1024M內存
分區:自動
軟件選擇:基礎設施服務器
用戶設置:密碼都設置爲:hadoophadoop, 不建立任何用戶,操做時使用root直接進行
完成VMware安裝後先設置,先在物理機中設置VMnet一、VMnet8 爲自動獲取IP 以下圖所示:緩存
並將3臺虛擬機網絡鏈接方式都設置爲:NAT模式,不然虛擬沒法上網安全
3,環境安裝服務器
插入CentOS7系統盤,選擇第一項進入系統安裝,稍後會彈出設置界面:
這裏咱們把環境設置爲:基礎設施服務器,不然會各類 "command not found..."他提供了,hadoop服務的基礎環境
下面是選擇"安裝位置",這裏我直接默認了,接下來很重要,設置網路和主機名,折騰好了,就不用安裝完系統後在使用命令設置了
主機名的位置,添寫"master",點擊右側"配置",在出現的網絡設置中選擇"IPv4設置",在出現的"方法"中選擇手動,點擊添加,設置"master"對應的IP,出現以下界面:
其他兩臺slave,設置一致,若是虛擬直接拷貝的,可使用下列命令方法設置
1)修改主機名(分別在3臺虛擬機修改成:master、slave一、slave2):
vi /etc/hostname
進入編輯狀態後按"Insert"直接修改主機名,完成後,按"ESC",而後按住Shift 按兩次Z保存退出
2)修改IP地址(分別在3臺虛擬機修改成:192.168.137.122,192.168.137.123,192.168.137.124):
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736(虛擬機的網卡通常默認都是ifcfg-eno16777736)
增長如下內容:
BOOTPROTO=static #設置爲靜態IP ONBOOT=yes #打開網卡 IPADDR=192.168.137.122 #設置IP,對應上面給出的四個IP地址,這裏是master的IP NETMASK=255.255.255.0 #設置子網掩碼 GATEWAY=192.138.137.2 #設置網關
系統安裝完成後須要設置root帳號密碼,這裏我沒有添加新用戶,因此後續設置均經過root帳號完成。
4,配置host
經過下列命令打開hosts文件,修改hosts配置,3臺機器都須要
vi /etc/hosts
加入下列代碼
192.168.137.122 master
192.168.137.123 slave1
192.168.137.124 slave2
在完成以上步驟後reboot重啓3臺虛擬機:reboot
5,SSH無密碼驗證配置
每臺機器能夠生成本身的一對公司鑰,私鑰本身保存。將本機做爲服務器,要經過無密鑰SSH訪問本機的機器做爲客戶端,首先將服務器的公鑰放到客戶端,客戶端將此公鑰放到authorized_keys中,能夠將authorized_keys認爲是公鑰的字典文件,由於能夠放多個服務器的公鑰進去,便可實現無密鑰SSH訪問。
Hadoop運行過程當中,須要管理遠端Hadoop守護進程,在Hadoop啓動之後,NameNode是經過SSH(Secure Shell)來啓動和中止各個DataNode上的各類守護進程的。這就必須在節點之間執行指令的時候是不須要輸入密碼的形式,故咱們須要配置SSH運用無密碼公鑰認證的形式,這樣NameNode使用SSH無密碼登陸並啓動DataName進程,一樣原理,DataNode上也能使用SSH無密碼登陸到NameNode。
在各節點上生成各自SSH祕鑰對(這裏祕鑰類型爲rsa,也能夠設置爲安全性更高的dsa),以master爲例。
建立祕鑰文件使用下列命令
ssh-keygen -t rsa
截圖說明以下:
(參數說明參考:http://killer-jok.iteye.com/blog/1853451)
在本機上生成authorized_keys,並驗證可否對本機進行SSH無密碼登錄
在其他全部節點都生成本身的authorized_keys以後,經過ssh-copy-id命令拷貝各自的公鑰到其餘節點,公鑰會加入到對方機器的authorized_keys文件中,能夠將authorized_keys認爲是公鑰的字典文件,由於能夠放多個服務器的公鑰進去,便可實現無密鑰SSH訪問。下面以slave1節點爲例,將master節點的公鑰複製到slave1節點中並加入到受權的key中,並驗證是否配置成功。
在slave1中生成祕鑰文件
將master節點的公鑰複製到slave1節點中並測試鏈接
在slave中使用 more 查看完成公鑰複製後的文件
6,安裝jdk環境設置
WinSCP是一個很好用的工具能夠在windows物理機與虛擬之間傳遞文件
輸入鏈接虛擬機機的IP,用戶名,密碼,連接成功後,上傳jdk與hadoop到"/usr/local"目錄下(這裏目錄可隨意指定,稍後會登錄到虛擬機解壓安裝)
使用 tar -zvxf jdk-8u91-lunux-x64.tar.gz 解壓
經過mv修改文件夾名稱
配置jdk環境變量
vi /etc/profile
在尾部,加入下面內容:
(固然這裏也可使用WinSCP在windows 中修改。)
保存退出後,執行下列命令 讓更改及時生效
source /etc/profile
而後,執行下列命令驗證安裝成功
java -version
若是顯示的版本與咱們安裝的版本一致,即安裝成功
7,安裝hadoop環境設置
使用 tar -zvxf hadoop-2.7.2.tar.gz 解壓
移動到安裝目錄,我這裏是"home/hadoop",可自定義
配置hadoop環境變量,仍是修改剛剛配置jdk環境變量的文件
vi /etc/profile
在尾部,加入下面內容:
保存退出後,執行下列命令 讓更改及時生效
source /etc/profile
而後,執行下列命令驗證安裝成功
hadoop version
正常會顯示版本信息
配置 ~/hadoop/etc/hadoop下的hadoop-env.sh、yarn-env.sh、mapred-env.sh
使用命令:
vi /home/hadoop/etc/hadoop/hadoop-env.sh
修改JAVA_HOME
使用命令:
vi /home/hadoop/etc/hadoop/yarn-env.sh
修改JAVA_HOME
使用命令:
vi /home/hadoop/etc/hadoop/mapred-env.sh
修改JAVA_HOME
配置系統目錄:Hadoop程序存放目錄爲/home/hadoop/,能夠將程序和數據目錄分開,能夠更加方便的進行配置的同步,具體目錄的配置以下所示:
l 在每一個節點上建立程序存儲目錄/home/hadoop/,用來存放Hadoop程序文件。
l 在每一個節點上建立數據存儲目錄/home/hadoop/hdfs,用來存放集羣數據。
l 在主節點node上建立目錄/home/hadoop/hdfs/name,用來存放文件系統元數據。
l 在每一個從節點上建立目錄/home/hadoop/hdfs/data,用來存放真正的數據。
l 全部節點上的日誌目錄爲/home/hadoop/logs。
l 全部節點上的臨時目錄爲/home/hadoop/tmp。
執行命令mkdir -p /home/hadoop/logs,爲尚未的目錄建立,後面以此類推
8, 修改hadoop配置文件
Hadoop2.7.2配置文件在hadoop/etc/hadoop目錄下,配置文件也被分紅了4個主要的配置文件須要配置其中包含:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。core-site.xml和hdfs-site.xml是站在HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。
core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> <description> 設定 namenode 的 主機名 及 端口 </description> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> <description> 設置緩存大小 </description> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/tmp</value> <description> 存放臨時文件的目錄 </description> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/hdfs/name</value> <description> namenode 用來持續存放命名空間和交換日誌的本地文件系統路徑 </description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/hdfs/data</value> <description> DataNode 在本地存放塊文件的目錄列表,用逗號分隔 </description> </property> <property> <name>dfs.replication</name> <value>3</value> <description> 設定 HDFS 存儲文件的副本個數,默認爲3 </description> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
mapred-site.xml
<configuration> property> <name>mapreduce.framework.name</name> <value>yarn</value> <final>true</final> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>master:50030</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> <property> <name>mapred.job.tracker</name> <value>http://master:9001</value> </property> </configuration>
yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration>
9,設置hadoop集羣
master上配置好的hadoop所在文件夾"/home/hadoop"複製到全部的Slave的"/home"目錄下,而沒必要每臺機器都要安裝設置,用下面命令格式進行。
例如:從"master"到"slave1"複製配置Hadoop的文件:
scp –r /home/hadoop root@slave1:/home/
複製完成後在master上配置節點信息(其他節點不須要),使用下列命令
vi /home/hadoop/etc/hadoop/slaves
去掉"localhost",每行只添加一個主機名或者IP地址
10,格式化HDFS文件系統
輸入命令:
cd /home/hadoop
hadoop namenode -format
若是不出錯大體會顯示以下信息:
次數如產生錯誤,基本都是配置文件的問題,諸如不識別中文,配置文件中指定的路徑不存在,等等,請認真檢查配置文件
11,啓動hadoop服務
cd /home/hadoop sbin/start-all.sh
如無異常顯示以下內容
命令「sbin/stop-all.sh」中止hadoop服務
12,服務驗證
在master應該輸出如下信息(端口號僅供參考)
在slave應該輸出如下信息(端口號僅供參考)
若不顯示DataNode進程,表示DataNode節點啓動失敗,這裏能夠在slave節點中查看日子中的錯誤
more /home/hadoop/logs/hadoop-root-datanode-slave2.log
根據日誌得知 datanode的clusterID 和 namenode的clusterID 不匹配將slave節點中/home/hadoop/hdfs/data/current/VERSION文件中的clusterID 修改成與master中的一致從新啓動服務便可。
先使用下面命令關閉防火牆
systemctl stop firewalld
輸入如下網頁, http://192.168.137.122:50070/dfshealth.html#tab-overview 進入hadoop管理首頁
PS:參考文獻
http://www.cnblogs.com/baiboy/p/4639474.html http://www.tuicool.com/articles/mQfInyZ http://www.centoscn.com/image-text/install/2014/1121/4158.html
http://blog.csdn.net/circyo/article/details/46724335 http://www.cbdio.com/BigData/2016-08/04/content_5156440.htm
http://blog.csdn.net/xw13106209/article/details/6855294