Hadoop安裝配置

硬件環境

共有3臺機器,ubuntu 10.04和9.10系統,Java使用的是jdk1.6.0。IP配置如下:

ingteam:192.168.0.1

ing-1:192.168.0.101

ing-2:192.168.0.102

前提:ssh rsync jdk1.6

$sudo apt-get install ssh

$sudo apt-get install rsync 

$sudo apt-get install sun-java6-jdk

 ps:Ubuntu 10.04 LTS弄走了sun-java6-jdk,只有openjdk

ubuntu 10.04安裝sun-java6-jdk

$sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

然後update再安裝

務必確保每臺機器的主機名和IP地址之間能正確解析

一個很簡單的測試辦法就是ping一下主機名,若不能正確解析,可以修改/etc/hosts文件,如果該臺機器作Namenode用,則需要在hosts文件中加上集羣中所有機器的IP地址及其對應的主機名;如果該臺機器作Datanode用,則只需要在hosts文件中加上本機IP地址和Namenode機器的IP地址。

以本文爲例,ingteam中的/etc/hosts文件看起來就應該是這樣的:

127.0.0.0       localhost    

192.168.0.1     ingteam

192.168.0.101   ing-1     

192.168.0.102   ing-2

ing-1中的/etc/hosts文件看起來就應該是這樣的:

127.0.0.0       localhost

192.168.0.1     ingteam

192.168.0.101   ing-1   

對於Hadoop來說,在HDFS看來,節點分爲Namenode和Datanode,其中Namenode只有一個,Datanode可以是很多;在MapReduce看來,節點又分爲Jobtracker和Tasktracker,其中Jobtracker只有一個,Tasktracker可以是很多。

我是將namenode和jobtracker部署在ingteam上,ing-1,ing-2作爲datanode和tasktracker。由於Hadoop要求所有機器上hadoop的部署目錄結構要相同,並且都有一個相同的用戶名的帳戶。 

SSH免密碼設置

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

首先在ingteam上生成密鑰對:

$ssh-keygen  -t  rsa

這個命令將爲ingteam上的用戶ingteam生成其密鑰對,詢問其保存路徑時直接回車採用默認路徑,當提示要爲生成的密鑰輸入passphrase的時候,直接回車,也就是將其設定爲空密碼。生成的密鑰對id_rsa,id_rsa.pub,默認存儲在/home/ingteam/.ssh目錄下。然後將id_rsa.pub的內容複製到每個機器(也包括本機)的/home/ingteam/.ssh/authorized_keys文件中,如果機器上已經有authorized_keys這個文件了,就在文件末尾加上id_rsa.pub中的內容,如果沒有authorized_keys這個文件,直接cp或者scp就好了,下面的操作假設各個機器上都沒有authorized_keys文件。

[ingteam@ingteam:.ssh]$scp authorized_keys ing-1:/home/ingteam/.ssh/

[ingteam@ing-2:.ssh]$chmod 644 authorized_keys

這一步非常關鍵,必須保證authorized_keys只對其所有者有讀寫權限,其他人不允許有寫的權限,否則SSH是不會工作的。

接着,在三臺機器上都需要對sshd服務進行配置(其實是可以不用配置的,完成了上面的那些操作了以後SSH就已經可以工作了)

至此各個機器上的SSH配置已經完成,可以測試一下了,比如ingteam向dbrg-2發起ssh連接

[ingteam@ingteam:~]$ssh  ing-1

不過,別忘了測試本機ssh  ingteam

環境的配置

  在$HADOOP_HOME/conf/hadoop-env.sh中定義了Hadoop啓動時需要的環境變量設置,其中我們至少需要配置JAVA_HOME(Jdk的路徑)變量;另外我們一般還需要更改HADOOP_LOG_DIR(Hadoop的日誌路徑)這個變量,默認的設置是“export HADOOP_LOG_DIR=${HADOOP_HOME}/logs”,一般需要將其配置到一個磁盤空間比較大的目錄下。

我的是這樣設置的

export  JAVA_HOME=/usr/lib/jvm/java-6-sun

Hadoop核心代碼需要配置conf文件夾裏面的core-site.xml,hdfs-site.xml,mapread-site.xml,mapred-site.xml,hadoop-env.sh這幾個文件。具體各個配置的含義請參考Hadoop幫助文檔。

    1.首先編輯各個機器節點(包括master和slave)的core-site.xml文件,命令如下:(Hadoop 文件夾放在home下)

  1. <?xml version="1.0"?> 
  2.  
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4.  
  5. <!-- Put site-specific property overrides in this file. --> 
  6.  
  7. <configuration> 
  8.  
  9. <property> 
  10.  
  11.     <name>fs.default.name</name> 
  12.  
  13.     <value>hdfs://192.168.0.1:9000</value> 
  14.  
  15.  </property> 
  16.  
  17. </configuration> 

 2.其次編輯各個機器節點(包括master和slave)的hdfs-site.xml,命令如下:

  1. <?xml version="1.0"?> 
  2.  
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4.  
  5. <!-- Put site-specific property overrides in this file. --> 
  6.  
  7. <configuration> 
  8.  
  9.  <property> 
  10.  
  11.  <name>dfs.name.dir</name> 
  12.  
  13.  <value>/home/hadoop/NameData</value> 
  14.  
  15.  </property> 
  16.  
  17.  <property> 
  18.  
  19.  <name>dfs.permissions</name> 
  20.  
  21.  <value>false</value> 
  22.  
  23.  </property> 
  24.  
  25.  <property> 
  26.  
  27.  <name>dfs.replication</name> 
  28.  
  29.  <value>1</value> 
  30.  
  31.  </property> 
  32.  
  33. </configuration> 

3.再次,編輯各個機器節點(包括master和slave)mapred-site.xml文件,命令如下:

  1. <?xml version="1.0"?> 
  2.  
  3. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 
  4.  
  5. <!-- Put site-specific property overrides in this file. --> 
  6.  
  7. <configuration> 
  8.  
  9. <property> 
  10.  
  11. <name>mapred.job.tracker</name> 
  12.  
  13. <value>192.168.0.1:9001</value> 
  14.  
  15. </property> 
  16.  
  17. </configuration> 

Masters/Slave文件配置

在master主機上的hadoop/conf/目錄下,打開master 文件,把master 主機名添加進去:

192.168.0.1

在master主機上的hadoop/conf/目錄下,打開slaves文件,該文件用來指定所有的從節點,一行指定一個主機名,因此slaves文件看起來應該是這樣的 

192.168.0.101

192.168.0.102

部署Hadoop

前面講的這麼多Hadoop的環境變量和配置文件都是在dbrg-1這臺機器上的,現在需要將hadoop部署到其他的機器上,保證目錄結構一致。

$scp  -r  /home/hadoop  ing-1:/home/

$scp  -r  /home/hadoop  ing-2:/home/

至此,可以說,Hadoop已經在各個機器上部署完畢了下面就讓我們開始啓動Hadoop

啓動Hadoop

啓動之前,我們先要格式化namenode,先進入~/HadoopInstall/hadoop目錄,執行下面的命令

$bin/hadoop  namenode  -format

不出意外,應該會提示格式化成功。如果不成功,就去hadoop/logs/目錄下去查看日誌文件

下面就該正式啓動hadoop啦,在bin/下面有很多啓動腳本,可以根據自己的需要來啓動。

* start-all.sh 啓動所有的Hadoop守護。包括namenode, datanode, jobtracker, tasktrack

* stop-all.sh 停止所有的Hadoop

* start-mapred.sh 啓動Map/Reduce守護。包括Jobtracker和Tasktrack

* stop-mapred.sh 停止Map/Reduce守護

* start-dfs.sh 啓動Hadoop DFS守護.Namenode和Datanode

* stop-dfs.sh 停止DFS守護

在這裏,簡單啓動所有守護

$bin/start-all.sh

同樣,如果要停止hadoop,則

$bin/stop-all.sh

HDFS操作

運行bin/目錄的hadoop命令,可以查看Haoop所有支持的操作及其用法,這裏以幾個簡單的操作爲例。

建立目錄

$bin/hadoop  dfs  -mkdir  testdir

在HDFS中建立一個名爲testdir的目錄

複製文件

$bin/hadoop  dfs  -put  /home/dbrg/large.zip  testfile.zip

把本地文件large.zip拷貝到HDFS的根目錄/user/dbrg/下,文件名爲testfile.zip

查看現有文件

$bin/hadoop  dfs  -ls

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章