實(shí)戰(zhàn):如何在Linux上安裝與配置Hadoop
Hadoop的安裝非常簡(jiǎn)單,大家可以在官網(wǎng)上下載到最近的幾個(gè)版本,網(wǎng)址為http://apache.etoak.com/hadoop/core/。
Hadoop最早是為了在Linux平臺(tái)上使用而開(kāi)發(fā)的,但是Hadoop在UNIX、Windows和Mac OS X系統(tǒng)上也運(yùn)行良好。不過(guò),在Windows上運(yùn)行Hadoop稍顯復(fù)雜,首先必須安裝Cygwin以模擬Linux環(huán)境,然后才能安裝Hadoop。
在Unix上安裝Hadoop的過(guò)程與在Linux上安裝基本相同,因此下面不會(huì)對(duì)其進(jìn)行詳細(xì)介紹。
在Linux上安裝與配置Hadoop
在Linux上安裝Hadoop之前,需要先安裝兩個(gè)程序:
1. JDK 1.6或更高版本;
2. SSH(安全外殼協(xié)議),推薦安裝OpenSSH。
下面簡(jiǎn)述一下安裝這兩個(gè)程序的原因:
1. Hadoop是用Java開(kāi)發(fā)的,Hadoop的編譯及MapReduce的運(yùn)行都需要使用JDK。
2. Hadoop需要通過(guò)SSH來(lái)啟動(dòng)salve列表中各臺(tái)主機(jī)的守護(hù)進(jìn)程,因此SSH也是必須安裝的,即使是安裝偽分布式版本(因?yàn)镠adoop并沒(méi)有區(qū)分集群式和偽分布式)。對(duì)于偽分布式,Hadoop會(huì)采用與集群相同的處理方式,即依次序啟動(dòng)文件conf/slaves中記載的主機(jī)上的進(jìn)程,只不過(guò)偽分布式中salve為localhost(即為自身),所以對(duì)于偽分布式Hadoop,SSH一樣是必須的。
一、安裝JDK 1.6
安裝JDK的過(guò)程很簡(jiǎn)單,下面以Ubuntu為例。
(1)下載和安裝JDK
確??梢赃B接到互聯(lián)網(wǎng),輸入命令:
sudo apt-get install sun-java6-jdk
輸入密碼,確認(rèn),然后就可以安裝JDK了。
這里先解釋一下sudo與apt這兩個(gè)命令,sudo這個(gè)命令允許普通用戶執(zhí)行某些或全部需要root權(quán)限命令,它提供了詳盡的日志,可以記錄下每個(gè)用戶使用這個(gè)命令做了些什么操作;同時(shí)sudo也提供了靈活的管理方式,可以限制用戶使用命令。sudo的配置文件為/etc/sudoers。
apt的全稱為the Advanced Packaging Tool,是Debian計(jì)劃的一部分,是Ubuntu的軟件包管理軟件,通過(guò)apt安裝軟件無(wú)須考慮軟件的依賴關(guān)系,可以直接安裝所需要的軟件,apt會(huì)自動(dòng)下載有依賴關(guān)系的包,并按順序安裝,在Ubuntu中安裝有apt的一個(gè)圖形化界面程序synaptic(中文譯名為“新立得”),大家如果有興趣也可以使用這個(gè)程序來(lái)安裝所需要的軟件。(如果大家想了解更多,可以查看一下關(guān)于Debian計(jì)劃的資料。)
(2)配置環(huán)境變量
輸入命令:
sudo gedit /etc/profile
輸入密碼,打開(kāi)profile文件。
在文件的最下面輸入如下內(nèi)容:
#set Java Environment
export JAVA_HOME= (你的JDK安裝位置,一般為/usr/lib/jvm/java-6-sun)
export CLASSPATH=".:$JAVA_HOME/lib:$CLASSPATH"
export PATH="$JAVA_HOME/:$PATH"
這一步的意義是配置環(huán)境變量,使你的系統(tǒng)可以找到JDK。
(3)驗(yàn)證JDK是否安裝成功
輸入命令:
java -version
查看信息:
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
二、配置SSH免密碼登錄
同樣以Ubuntu為例,假設(shè)用戶名為u。
1)確認(rèn)已經(jīng)連接上互聯(lián)網(wǎng),輸入命令
sudo apt-get install ssh
2)配置為可以無(wú)密碼登錄本機(jī)。
首先查看在u用戶下是否存在.ssh文件夾(注意ssh前面有“.”,這是一個(gè)隱藏文件夾),輸入命令:
ls -a /home/u
一般來(lái)說(shuō),安裝SSH時(shí)會(huì)自動(dòng)在當(dāng)前用戶下創(chuàng)建這個(gè)隱藏文件夾,如果沒(méi)有,可以手動(dòng)創(chuàng)建一個(gè)。
接下來(lái),輸入命令:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
解釋一下,ssh-keygen代表生成密鑰;-t(注意區(qū)分大小寫(xiě))表示指定生成的密鑰類型;dsa是dsa密鑰認(rèn)證的意思,即密鑰類型;-P用于提供密語(yǔ);-f指定生成的密鑰文件。(關(guān)于密鑰密語(yǔ)的相關(guān)知識(shí)這里就不詳細(xì)介紹了,里面會(huì)涉及SSH的一些知識(shí),如果讀者有興趣,可以自行查閱資料。)
在Ubuntu中,~代表當(dāng)前用戶文件夾,這里即/home/u。
這個(gè)命令會(huì)在.ssh文件夾下創(chuàng)建兩個(gè)文件id_dsa及id_dsa.pub,這是SSH的一對(duì)私鑰和公鑰,類似于鑰匙及鎖,把id_dsa.pub(公鑰)追加到授權(quán)的key里面去。
輸入命令:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
這段話的意思是把公鑰加到用于認(rèn)證的公鑰文件中,這里的authorized_keys是用于認(rèn)證的公鑰文件。
至此無(wú)密碼登錄本機(jī)已設(shè)置完畢。
3)驗(yàn)證SSH是否已安裝成功,以及是否可以無(wú)密碼登錄本機(jī)。
輸入命令:
ssh -version
顯示結(jié)果:
OpenSSH_5.1p1 Debian-6ubuntu2, OpenSSL 0.9.8g 19 Oct 2007
Bad escape character 'rsion'.
顯示SSH已經(jīng)安裝成功了。
輸入命令:
ssh localhost
會(huì)有如下顯示:
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 8b:c3:51:a5:2a:31:b7:74:06:9d:62:04:4f:84:f8:77.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Linux master 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:04:26 UTC 2009 i686
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
Last login: Mon Oct 18 17:12:40 2010 from master
admin@Hadoop:~$
這說(shuō)明已經(jīng)安裝成功,第一次登錄時(shí)會(huì)詢問(wèn)你是否繼續(xù)鏈接,輸入yes即可進(jìn)入。
實(shí)際上,在Hadoop的安裝過(guò)程中,是否無(wú)密碼登錄是無(wú)關(guān)緊要的,但是如果不配置無(wú)密碼登錄,每次啟動(dòng)Hadoop,都需要輸入密碼以登錄到每臺(tái)機(jī)器的DataNode上,考慮到一般的Hadoop集群動(dòng)輒數(shù)百臺(tái)或上千臺(tái)機(jī)器,因此一般來(lái)說(shuō)都會(huì)配置SSH的無(wú)密碼登錄。
三、安裝并運(yùn)行Hadoop
介紹Hadoop的安裝之前,先介紹一下Hadoop對(duì)各個(gè)節(jié)點(diǎn)的角色定義。
Hadoop分別從三個(gè)角度將主機(jī)劃分為兩種角色。第一,劃分為master和slave,即主人與奴隸;第二,從HDFS的角度,將主機(jī)劃分為NameNode和DataNode(在分布式文件系統(tǒng)中,目錄的管理很重要,管理目錄的就相當(dāng)于主人,而NameNode就是目錄管理者);第三,從MapReduce的角度,將主機(jī)劃分為JobTracker和TaskTracker(一個(gè)job經(jīng)常被劃分為多個(gè)task,從這個(gè)角度不難理解它們之間的關(guān)系)。
Hadoop有官方發(fā)行版與cloudera版,其中cloudera版是Hadoop的商用版本,這里先介紹Hadoop官方發(fā)行版的安裝方法。
Hadoop有三種運(yùn)行方式:?jiǎn)喂?jié)點(diǎn)方式、單機(jī)偽分布方式與集群方式。乍看之下,前兩種方式并不能體現(xiàn)云計(jì)算的優(yōu)勢(shì),在實(shí)際應(yīng)用中并沒(méi)有什么意義,但是在程序的測(cè)試與調(diào)試過(guò)程中,它們還是很有意義的。
你可以通過(guò)以下地址獲得Hadoop的官方發(fā)行版:
http://www.apache.org/dyn/closer.cgi/Hadoop/core/
下載Hadoop-0.20.2.tar.gz并將其解壓,這里會(huì)解壓到用戶目錄下,一般為:/home/[你的用戶名]/。
單節(jié)點(diǎn)方式配置:
安裝單節(jié)點(diǎn)的Hadoop無(wú)須配置,在這種方式下,Hadoop被認(rèn)為是一個(gè)單獨(dú)的Java進(jìn)程,這種方式經(jīng)常用來(lái)調(diào)試。
偽分布式配置:
你可以把偽分布式的Hadoop看做是只有一個(gè)節(jié)點(diǎn)的集群,在這個(gè)集群中,這個(gè)節(jié)點(diǎn)既是master,也是slave;既是NameNode也是DataNode;既是JobTracker,也是TaskTracker。
偽分布式的配置過(guò)程也很簡(jiǎn)單,只需要修改幾個(gè)文件,如下所示。
進(jìn)入conf文件夾,修改配置文件:
Hadoop-env.sh:
export JAVA_HOME=“你的JDK安裝地址”
指定JDK的安裝位置:
conf/core-site.xml:
這是Hadoop核心的配置文件,這里配置的是HDFS的地址和端口號(hào)。
conf/hdfs-site.xml:
這是Hadoop中HDFS的配置,配置的備份方式默認(rèn)為3,在單機(jī)版的Hadoop中,需要將其改為1。
conf/mapred-site.xml:
這是Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
需要注意的是,如果安裝的是0.20之前的版本,那么只有一個(gè)配置文件,即為Hadoop-site.xml。
接下來(lái),在啟動(dòng)Hadoop前,需格式化Hadoop的文件系統(tǒng)HDFS(這點(diǎn)與Windows是一樣的,重新分區(qū)后的卷總是需要格式化的)。進(jìn)入Hadoop文件夾,輸入下面的命令:
bin/Hadoop NameNode -format
格式化文件系統(tǒng),接下來(lái)啟動(dòng)Hadoop。
輸入命令:
bin/start-all.sh(全部啟動(dòng))
最后,驗(yàn)證Hadoop是否安裝成功。
打開(kāi)瀏覽器,分別輸入網(wǎng)址:
http://localhost:50030 (MapReduce的Web頁(yè)面)
http://localhost:50070 (HDFS的Web頁(yè)面)
如果都能查看,說(shuō)明Hadoop已經(jīng)安裝成功。
對(duì)于Hadoop來(lái)說(shuō),安裝MapReduce及HDFS都是必須的,但是如果有必要,你依然可以只啟動(dòng)HDFS(start-dfs.sh)或MapReduce(start-mapred.sh)。