Hadoop第一步:部署分佈式服務

[color=red][b]原創文章:轉載請註明出處[/b][/color]
最近有幸開始接觸雲。哈哈,先從hadoop入手
部署hadoop的文檔很多,但是還是遇到了不少問題,下面和大家分享一下我的部署全過程吧

版本號:hadoop 0.21.0
下載地址:[url]http://www.apache.org/dyn/closer.cgi/hadoop/core/ [/url]
系統環境:紅帽linux

[b]1.硬件配置[/b]
準備3-4臺機器,爲他們配置上IP,保證相互可以ping通

至少有3臺作爲NameNode因爲hadoop默認作爲備份的機器數量爲3
NameNode也可以作爲DataNode
hadoop1:192.168.1.144(NameNode)
hadoop2:192.168.1.145(DataNode)
hadoop3:192.168.1.146(DataNode)
hadoop4:192.168.1.146(DataNode)

修改/etc/hosts文件 如果是144
就加上一下信息
192.168.1.144 hadoop1
192.168.1.145 hadoop2
192.168.1.146 hadoop3
192.168.1.147 hadoop4
145則寫
192.168.1.144 hadoop1
192.168.1.145 hadoop2
146則寫
192.168.1.144 hadoop1
192.168.1.146 hadoop3
147則寫
192.168.1.144 hadoop1
192.168.1.147 hadoop4

[b]2.配置SSH[/b]
1.在hadoop1中生成密匙對:ssh-keygen -t -P '' -f ~/.ssh/id_dsa
命令執行後將會在/home/.ssh中生成id_dsa和id_dsa.pub
2.cat ~/.ssh/id_dsa.pub>>~/.ssh/authorized_keys
拷貝id_dsa.pub命名爲authorized_keys
3.爲hadoop2-hadoop4的home目錄下創建.ssh文件夾
mkdir .ssh
4.scp authorized_keys hadoop2:/home/.ssh
把authorized_keys拷貝到hadoop2-hadoop4的.ssh目錄下
5.爲每臺機器執行chmod 640 authorized_keys
必須保證authorized_keys的所有者有讀寫權限,其他人只有讀的權限
6.修改每臺機器的/etc/ssh/sshd_config
AuthorizedKeysFile 指向authorized_keys
例如 AuthorizedKeysFile /home/authorized_keys
用於去除密碼認證

這裏必須注意:hadoop1-hadoop4的每臺機器必須可以相互連接。此例只是hadoop1連接其他機器,其他機器並不能連接到hadoop1。所以要按上面方法爲hadoop2-hadoop4配置ssh連接
配置完成:在hadoop1中執行 ssh hadoop2
如果能連接上表示配置成功:退出鏈接用exit命令

[b]3.hadoop配置[/b]
首先下載hadoop,系統java環境變量已經配置完成
目錄結構
由於Hadoop要求所有機器上hadoop的部署目錄結構要相同,並且都有一個相同的用戶名的帳戶。
我的三臺機器上是這樣的:都有一個hadoop的帳戶,主目錄是/home/hadoop。
解壓:[hadoop@ hadoop1:~]$tar -zxvf hadoop-0.21.0.tar.gz
Hadoop部署目錄結構如下:/home/hadoop/hadoop0.21.0,所有的hadoop版本放在這個目錄中。
將hadoop0.21.0壓縮包解壓至hadoop0.21.0中,爲了方便以後升級,建議建立一個鏈接指向要使用的hadoop版本,不妨設爲hadoop,
[hadoop@ hadoop1:~]$ln -s hadoop0.21.0 hadoop
這樣一來,所有的配置文件都在/home/hadoop/hadoop/conf/目錄中,所有執行程序都在/home/hadoop/hadoop/bin目錄中。但是由於上述目錄中hadoop的配置文件和hadoop的安裝目錄是放在一起的,這樣一旦日後升級hadoop版本的時候所有的配置文件都會被覆蓋,因此建議將配置文件與安裝目錄分離,一種比較好的方法就是建立一個存放配置文件的目錄,/home/hadoop/hadoop/hadoop-config,然後將/home/hadoop/hadoop/conf/目錄中的masters,slaves,hadoop_env.sh三個文件拷貝到hadoop-config目錄中,並指定環境變量$HADOOP_CONF_DIR指向該目錄。環境變量在/home/hadoop/.bashrc和/etc/profile中設定。
如:
HADOOP_CONF_DIR=/home/hadoop/hadoop/hadoop-config
export HADOOP_CONF_DIR
綜上所述,爲了方便以後升級版本,我們需要做到配置文件與安裝目錄分離,並通過設定一個指向我們要使用的版本的hadoop的鏈接,這樣可以減少我們對配置文件的維護。

Hadoop環境變量
在/home/hadoop/hadoop/hadoop-config目錄下的hadoop_env.sh中設置Hadoop需要的環境變量,其中JAVA_HOME是必須設定的變量。HADOOP_HOME變量可以設定也可以不設定,如果不設定,HADOOP_HOME默認的是bin目錄的父目錄,即本文中的/home/hadoop/hadoop。我的是這樣設置的:
export HADOOP_HOME=/home/hadoop/hadoop
export JAVA_HOME=/usr/java/jdk1.6.0

重點:env.sh還要加一句
export HADOOP_PID_DIR=/home/hadoop/hadoop/tmp

Hadoop配置文件

修改slaves文件
如前所述,在hadoop1(NameNode)的hadoop-config/目錄下,打開slaves文件,該文件用來指定所有的DataNode,一行指定一個主機名。即本文中的hadoop2、hadoop3,因此slaves文件看起來應該是這樣的:
hadoop2
hadoop3
hadoop4

修改masters文件
打開masters文件,該文件用來指定NameNode,內容如下:
localhost
hadoop1

修改core-site.xml

1.<?xml version="1.0"?>
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3.<!-- Put site-specific property overrides in this file. -->
4.<configuration>
5. <property>
6. <name>fs.default.name</name>
7. <value>hdfs://master:9000</value>
8. <description>
9. The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation.
10. </description>
11. </property>
12.</configuration>


修改mapred-site.xml

1.<?xml version="1.0"?>
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3.<!-- Put site-specific property overrides in this file. -->
4.<configuration>
5. <property>
6. <name>mapred.job.tracker</name>
7. <value>master:9001</value>
8. <description>The host and port that the MapReduce job tracker runsat.</description>
9. </property>
10.</configuration>

修改hdfs-site.xml
[code="java"]
1.<?xml version="1.0"?>
2.<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
3.<!-- Put site-specific property overrides in this file. -->
4.<configuration>
5. <property>
6. <name>dfs.replication</name>
7. <value>3</value>
8. <description>
9. The actual number of replications can be specified when the file is created.
10. </description>
11. </property>
12.</configuration>

[/code]

[b]4.啓動Hadoop[/b]
啓動之前,我們先要格式化namenode,先進入~/hadoop/目錄,執行下面的命令:
[hadoop@hadoop1 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守護
在這裏,簡單啓動所有守護:
[hadoop@hadoop1:hadoop]$bin/start-all.sh
同樣,如果要停止hadoop,則
[hadoop@hadoop1:hadoop]$bin/stop-all.sh

[b]HDFS操作[/b]
運行bin/目錄的hadoop命令,可以查看Haoop所有支持的操作及其用法,這裏以幾個簡單的操作爲例。建立目錄:
[hadoop@hadoop1 hadoop]$bin/hadoop dfs -mkdir testdir
在HDFS中建立一個名爲testdir的目錄,複製文件:
[hadoop@hadoop1 hadoop]$bin/hadoop dfs -put /home/large.zip testfile.zip
把本地文件large.zip拷貝到HDFS的根目錄/user/hadoop/下,文件名爲testfile.zip,查看現有文件:
[hadoop@hadoop1 hadoop]$bin/hadoop dfs -ls
用http://localhost:50070查看信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章