Hadoop學習4--安裝Hadoop


首先獻上Hadoop下載地址:

http://apache.fayea.com/hadoop/core/

選擇相應版本,點一下,直接進行http下載了。

 對原來寫的一篇文章,相當不滿意,過於粗糙了,於是刪除重新再來。言歸正傳:

題前說明:

我一共三台機器,機器名分別是:

master

slave1

slave2

登錄名統一是:master

我先在master機器上執行以下操作:

一、解壓縮

這里需要說明下,根據網上的教程,解壓縮后,把文件copy到/usr/目錄下。在master機器啟動的時候,一直提示,對於slave1和slave2機器操作無權限,類似於下面的提示:

slave2: /usr/hadoop/sbin/hadoop-daemon.sh: line 178: /usr/hadoop/logs/hadoop-master-datanode-slave2.out: Permission denied

個人分析,/usr目錄的所有者是root,而我安裝hadoop的賬戶是master(ps:這個名字起的有點糟糕,和主機器名重了),這樣,盡管里面的hadoop目錄的所有者是master,也訪問失敗。於是我把hadoop目錄整個移到了~/work文件夾下(work是自己建的目錄)。所以,個人建議,還是把工作目錄建在個人目錄下,比較不容易出現權限類的問題,當然,僅僅針對我這種linux新手來說的。

tip:

解壓縮命令:tar -zxvf hadoop-2.7.0.tar.gz 

解壓出來的文件是hadoop-2.7.0

copy命令:cp -r hadoop-2.7.0 ~/work/hadoop 這里直接重命名為hadoop

二、創建工作文件夾

一共三個,我建在了~/hadoop/這個文件夾下,便於管理:

附命令:

cd ~/hadoop

mkdir tmp

mkdir -p dfs/name

cd dfs

mkdir data

三、重頭戲,配置

從教程里看到一共有以下7個文件,目前還不了解他們的作用,后續補充:

~/work/hadoop/etc/hadoop/hadoop-env.sh
~/work/hadoop/etc/hadoop/yarn-env.sh
~/work/hadoop/etc/hadoop/slaves
~/work/hadoop/etc/hadoop/core-site.xml
~/work/hadoop/etc/hadoop/hdfs-site.xml
~/work/hadoop/etc/hadoop/mapred-site.xml
~/work/hadoop/etc/hadoop/yarn-site.xml
逐個解決:
1、vi ~/work/hadoop/etc/hadoop/hadoop-env.sh
查找JAVA_HOME,命令是 /export JAVA_HOME和?export JAVA_HOME一個向下查找,一個向上查找。
找到后,把值改為你的jdk的安裝目錄,我的在系列文章第二篇里講過。路徑是:/usr/lib/jvm/jdk1.8.0_60
需要注意的是,這個配置不用加引號,完整狀態是這樣: export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_60

2、vi ~/work/hadoop/etc/hadoop/yarn-env.sh

配置內容同1,略。

3、vi ~/work/hadoop/etc/hadoop/slaves

把作為datanode的機器名加上,我這里是兩台機器:

slave1

slave2

4、vi ~/work/hadoop/etc/hadoop/core-site.xml

這里要吐槽一下,gedit命令不能用,這個vi編輯好累。

 1 <configuration>
 2        <property>
 3                 <name>fs.defaultFS</name>
 4                 <value>hdfs://master:8020</value>
 5        </property>
 6        <property>
 7                 <name>io.file.buffer.size</name>
 8                 <value>131072</value>
 9         </property>
10        <property>
11                <name>hadoop.tmp.dir</name>
12                <value>file:/home/master/hadoop/tmp</value>
13                <description>Abase for other temporary   directories.</description>
14        </property>
15         <property>
16                <name>hadoop.proxyuser.master.hosts</name>
17                <value>*</value>
18        </property>
19        <property>
20                <name>hadoop.proxyuser.master.groups</name>
21                <value>*</value>
22        </property>
23 </configuration>
View Code

tip:

1)第三個節點value,是我在上面步驟二創建的目錄之一,/home/master/hadoop/tmp

2)第四、五節點,name里,有我登錄用戶名master,你使用自己的名字替換即可。

5、vi ~/work/hadoop/etc/hadoop/hdfs-site.xml

 1 <configuration>
 2        <property>
 3                 <name>dfs.namenode.secondary.http-address</name>
 4                <value>master:9001</value>
 5        </property>
 6      <property>
 7              <name>dfs.namenode.name.dir</name>
 8              <value>file:/home/master/hadoop/dfs/name</value>
 9        </property>
10       <property>
11               <name>dfs.datanode.data.dir</name>
12               <value>file:/home/master/hadoop/dfs/data</value>
13        </property>
14        <property>
15                <name>dfs.replication</name>
16                <value>3</value>
17         </property>
18         <property>
19                  <name>dfs.webhdfs.enabled</name>
20                   <value>true</value>
21          </property>
22 </configuration>
View Code

tip:

1)第二、三個節點里的value值,是在步驟二創建的另外兩個工作目錄

2)還有個節點value值是3,代表目前我搭建的是由三台機器組成的集群。

6、vi ~/work/hadoop/etc/hadoop/mapred-site.xml

 1 <configuration>
 2           <property>                                                                  <name>mapreduce.framework.name</name>
 3                 <value>yarn</value>
 4            </property>
 5           <property>
 6                   <name>mapreduce.jobhistory.address</name>
 7                   <value>master:10020</value>
 8           </property>
 9           <property>
10                 <name>mapreduce.jobhistory.webapp.address</name>
11                 <value>master:19888</value>
12        </property>
13 </configuration>
View Code

沒有什么可說的,copy自網絡,且不需要修改。

7、vi ~/work/hadoop/etc/hadoop/yarn-site.xml

 1 <configuration>
 2         <property>
 3                <name>yarn.nodemanager.aux-services</name>
 4                <value>mapreduce_shuffle</value>
 5         </property>
 6         <property>                                                                
 7 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
 8                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 9         </property>
10         <property>
11                <name>yarn.resourcemanager.address</name>
12                <value>master:8032</value>
13        </property>
14        <property>
15                <name>yarn.resourcemanager.scheduler.address</name>
16                <value>master:8030</value>
17        </property>
18        <property>
19             <name>yarn.resourcemanager.resource-tracker.address</name>
20              <value>master:8031</value>
21       </property>
22       <property>
23               <name>yarn.resourcemanager.admin.address</name>
24                <value>master:8033</value>
25        </property>
26        <property>
27                      <name>yarn.resourcemanager.webapp.address</name>
28                <value>master:8088</value>
29        </property>
30 </configuration>
View Code

Ctrl+C+V即可。

至此,主要配置工作已經完成,如果說,其他機器還要重復步驟一到步驟三,相信會直接崩潰,想想吧,大公司那幾千台的機器。

幸好,咱們有跨機器拷貝方案:

scp ~/work/hadoop master@slave1:~/work/

scp ~/work/hadoop master@slave2:~/work/

兩個命令搞定,是不是很簡單?

后續我們在修改各種配置文件的時候,都可以考慮使用這個命令。

四、接下來要逐台機器配置環境變量,也就是PATH

vi /etc/enviroment (這個單詞太長,記不住,只要輸入到en的時候按Tab,就會自動補全了)

在打開的編輯器中,PATH值結尾處,加上如下內容:

/home/master/work/hadoop/bin:/home/master/work/hadoop/sbin

 

再提醒一句,是每台機器都執行,貌似還可以用這個方式來做這個工作:

PATH=“$PATH”:/home/master/work/hadoop/bin:/home/master/work/hadoop/sbin

 

五、收獲的季節來了,開始驗證:

tip:以下步驟只需要在mater機器執行。

1、格式化文件系統hdfs:這個相信Hadoop實戰這本書誤導了每一個新手:

原命令是:bin/Hadoop NameNode -format

執行直接報錯:

Error: Could not find or load main class NameNode

其實就是大小寫沒處理好,如下命令正確:

bin/hadoop namenode -format

 

2、啟動:/bin/start-all.sh

如果你真按這個命令來,那就中招了。

吐槽一下,是我買的這本書太老呢還是Hadoop變化太快?

現在,大部分命令都在/sbin里面,崩潰不?

所以,要在這個目錄下執行啟動命令:

sbin/star-all.sh

執行這個命令,會提醒過時還是什么的,那么也可以按他建議的來執行,無傷大雅:

sbin/start-dfs.sh

3、檢查是否成功

看着是都起來了,不過在驗證的時候,出現了問題:

http://localhost:50030打不開,目前沒找到原因,有人說是不使用這個端口了,但是現在尚未看到官方的東西,不能下結論。

http://localhost:50070可以打開頁面

 

4、看來靠這種方式驗證不是很靠譜,於是查到用下列方式:jps命令(建議啟動后執行一次這個檢查)

如果你執行jps提示沒有,那是因為你的jdk替換了系統原有的jdk,路徑變了,而這個變化沒在PATH里維護,所以,不是想在哪都能執行成功的,兩種使用方式:

1)、進到jdk安裝目錄下執行:jps

2)、配置PATH:PATH=“$PATH”/usr/lib/jvm/jdk1.8.0_60/bin

推薦這個,會麻煩一次,以后各種方便,其中$PATH 后的內容是我的jdk安裝路徑。

共有6個服務。

 再次在master執行jps,得到以下結果:

3937 NameNode
4778 NodeManager
4300 SecondaryNameNode
5119 Jps

在slave1,和slave2分別執行jps,得到以下結果:

5158 DataNode
5243 Jps

 

至此,折騰了好久好久的安裝學習,終於大功告成,必須慶祝下,晚上去小酌一杯!

 

以下是安裝過程驗證中遇到的一個問題,僅作參考,不一定每個人都能遇到:

排查解決步驟:

1)http://localhost:50070 可以看到一些狀態、日志

a.Overview:是dfs的健康狀態。

b.Utilities下的Logs:查看Hadoop啟動及運行的日志

2015-09-02 01:17:37,962 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/data1: namenode clusterID = CID-c7970b3b-e127-4054-ba7b-7736183904d2; datanode clusterID = CID-4b42cd9e-35ec-4194-b516-d4de4055c35b
2015-09-02 01:17:37,977 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /usr/local/hadoop/data2/in_use.lock acquired by nodename 6889@ubuntu
2015-09-02 01:17:37,978 WARN org.apache.hadoop.hdfs.server.common.Storage: org.apache.hadoop.hdfs.server.common.InconsistentFSStateException: Directory /usr/local/hadoop/data2 is in an inconsistent state: cluster Id is incompatible with others.
2015-09-02 01:17:37,980 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to localhost/127.0.0.1:9000. Exiting. 
java.io.IOException: All specified directories are failed to load.
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1387)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1352)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:316)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:852)
at java.lang.Thread.run(Thread.java:745)

提醒連個cid不一致,原因是Hadoop啟動后,在使用格式化namenode,會導致datanode和namenode的clusterID不一致

這個ID的位置這么找:

先找到/etc/hadoop/hdfs-site.xml

里面有datanode的路徑,在那個路徑下找:/current/VERSION文件,即可修改clusterID

我是這樣處理的,我把配置文件改為完全按教程的要求,如下,也消除了上面的錯誤:

<configuration> 
<property> 
<name>dfs.replication</name> 
<value>1</value> 
</property> 
</configuration>

 

執行jps

顯示正常了:

root@ubuntu:/usr/lib/jvm/jdk1.8.0_60/bin# jps
8736 NameNode
9141 ResourceManager
9926 DataNode
8983 SecondaryNameNode
10156 Jps
10125 GetConf

 

更詳細的驗證當前的各個服務的狀態方法:

http://www.aboutyun.com/thread-7712-1-1.html

 

 

tip:

重新格式化重啟后,發現namenode啟動失敗

再次格式化,再次重啟,發現所有datanode啟動失敗

解決辦法:

1、刪除了步驟二創建的文件夾里產生的內容,具體是dfs/data里的內容

2、刪除了日志文件

不清楚原因,初步估計是第1步起了作用,后續繼續觀察。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM