hadoop部署安裝

參考博文http://www.cnblogs.com/wayne1017/archive/2007/03/20/678724.html 

硬件環境

共有2臺機器,均使用的centos5.7系統,Java使用的是jdk1.7.0。IP配置如下:
centos1:10.0.9.101
centos2:10.0.9.102
這裏有一點需要強調的就是,務必要確保每臺機器的主機名和IP地址之間能正確解析

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

以本文爲例,centos1中的/etc/hosts文件看起來就應該是這樣的:
127.0.0.0         localhost    
10.0.9.101     centos1       
10.0.9.102     centos2       
centos2中的/etc/hosts文件看起來就應該是這樣的:
127.0.0.0         localhost    
10.0.9.101     centos1      
10.0.9.102     centos2       

對於Hadoop來說,在HDFS看來,節點分爲Namenode和Datanode,其中Namenode只有一個,Datanode可以是很多;在MapReduce看來,節點又分爲Jobtracker和Tasktracker,其中Jobtracker只有一個,Tasktracker可以是很多。
我是將namenode和jobtracker部署在centos1上,centos1和centos2作爲datanode和tasktracker。當然你也可以將namenode,datanode,jobtracker,tasktracker全部部署在一臺機器上(就像centos1)。

jdk環境配置

官網下載適合自己的jdk

http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html

爲了簡單下載一個rpm包

 

jdk-7-linux-x64.rpm

rpm -ivh jdk-7-linux-x64.rpm
查看/usr/目錄就有java目錄了
配置環境變量
#vim /etc/profile

在profile文件下面追加寫入下面信息:

export JAVA_HOME=/usr/java/jdk1.7.0
export CLASSPATH
=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export
PATH=$PATH:$JAVA_HOME/bin

 

是配置文檔生效

source /etc/profile

目錄結構

這裏務必以新建用戶grid登陸,保證hadoop目錄及子目錄屬主爲grid一個人(如果既有root又有grid以後會出現很多錯誤)
由於Hadoop要求所有機器上hadoop的部署目錄結構要相同,並且都有一個相同的用戶名的帳戶
我的三臺機器上是這樣的:都有一個grid的帳戶,主目錄是/home/grid
Hadoop部署目錄結構如下:/home/grid/HadoopInstall,所有的hadoop版本放在這個目錄中。
將hadoop0.20.204壓縮包解壓至HadoopInstall中,爲了方便以後升級,建議建立一個鏈接指向要使用的hadoop版本,不妨設爲hadoop
[grid@centos1:HadoopInstall]$ln  -s  hadoop0.20.204 hadoop
這樣一來,所有的配置文件都在/home/grid/HadoopInstall/hadoop/conf/目錄中,所有執行程序都在hadoop/bin目錄中。
但是由於上述目錄中hadoop的配置文件和hadoop的安裝目錄是放在一起的,這樣一旦日後升級hadoop版本的時候所有的配置文件都會被覆蓋,因此建議將配置文件與安裝目錄分離,一種比較好的方法就是建立一個存放配置文件的目錄,/home/grid/HadoopInstall/hadoop-conf/,然後將hadoop/conf/目錄中的core-site.xml,hdfs-site.xml,mapred-site.xml,master,slaves,hadoop_env.sh六個文件拷貝到hadoop-conf/目錄中,並指定環境變量$HADOOP_CONF_DIR指向該目錄。環境變量在/home/grid/.bashrc或/etc/profile中設定。

export $HADOOP_CONF_DIR=/home/grid/HadoopInstall/hadoop/hadoop-conf
綜上所述,爲了方便以後升級版本,我們需要做到配置文件與安裝目錄分離,並通過設定一個指向我們要使用的版本的hadoop的鏈接,這樣可以減少我們對配置文件的維護。在下面的部分,你就會體會到這樣分離以及鏈接的好處了。

這裏的目錄和鏈接結構比較亂,我在說明一下

家目錄/home/grid

下面有一個放hadoop各版本的目錄HadoopInstall,比如示例版本hadoop0.20.204即

/home/grid/HadoopInstall/hadoop0.20.204

目錄HadoopInstall下新建一個指向最新hadoop版本的鏈接hadoop/home/grid/HadoopInstall/hadoop---->hadoop0.20.204

 

目錄HadoopInstall還有一個分離的配置文檔文件夾hadoop-conf

其中存放着不變的配置文檔
SSH設置
在Hadoop啓動以後,Namenode是通過SSH(Secure Shell)來啓動和停止各個節點上的各種守護進程的,這就需要在節點之間執行指令的時候是不需要輸入密碼的方式,故我們需要配置SSH使用無密碼公鑰認證的方式。
詳見http://singlegod.blog.51cto.com/1909710/680182

Hadoop環境變量
在/home/grid/HadoopInstall/hadoop-conf目錄下的hadoop_env.sh中設置Hadoop需要的環境變量,其中JAVA_HOME是必須設定的變量。HADOOP_HOME變量可以設定也可以不設定,如果不設定,HADOOP_HOME默認的是bin目錄的父目錄,即本文中的/home/grid/Hadoop0.20.204/hadoop。我的是這樣設置的

export  HADOOP_HOME=/home/dbrg/HadoopInstall/hadoop
export  JAVA_HOME=/usr/java/jdk1.7.0

從這個地方就可以看出前面所述的創建hadoop0.20.204的鏈接hadoop的優點了,當以後更新hadoop的版本的時候,就不需要在改配置文件,只需要更改鏈接就可以了。


Hadoop配置文件
如前所述,在hadoop-conf/目錄下,打開slaves文件,該文件用來指定所有的從節點,一行指定一個主機名。即本文中的centos2,centos1,因此slaves文件看起來應該是這樣的
centos2
centos1
Hadoop0.20.2版本以前的配置文件是conf/hadoop-default.xml,但是hadoop0.20.2以及以後版本中,該配置文件拆分位core-site.xml  hdfs-site.xml和mapred-site.xml其中core和hdfs是站在HDFS的角度上的配置文件,core和mapred是站在Mapreduce角度上的配置文件

(只配置configuration間的jiuha)

core-site.xml配置如下

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://centos1:9000</value>

</property>

</configuration>    

hdfs-site.xml(配置如下)

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration> 

mapred-site.xml配置如下

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>centos1:9001</value>

</property>

</configuration> 

部署Hadoop
前面講的這麼多Hadoop的環境變量和配置文件都是在centos1這臺機器上的,現在需要將hadoop部署到其他的機器上,保證目錄結構一致
[grid@centos1:~]$scp  -r  /home/grid/HadoopInstall  centos2:/home/grid/
至此,可以說,Hadoop已經在各個機器上部署完畢了下面就讓我們開始啓動Hadoop吧


啓動Hadoop
啓動之前,我們先要格式化namenode,先進入~/HadoopInstall/hadoop目錄,執行下面的命令
[grid@centos1: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守護

在這裏,簡單啓動所有守護
[grid@centos1:hadoop]$bin/start-all.sh

同樣,如果要停止hadoop,則
[grid@centos1:hadoop]$bin/stop-all.sh

查看是否啓動成功

/usr/java/jdk1.7.0/jps(如果配置成功java環境變量直接輸入jps命令)

如果成功應該會在centos1上顯示類似以下結果

1885    SecondNamenode

2085     JPS

1707     NameNode

1945     Jobtracker

28891    DataNode

28881    Tasktracker

centos2  

1566    JPS

2891    DataNode

2881    Tasktracker

訪問http://centos1:50070可以看到NameNode以及整個分佈式文件系統的狀態,瀏覽分佈式文件系統中的文件以及日誌等

訪問http://centos1:50030可以查看JobTracker的運行狀態

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

建立目錄
[grid@centos1:hadoop]$bin/hadoop  dfs  -mkdir  testdir
在HDFS中建立一個名爲testdir的目錄

複製文件
[grid@centos1:hadoop]$bin/hadoop  dfs  -put  /home/grid/large.zip  testfile.zip
把本地文件large.zip拷貝到HDFS的根目錄/user/grid/下,文件名爲testfile.zip

查看現有文件
[grid@centos1:hadoop]$bin/hadoop  dfs  -ls

遇到的錯誤及解決辦法

 

1,在格式化namenode時,提示(Y/N)的時候我輸的y,所以沒有成功,好怪~

2,在啓動hdfs時分佈在centos2節點上的datanode沒有啓動,查看日誌看不懂,估計是以前用root用戶配置亂了,所以一不做二不休

rm -rf /tmp/hadoop*

重新格式化,啓動,成功

 

3,如果期間用root去查看hadoop的日誌文件,也會出錯,因爲會把某個日誌文件的屬主變爲root

 

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