在經過幾天折騰,終於將hadoop環境搭建成功,整個過程中遇到各種坑,反復了很多遍,光虛擬機就重新安裝了4、5次,接下來就把搭建的過程詳細敘述一下
0.相關工具:
1,系統環境說明:
我這邊給出我的集群環境是由一台主節點master和2台從節點slave組成:
master 192.168.137.122 slave1 192.168.137.123 slave2 192.168.137.124
3個節點上均是CentOS7.0系統
2,虛擬機設置
這里用的是 VMware12.1,虛擬CentOS7環境,虛擬機環境配置如下:
系統配置:
虛擬機:一個master,slave1, slave2
網絡設置:共享主機IP
內存:每個虛擬機配置1024M內存
分區:自動
軟件選擇:基礎設施服務器
用戶設置:密碼都設置為:hadoophadoop, 不創建任何用戶,操作時使用root直接進行
完成VMware安裝后先設置,先在物理機中設置VMnet1、VMnet8 為自動獲取IP 如下圖所示:
並將3台虛擬機網絡連接方式都設置為:NAT模式,否則虛擬無法上網
3,環境安裝
插入CentOS7系統盤,選擇第一項進入系統安裝,稍后會彈出設置界面:
這里我們把環境設置為:基礎設施服務器,否則會各種 "command not found..."他提供了,hadoop服務的基礎環境
下面是選擇"安裝位置",這里我直接默認了,接下來很重要,設置網路和主機名,折騰好了,就不用安裝完系統后在使用命令設置了
主機名的位置,添寫"master",點擊右側"配置",在出現的網絡設置中選擇"IPv4設置",在出現的"方法"中選擇手動,點擊添加,設置"master"對應的IP,出現如下界面:
其余兩台slave,設置一致,如果虛擬直接拷貝的,可以使用下列命令方法設置
1)修改主機名(分別在3台虛擬機修改為:master、slave1、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,服務驗證
- java自帶的小工具jps查看進程
在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