Hadoop集群安裝詳細(xì)步驟|Hadoop安裝配置
首先我們統(tǒng)一一下定義,在這里所提到的Hadoop是指Hadoop Common,主要提供DFS(分布式文件存儲(chǔ))與Map/Reduce的核心功能。
Hadoop在windows下還未經(jīng)過(guò)很好的測(cè)試,所以筆者推薦大家在linux(cent os 5.X)下安裝使用。
準(zhǔn)備安裝Hadoop集群之前我們得先檢驗(yàn)系統(tǒng)是否安裝了如下的必備軟件:ssh、rsync和Jdk1.6(因?yàn)镠adoop需要使用到Jdk中的編 譯工具,所以一般不直接使用Jre)。可以使用yum install rsync來(lái)安裝rsync。一般來(lái)說(shuō)ssh是默認(rèn)安裝到系統(tǒng)中的。Jdk1.6的安裝方法這里就不多介紹了。
確保以上準(zhǔn)備工作完了之后我們就開(kāi)始安裝Hadoop軟件,假設(shè)我們用三臺(tái)機(jī)器做Hadoop集群,分別是:192.168.1.111、192.168.1.112和192.168.1.113(下文簡(jiǎn)稱111,112和113),且都使用root用戶。
下面是在linux平臺(tái)下安裝Hadoop的過(guò)程:
[root@192.168.1.111] #這里將Hadoop安裝到/opt/hadoop [root@192.168.1.111] mkdir /opt/hadoop [root@192.168.1.111] cd /opt/hadoop [root@192.168.1.111] #更改所屬關(guān)系和權(quán)限(對(duì)于其它用戶而言) [root@192.168.1.111] chown root ./; chmod 755 ./ [root@192.168.1.111] # 下載項(xiàng)目包(去官網(wǎng)(http://hadoop.apache.org/)下載Hadoop項(xiàng)目) [root@192.168.1.111] wget http://www.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz [root@192.168.1.111] # 解壓 [root@192.168.1.111] tar xzvf hadoop-0.20.2.tar.gz [root@192.168.1.111] # 進(jìn)入目錄 [root@192.168.1.111] cd hadoop-0.20.2 [root@192.168.1.111] # 因?yàn)镠adoop子項(xiàng)目的需要,一般需要設(shè)置環(huán)境變量如下: [root@192.168.1.111] export HADOOP_HOME=`pwd` [root@192.168.1.111] # 也可以將環(huán)境變量設(shè)置到/etc/profile中 |
在所有服務(wù)器的同一路徑下都進(jìn)行這幾步,就完成了集群Hadoop軟件的安裝,是不是很簡(jiǎn)單?沒(méi)錯(cuò)安裝是很簡(jiǎn)單的,下面就是比較困難的工作了。
集群配置
根據(jù)Hadoop文檔的描述“The Hadoop daemons are NameNode/DataNode and JobTracker/TaskTracker.”可以看出Hadoop核心守護(hù)程序就是由NameNode/DataNode 和JobTracker/TaskTracker這幾個(gè)角色構(gòu)成。
Hadoop的DFS需要確立NameNode與DataNode角色,一 般NameNode會(huì)部署到一臺(tái)單獨(dú)的服務(wù)器上而不與DataNode共同同一機(jī)器。另外Map/Reduce服務(wù)也需要確立JobTracker和 TaskTracker的角色,一般JobTracker與NameNode共用一臺(tái)機(jī)器作為master,而TaskTracker與DataNode 同屬于slave。至于NameNode/DataNode和JobTracker/TaskTracker的概念這里就不多講了,需要了解的可以參看相 關(guān)文檔。
在這里我們使用111作為NameNode與JobTracker,其它兩臺(tái)機(jī)器作為DataNode和TaskTracker,具體的配置如下:
環(huán)境的配置
在$HADOOP_HOME/conf/hadoop-env.sh中定義了Hadoop啟動(dòng)時(shí)需要的環(huán)境變量設(shè)置,其中我們至少需要配置 JAVA_HOME(Jdk的路徑)變量;另外我們一般還需要更改HADOOP_LOG_DIR(Hadoop的日志路徑)這個(gè)變量,默認(rèn)的設(shè)置是 “export HADOOP_LOG_DIR=${HADOOP_HOME}/logs”,一般需要將其配置到一個(gè)磁盤空間比較大的目錄下。
Hadoop核心程序配置
Hadoop 包括一組默認(rèn)配置文件($HADOOP_HOME/src目錄下的core/core-default.xml, hdfs/hdfs-default.xml 和mapred/mapred-default.xml),大家可以先好好看看并理解默認(rèn)配置文件中的那些屬性。雖然默認(rèn)配置文件能讓Hadoop核心程 序順利啟動(dòng),但對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)一般需要自己的來(lái)設(shè)置一些常規(guī)配置以滿足開(kāi)發(fā)和業(yè)務(wù)的需求,所以我們需要對(duì)默認(rèn)配置文件的值進(jìn)行覆蓋,具體方法如下。
$HADOOP_HOME/conf/core-site.xml是Hadoop的核心配置文件,對(duì)應(yīng)并覆蓋core-default.xml中的配置項(xiàng)。我們一般在這個(gè)文件中增加如下配置:
- <configuration>
- <property>
- <!-- 用于dfs命令模塊中指定默認(rèn)的文件系統(tǒng)協(xié)議 -->
- <name>fs.default.name</name>
- <value>hdfs://192.168.1.111:9000</value>
- </property>
- </configuration>
$HADOOP_HOME/conf/hdfs-site.xml是HDFS的配置文件,對(duì)應(yīng)并覆蓋hdfs-default.xml中的配置項(xiàng)。我們一般在這個(gè)文件中增加如下配置:
- <configuration>
- <property>
- <!-- DFS中存儲(chǔ)文件命名空間信息的目錄 -->
- <name>dfs.name.dir</name>
- <value>/opt/hadoop/data/dfs.name.dir</value>
- </property>
- <property>
- <!-- DFS中存儲(chǔ)文件數(shù)據(jù)的目錄 -->
- <name>dfs.data.dir</name>
- <value>/opt/hadoop/data/dfs.data.dir</value>
- </property>
- <property>
- <!-- 是否對(duì)DFS中的文件進(jìn)行權(quán)限控制(測(cè)試中一般用false)-->
- <name>dfs.permissions</name>
- <value>false</value>
- </property>
- </configuration>
$HADOOP_HOME/conf/mapred-site.xml是Map/Reduce的配置文件,對(duì)應(yīng)并覆蓋mapred-default.xml中的配置項(xiàng)。我們一般在這個(gè)文件中增加如下配置:
- <configuration>
- <property>
- <!-- 用來(lái)作JobTracker的節(jié)點(diǎn)的(一般與NameNode保持一致) -->
- <name>mapred.job.tracker</name>
- <value>192.168.1.111:9001</value>
- </property>
- <property>
- <!-- map/reduce的系統(tǒng)目錄(使用的HDFS的路徑) -->
- <name>mapred.system.dir</name>
- <value>/system/mapred.system.dir</value>
- </property>
- <property>
- <!-- map/reduce的臨時(shí)目錄(可使用“,”隔開(kāi),設(shè)置多重路徑來(lái)分?jǐn)偞疟PIO) -->
- <name>mapred.local.dir</name>
- <value>/opt/hadoop/data/mapred.local.dir</value>
- </property>
- </configuration>
主從配置
在$HADOOP_HOME/conf目錄中存在masters和slaves這兩個(gè)文件,用來(lái)做Hadoop的主從配置。上面已經(jīng)提到了 Hadoop主要由NameNode/DataNode 和JobTracker/TaskTracker構(gòu)成,在主從配置里我們一般將NameNode和JobTracker列為主機(jī),其它的共為從機(jī),于是對(duì) 于此處的配置應(yīng)該是:
如果你對(duì)以上介紹的配置項(xiàng)做了正確的配置,那么你的Hadoop集群只差啟動(dòng)和初體念了,當(dāng)然,在$HADOOP_HOME/conf目錄下還包括其它的一些配置文件,但那些都不是必須設(shè)置的,如果有興趣你可以自己去了解了解。
啟動(dòng)
經(jīng)過(guò)以上兩個(gè)步驟,Hadoop的安裝和配置已經(jīng)OK了,那么下面我們就來(lái)啟動(dòng)Hadoop集群。啟動(dòng)前我們需要做一些準(zhǔn)備,因?yàn)榧旱膯?dòng)是 從NameNode開(kāi)始的,于是DataNode的運(yùn)行需要NameNode的遠(yuǎn)程調(diào)用,Hadoop使用ssh命令遠(yuǎn)程運(yùn)行DataNode節(jié)點(diǎn),這就 是為什么Hadoop需要ssh的支持。我們可以想象一下,如果集群里有100臺(tái)機(jī)器,那么我們就需要輸入100遍主機(jī)的訪問(wèn)密碼,但如果配置SSH使用 無(wú)密碼公鑰認(rèn)證的方式,就解決了此問(wèn)題。
簡(jiǎn)單的說(shuō),在111上需要生成一個(gè)密鑰對(duì),即一個(gè)私鑰和一個(gè)公鑰。將公鑰拷貝到112和113上,如 此一來(lái),當(dāng)111向112發(fā)起ssh連接的時(shí)候,112上就會(huì)生成一個(gè)隨機(jī)數(shù)并用111的公鑰對(duì)這個(gè)隨機(jī)數(shù)進(jìn)行加密,并且發(fā)送給111,111收到這個(gè)加 密的數(shù)以后用私鑰進(jìn)行解密,并將解密后的數(shù)返回112,112確認(rèn)解密的數(shù)無(wú)誤后就允許111進(jìn)行連接了。這就完成了一次公鑰認(rèn)證過(guò)程。
公鑰生成的步驟如下:
[root@192.168.1.111] ssh-keygen -t rsa [root@192.168.1.111] #以下是生成一個(gè)為id_rsa/id_rsa.pub的無(wú)密碼的公/私鑰對(duì) Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: [root@192.168.1.111] ls -l ~/.ssh [root@192.168.1.111] #這樣我們會(huì)看到如下所示的結(jié)果集: -rw------- 1 root root 1675 Jul 5 14:01 id_rsa -rw-r--r-- 1 root root 394 Jul 5 14:01 id_rsa.pub |
然后將id_rsa.pub的內(nèi)容復(fù)制到每個(gè)機(jī)器(也包括本機(jī))的~/.ssh/authorized_keys文件中。如果 authorized_keys不存在,則使用touch ~/.ssh/authorized_keys生成一個(gè);如果該文件已經(jīng)存在,則追加內(nèi)容進(jìn)去就OK了,這里我們推薦使用如下命令:
[root@192.168.1.111] cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys [root@192.168.1.111] #因?yàn)閟sh服務(wù)對(duì)文件的權(quán)限有著非常嚴(yán)格的限制(authorized_keys只能擁有指定用戶的寫權(quán)限)于是需要進(jìn)行如下處理 [root@192.168.1.111] chmod 644 ~/.ssh/authorized_keys |
經(jīng)過(guò)以上步驟,我們的無(wú)密碼訪問(wèn)就配置好了,可以通過(guò)如下命令進(jìn)行驗(yàn)證:
[root@192.168.1.111] ssh 192.168.1.112 [root@192.168.1.112] exit [root@192.168.1.111] ssh 192.168.1.113 [root@192.168.1.113] exit |
如此一來(lái),就可以正常啟動(dòng)Hadoop集群了。啟動(dòng)方式如下:
[root@192.168.1.111] cd $HADOOP_HOME/bin [root@192.168.1.111] #查看一下目錄下的文件 [root@192.168.1.111] ls -l -rwxr-xr-x 1 root root 9998 Feb 19 15:55 hadoop -rwxr-xr-x 1 root root 1966 Feb 19 15:55 hadoop-config.sh -rwxr-xr-x 1 root root 3690 Feb 19 15:55 hadoop-daemon.sh -rwxr-xr-x 1 root root 1227 Feb 19 15:55 hadoop-daemons.sh -rwxr-xr-x 1 root root 2710 Feb 19 15:55 rcc -rwxr-xr-x 1 root root 2043 Feb 19 15:55 slaves.sh -rwxr-xr-x 1 root root 1066 Feb 19 15:55 start-all.sh -rwxr-xr-x 1 root root 965 Feb 19 15:55 start-balancer.sh -rwxr-xr-x 1 root root 1645 Feb 19 15:55 start-dfs.sh -rwxr-xr-x 1 root root 1159 Feb 19 15:55 start-mapred.sh -rwxr-xr-x 1 root root 1019 Feb 19 15:55 stop-all.sh -rwxr-xr-x 1 root root 1016 Feb 19 15:55 stop-balancer.sh -rwxr-xr-x 1 root root 1146 Feb 19 15:55 stop-dfs.sh -rwxr-xr-x 1 root root 1068 Feb 19 15:55 stop-mapred.sh [root@192.168.1.111] #啟動(dòng)服務(wù)之前,我們需要做一件事情,非常重要,那就是格式化命名空間 [root@192.168.1.111] ./hadoop namenode -format [root@192.168.1.111] #啟動(dòng)dfs和map/reduce服務(wù) [root@192.168.1.111] ./start-all.sh |
我們用如下命令驗(yàn)證一下是否啟動(dòng)成功:
[root@192.168.1.111] $HADOOP_HOME/bin/hadoop dfs -ls |
如果沒(méi)有錯(cuò)誤提示或者出現(xiàn)文件列表,那么恭喜你,Hadoop成功啟動(dòng)了,另外,我們可以通過(guò)訪問(wèn) http://192.168.1.111:50070來(lái)查看hdfs的狀態(tài),訪問(wèn)http://192.168.1.111:50030來(lái)查看map /reduce的狀態(tài)。
如果出現(xiàn)錯(cuò)誤,或Hadoop集群未啟動(dòng),可以查看$HADOOP_HOME/logs/下的日志文件。
posted on 2012-07-08 19:35 大龍 閱讀(633) 評(píng)論(0) 編輯 收藏 引用