在看這一篇之前請先看:http://www.reibang.com/p/bcb2f77d90e8 單機搭建Hadoop 保證可以熟悉hadoop的單機配置澈缺,這樣不至于無腦粘貼xml文件內容導致各種問題停撞。這邊單機部署采用的是hadoop3這邊我們回歸到hadoop2.7去搭集群侮穿,其實都一樣瘫拣。
1.準備
本次要求準備三臺服務器搏明,這邊演示使用VMware開了三個環(huán)境亚再。
192.168.20.3 Master
192.168.20.4 Slave1
192.168.20.5 Slave2
這里要說一下郭膛,首先三個環(huán)境都要有一個相同名字的用戶,我創(chuàng)建了hadoop用戶氛悬,并互相配置好互信则剃。
我們一步一步進行。
在Master/Slave1/Slave2的環(huán)境如捅,執(zhí)行命令sudo vim /etc/hosts
然后創(chuàng)建hadoop用戶棍现,我再Master已經有hadoop用戶了,這邊在Salve1和Slave2創(chuàng)建镜遣。原因就是如果我們不使用相同名字的用戶己肮,ssh配置會比較麻煩,很容易用自身用戶名去做另外機器的用戶名悲关,從而出現用戶無權限的問題谎僻。
具體創(chuàng)建方法:
root權限下分別執(zhí)行
adduser hadoop
passwd hadoop
然后visudo
修改一下內容,給hadoop用戶權限寓辱。
然后配置互信艘绍,執(zhí)行ssh-keygen -t rsa
創(chuàng)建目錄,和之前一樣秫筏,這里不做贅述诱鞠。唯一要提醒的一點是:
ssh 對目錄的權限有要求,代碼中要設置下新生成的config文件權限才行这敬。
~目錄權限是750航夺,~/.ssh 的是700, ~/.ssh/* 的是600崔涂,~/.ssh/config 是700
否則容易出現權限問題阳掐。
配置好了之后,三臺機器兩兩互信∶常可以采用兩種方式:
1.ssh-copy-id -i
2.直接互相把ras.pub的內容粘貼到 authorized_keys 文件中觅闽。
都可以,我用的第二種涮俄,比較暴力蛉拙,注意,一定要看好用戶3骨住T谐!別問我怎么知道的苞尝。
配置好了檢查一下畸肆,如果互相可以ssh ip date
就證明成功啦!比如在Master進行 ssh Slave1 date
第一次要寫個yes再回車宙址,等第二次就可以直接不輸入密碼得到結果了轴脐。這樣準備工作就完成了。
2.正式搭建
集群和單機的區(qū)別就是準備工作稍微復雜一些抡砂。其他的差不多大咱,我們把Master作為主節(jié)點,NameNode和ResourceManager都在主節(jié)點上注益,這邊我把Secondary NameNode也放在主節(jié)點上了碴巾。Slave1和Salve2作為從節(jié)點,主要運行NodeManager和DataNode丑搔。
簡單解釋一下:
- NameNode:主要是管理文件系統(tǒng)的命名空間厦瓢,維護文件系統(tǒng)樹和文件與目錄。這些信息以兩個文件形式永久保存在本地磁盤上:命名空間鏡像文件和日志編輯文件啤月。應該放在主節(jié)點上煮仇。
- DataNode:文件系統(tǒng)的工作節(jié)點。他們需要儲存并檢索數據塊顽冶,并且定期向NameNode發(fā)送他們所儲存的塊的列表欺抗。適合放在Slave節(jié)點上售碳。
- Secondary NameNode:輔助NameNode强重,它不能當作NameNode。定期合并編輯日志與命名空間鏡像贸人,防止編輯日志過大间景,一般單獨的物理機上運行,當然也可以放主節(jié)點上艺智。
- ResourceManager:基于程序對資源的需求進行調度倘要,是一個中心服務,做的工作就是去調度、啟動每一個 Job 所屬的 ApplicationMaster封拧、另外監(jiān)控 ApplicationMaster 的存在情況志鹃。放主節(jié)點上。
- NodeManager:是每臺機器框架代理泽西,是執(zhí)行應用程序的容器曹铃,監(jiān)控應用程序資源的使用情況(CPU,內存捧杉,硬盤陕见,網絡)。然后向調度器也就是ResourceManager進行匯報味抖。
好了评甜!我們現在Master機器上搞事情!
在hadoop目錄下仔涩,創(chuàng)建一個dfs目錄忍坷,里面創(chuàng)建三個文件夾,分別是name熔脂、data承匣、namesecondary
如果完成過之前帖子的單機部署那么我們需要,清理一下里面的current文件夾锤悄,直接刪掉就ok韧骗。防止因為Version問題導致的不同步從而無法啟動。
我又創(chuàng)建了一個tmp文件夾
hadoop下目錄結構應該是這樣的:
好的零聚,那么我們去etc/hadoop目錄下去依次修改配置文件袍暴!
再一次注意!里面的路徑和端口號不要無腦粘貼隶症,請根據自己具體的路徑去配置政模。
首先修改的是hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/soft/hadoop-2.7.1/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/soft/hadoop-2.7.1/dfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
</configuration>
然后是core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop-2.7.1/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
</configuration>
然后是mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
然后是yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
最后是slaves文件
Slave1
Slave2
好的!蚂会!這樣Master就配置好了A苎!胁住!接下來就是配置Slave1和Slave2的時間了趁猴!我們可以采用簡單暴力的方式去搞。直接把Master的hadoop文件夾傳過去彪见!對儡司!就是直接傳過去就行了,啥都不用改余指。
執(zhí)行一下hdfs namenode -format
格式化
如果成功了證明沒啥問題捕犬,直接啟動所有!start-all.sh
等待之后我們用jps
指令看一下
Master:
Slave1:
Slave2:
證明節(jié)點都正常。去web ui去看一下是否真正常碉碉。
我是去Master的50070端口查看
點擊Datanodes選項卡可以看到:
可以看到Slave1和Slave2的DataNode也都真實存在柴钻,證明集群部署成功!可以使用啦~垢粮!
PS:如果最后結果不正常顿颅,請分別查看hadoop的logs文件夾下的日志文件。會有錯誤提示足丢。
---------------------------------------分割線-------------------------------------------------
當時寫的太粗糙了粱腻,其實啟動應該按照hdfs和yarn分別啟動這樣的方式。
hdfs就用 start-dfs.sh
yarn用start-yarn.sh
因為ResourceManager不一定會配置在Master上斩跌,如果在Slave1上绍些,我們必須去Slave啟動yarn,否則會執(zhí)行失敗耀鸦。
還有一點柬批,我們需要啟動jobhistoy去看日志。這一點要配置mapred-site.xml配置文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 設置jobhistoryserver 沒有配置的話 history入口不可用 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<!-- 配置web端口 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
<!-- 配置正在運行中的日志在hdfs上的存放路徑 -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value>
</property>
<!-- 配置運行過的日志存放在hdfs上的存放路徑 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
</configuration>
然后使用指令:
./mr-jobhistory-daemon.sh start historyserver
啟動袖订,當然停止就換成stop
我們以后就可以通過master:19888 去查詢歷史日志了氮帐。