天天看點

Ubuntu叢集上 安裝hadoop-1.2.1

一、引言

Hadoop是一種分布式系統基礎架構,由Apache基金會開發。使用者可以在不了解分布式底層細節的情況下,開發分布式程式,充分利用叢集的威力高速運算和存儲。Hadoop 1.2.1版本下載下傳位址:http://apache.dataguru.cn/hadoop/common/hadoop-1.2.1/

二、準備安裝環境

我的本機是環境是windows8.1系統 +VMvare9虛拟機。VMvare中虛拟了3個ubuntu 12.10的系統,JDK版本為1.7.0_17.叢集環境為一個master,兩個slave,節點代号分别為node1,node2,node3.保證以下ip位址可以互相ping通,并且在/etc/hosts中進行配置

機器名 Ip位址 作用
node1 202.193.74.173 NameNode,JobTraker
node2 202.193.75.231 DataNode,TaskTraker
node3 202.193.74.3 DataNode,TaskTraker

三、安裝環境

1、首先修改機器名

使用root權限,使用指令:

  1. sudo vi /etc/hosts 

其中node1、node2、node3的/etc/hosts配置為:

Ubuntu叢集上 安裝hadoop-1.2.1
Ubuntu叢集上 安裝hadoop-1.2.1
Ubuntu叢集上 安裝hadoop-1.2.1

/etc/hosts的配置很重要,如果配置的不合适會出各種問題,會影響到後面的SSH配置以及Hadoop的DataNode節點的啟動。

2、安裝JDK

Ubuntu下的JDK配置請參考: http://developer.51cto.com/art/200907/135215.htm

3、添加使用者

在root權限下使用以下指令添加hadoop使用者,在三個虛拟機上都添加這個使用者

  1. sudo adduser hadoop 

将下載下傳到的hadoop-1.2.1.tar檔案放到/home/hadoop/目錄下解壓,然後修改解壓後的檔案夾的權限,指令如下:

  1. sudo tar -xvzf hadoop-1.2.1.tar #解壓指令 
  2. chown -R hadoop:hadoop hadoop-1.2.1(檔案夾名) 

4、安裝和配置SSH

4.1)在三台實驗機器上使用以下指令安裝ssh:

  1. sudo apt-get install ssh 

安裝以後執行測試:

  1. netstat -nat  #檢視22端口是否開啟 
  2. ssh localhost #測試ssh是否成功連接配接 

輸入目前使用者名和密碼按回車确認,說明安裝成功,同時ssh登陸需要密碼。

這種預設安裝方式完後,預設配置檔案是在/etc/ssh/目錄下。sshd配置檔案是:/etc/ssh/sshd_config

4.2)配置SSH無密碼通路

在Hadoop啟動以後,Namenode是通過SSH(Secure Shell)來啟動和停止各個datanode上的各種守護程序的,這就須要在節點之間執行指令的時候是不須要輸入密碼的形式,故我們須要配置SSH運用無密碼公鑰認證的形式。

以本文中的三台機器為例,現在node1是主節點,他須要連接配接node2和node3。須要确定每台機器上都安裝了ssh,并且datanode機器上sshd服務已經啟動。

( 說明:[email protected]~]$ssh-keygen  -t  rsa

這個指令将為hadoop上的使用者hadoop生成其密鑰對,詢問其儲存路徑時直接回車采用預設路徑,當提示要為生成的密鑰輸入passphrase的時候,直接回車,也就是将其設定為空密碼。生成的密鑰對id_rsa,id_rsa.pub,預設存儲在/home/hadoop/.ssh目錄下然後将id_rsa.pub的内容複制到每個機器(也包括本機)的/home/dbrg/.ssh/authorized_keys檔案中,如果機器上已經有authorized_keys這個檔案了,就在檔案末尾加上id_rsa.pub中的内容,如果沒有authorized_keys這個檔案,直接複制過去就行.)

4.3)首先設定namenode的ssh為無需密碼自動登陸,

切換到hadoop使用者( 保證使用者hadoop可以無需密碼登入,因為我們後面安裝的hadoop屬主是hadoop使用者。)

  1. su hadoop 
  2. cd /home/hadoop 
  3. ssh-keygen -t rsa 

最後一個指令輸入完成以後一直按回車,

完成後會在/home/hadoop/目錄下産生完全隐藏的檔案夾.ssh,

進入.ssh檔案夾,然後将id_rsa.pub複制到authorized_keys檔案,指令如下,

  1. cd .ssh # 進入.ssh目錄 
  2. cp id_rsa.pub authorized_keys #生成authorized_keys檔案 
  3. ssh localhost  #測試無密碼登陸,第一可能需要密碼 
  4. ssh node1 #同上一個指令一樣 

node1無密碼登陸的效果:

Ubuntu叢集上 安裝hadoop-1.2.1

4.4)配置node1無密碼通路node2和node3

首先以node2為例,node3參照node2的方法

在node2中執行以下指令:

  1. su hadoop 
  2. cd /home/hadoop  
  3. ssh-keygen -t rsa #生成公鑰和私鑰,一路回車 

在node1中進入/home/hadoop/.ssh目錄中,複制authorized_keys到node2的.ssh檔案夾中

執行以下指令

  1. scp authorized_keys h[email protected]:/home/hadoop/.ssh #複制authorized_keys到node2的.ssh目錄中去 
Ubuntu叢集上 安裝hadoop-1.2.1

修改已經傳輸到node2的authorized_keys的許可權限,需要root權限

  1. chmod 644 authorized_keys    
  2. ssh node2 #測試無密碼通路node2   
Ubuntu叢集上 安裝hadoop-1.2.1

node3同上面的執行步驟

5、安裝hadoop

将目前使用者切換到hadoop使用者,如果叢集内機器的環境完全一樣,可以在一台機器上配置好,然後把配置好的軟體即hadoop-0.20.203整個檔案夾拷貝到其他機器的相同位置即可。 可以将Master上的Hadoop通過scp拷貝到每一個Slave相同的目錄下,同時根據每一個Slave的Java_HOME 的不同修改其hadoop-env.sh 。

5.1)配置conf/hadoop-env.sh檔案

切換到hadoop-1.2.1/conf目錄下,添加JAVA_HOME路徑

Ubuntu叢集上 安裝hadoop-1.2.1

5.2)配置/conf/core-site.xml

  1. <?xml version="1.0"?>   
  2. <?xml-stylesheet type="text/xsl"href="configuration.xsl"?>   
  3. <configuration>   
  4. <property>   
  5.  <name>fs.default.name</name>   
  6.   <value>hdfs://node1:49000</value>   
  7. </property>   
  8. <property>   
  9.   <name>hadoop.tmp.dir</name>   
  10.  <value>/home/hadoop/hadoop_home/var</value>   
  11. </property>   
  12. </configuration>   

fs.default.name是NameNode的URI。hdfs://主機名:端口/

hadoop.tmp.dir :Hadoop的預設臨時路徑,這個最好配置,如果在新增節點或者其他情況下莫名其妙的DataNode啟動不了,就删除此檔案中的tmp目錄即可。不過如果删除了NameNode機器的此目錄,那麼就需要重新執行NameNode格式化的指令。

5.3)配置/conf/mapred-site.xml

  1. <?xmlversionxmlversionxmlversionxmlversion="1.0"?>   
  2. <?xml-stylesheettypexml-stylesheettypexml-stylesheettypexml-stylesheettype="text/xsl" href="configuration.xsl"?>   
  3. <configuration>   
  4. <property>   
  5.   <name>mapred.job.tracker</name>   
  6.   <value>node1:49001</value>   
  7. </property>   
  8. <property>   
  9.   <name>mapred.local.dir</name>   
  10.  <value>/home/hadoop/hadoop_home/var</value>   
  11. </property>   
  12. </configuration>   

mapred.job.tracker是JobTracker的主機(或者IP)和端口。主機:端口。其中/home/hadoop/hadoop_home/var目錄需要提前建立,并且注意用chown -R 指令來修改目錄權限

5.4)配置/conf/hdfs-site.xml

  1. <?xmlversionxmlversionxmlversionxmlversion="1.0"?>   
  2. <?xml-stylesheettypexml-stylesheettypexml-stylesheettypexml-stylesheettype="text/xsl" href="configuration.xsl"?>   
  3. <configuration>   
  4. <property>   
  5. <name>dfs.name.dir</name>   
  6. <value>/home/hadoop/name1</value> #hadoop的name目錄路徑   
  7. <description>  </description>   
  8. </property>   
  9. <property>   
  10. <name>dfs.data.dir</name>   
  11. <value>/home/hadoop/data1</value>   
  12. <description> </description>   
  13. </property>   
  14. <property>   
  15.   <name>dfs.replication</name>   
  16.   <!-- 我們的叢集又兩個結點,是以rep兩份 -->   
  17.   <value>2</value>   
  18. </property>   
  19. </configuration>   

dfs.name.dir是NameNode持久存儲名字空間及事務日志的本地檔案系統路徑。 當這個值是一個逗号分割的目錄清單時,nametable資料将會被複制到所有目錄中做備援備份。

dfs.replication是資料需要備份的數量,預設是3,如果此數大于叢集的機器數會出錯。

此處的name1和data1等目錄不能提前建立,如果提前建立會出問題。

5.5)配置master和slaves主從節點

配置conf/masters和conf/slaves來設定主從結點,注意最好使用主機名,并且保證機器之間通過主機名可以互相通路,每個主機名一行。

vi masters:

輸入:

node1

vi slaves:

輸入:

node2

node3

配置結束,把配置好的hadoop檔案夾拷貝到其他叢集的機器中,并且保證上面的配置對于其他機器而言正确,

  1. scp -r /home/hadoop/hadoop-1.2.1 [email protected]:/home/hadoop/ #輸入node2的root密碼即可傳輸,如果java安裝路徑不一樣,需要修改conf/hadoop-env.sh 

安裝結束

四、Hadoop啟動與測試

1、格式化一個新的分布式檔案系統

  1. cd hadoop-1.2.1   
  2. bin/hadoop namenode -format #格式化檔案系統  

成功的情況下輸入一下(我的hadoop已經使用,不想重新格式化選擇了No)

Ubuntu叢集上 安裝hadoop-1.2.1

2、啟動所有節點

  1. bin/start-all.sh 
Ubuntu叢集上 安裝hadoop-1.2.1

3、檢視叢集的狀态:

  1. hadoop dfsadmin -report 
Ubuntu叢集上 安裝hadoop-1.2.1

4、Hadoop測試

浏覽NameNode和JobTracker的網絡接口,它們的位址預設為:

NameNode - http://node1:50070/

JobTracker - http://node1:50030/

Ubuntu叢集上 安裝hadoop-1.2.1
Ubuntu叢集上 安裝hadoop-1.2.1

要想檢查守護程序是否正在運作,可以使用 jps 指令(這是用于 JVM 程序的ps 實用程式)。這個指令列出 5 個守護程序及其程序辨別符。

将輸入檔案拷貝到分布式檔案系統:

  1. bin/hadoop fs -mkdir input #建立input目錄   
  2. bin/hadoop fs -put conf/core-site.xml input #拷貝檔案到input目錄   
  3. bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z]' #使用Hadoop運作示例  
Ubuntu叢集上 安裝hadoop-1.2.1

到此為止,hadoop已經配置完成,當然在配置的過程中會遇到各種錯誤,主要都是權限問題和網絡ip配置問題,請注意。

五、Hadoop一些常用的操作指令

1、hdfs常用操作:

hadoopdfs -ls 列出HDFS下的檔案

hadoop dfs -ls in 列出HDFS下某個文檔中的檔案

hadoop dfs -put test1.txt test 上傳檔案到指定目錄并且重新命名,隻有所有的DataNode都接收完資料才算成功

hadoop dfs -get in getin 從HDFS擷取檔案并且重新命名為getin,同put一樣可操作檔案也可操作目錄

hadoop dfs -rmr out 删除指定檔案從HDFS上

hadoop dfs -cat in/* 檢視HDFS上in目錄的内容

hadoop dfsadmin -report 檢視HDFS的基本統計資訊,結果如下

hadoop dfsadmin -safemode leave 退出安全模式

hadoop dfsadmin -safemode enter 進入安全模式

2、負載均衡

start-balancer.sh,可以使DataNode節點上選擇政策重新平衡DataNode上的資料塊的分布。

祝大家能夠順利配置好hadoop運作環境,有問題可以留言一起探讨。

繼續閱讀