Hadoop 集群搭建
在圖書(shū)館看到關(guān)于 Hadoop 的書(shū),剛好有空,就借回來(lái)了看看。然后在寢室嘗試搭建環(huán)境,用了一天才弄好。
Hadoop 的運(yùn)行模式有 單機(jī)模式、偽分布式模式、完全分布式模式。我選擇的時(shí)完全分布式模式安裝。
因此需要多臺(tái)機(jī)器。但哪來(lái)的多臺(tái)機(jī)器呢,當(dāng)然是虛擬機(jī)啦。
因?yàn)?Hadoop 只能運(yùn)行在 *nix 環(huán)境中,因此我在 Ubuntu 中又用 VirtualBox 安裝了兩臺(tái)虛擬機(jī)。一臺(tái)作為 master, 一臺(tái)作為 slave1.
因?yàn)榕赂銐乃拗鳈C(jī)器,因此沒(méi)在物理機(jī)上折騰。集群,通常是有好多臺(tái)機(jī)器的,但我內(nèi)存才 6G 還是就開(kāi)兩臺(tái)吧。
首先安裝虛擬機(jī)都很容易,就不說(shuō)了。需要注意的就是用戶(hù)名、機(jī)器名和網(wǎng)絡(luò)配置。
據(jù)說(shuō) Hadoop 需要集群中機(jī)器的 用戶(hù)名一致 ,因此安裝時(shí)用統(tǒng)一的用戶(hù)名密碼即滿(mǎn)足有求又好記。
主機(jī)名,master 就設(shè)置為 master, slave 就設(shè)置為 slave1. 如果有更多 slave,數(shù)字遞增即可。主機(jī)名只是助記用的,不用太在意這些細(xì)節(jié)。
然后就是網(wǎng)絡(luò)配置。我們需要實(shí)現(xiàn)的目標(biāo)有:
1. 各虛擬機(jī)間可互相訪問(wèn)
2. 虛擬機(jī)和主機(jī)可互相訪問(wèn)
3. 虛擬機(jī)可上外網(wǎng)
為了實(shí)現(xiàn)第三點(diǎn),最方便的方法就是使用“ 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT) ”這種方式。
為了實(shí)現(xiàn)***點(diǎn)和第二點(diǎn),還需要增加 “ 僅主機(jī)(HostOnly) ”方式。
VirtualBox 的虛擬機(jī)有多種網(wǎng)絡(luò)配置模式,包括:橋接、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)、NAT、僅主機(jī)等。
橋接方式是虛擬出一塊網(wǎng)卡,虛擬機(jī)內(nèi)使用這個(gè)虛擬網(wǎng)卡,相當(dāng)于一臺(tái)物理機(jī)配置網(wǎng)絡(luò)。但我們學(xué)校一人一個(gè) IP 地址,網(wǎng)絡(luò)也需要認(rèn)證登錄,因此并不適用。
網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)是默認(rèn)的網(wǎng)絡(luò)配置,這樣可以使虛擬機(jī)上網(wǎng),也不要配置 IP,動(dòng)態(tài)分配 DHCP 的 IP 地址,相當(dāng)于虛擬機(jī)是宿主的一個(gè)程序。
NAT 方式,據(jù)說(shuō)是上一個(gè)模式的升級(jí)版,沒(méi)試過(guò)(需要在 VB 全局設(shè)置里配置網(wǎng)卡)。
僅主機(jī)模式,虛擬出一個(gè)網(wǎng)卡,宿主和虛擬機(jī)都可以連接,這樣宿主和虛擬機(jī)就在同一個(gè)網(wǎng)絡(luò)中可互相訪問(wèn)了。
我使用的方式是,在虛擬機(jī)的「管理」-「全局設(shè)置」-「網(wǎng)絡(luò)」中,選擇「僅主機(jī)網(wǎng)絡(luò)」,沒(méi)有配置就添加一個(gè),有就雙擊查看詳情,記下IP地址。
默認(rèn)是 192.168.56.1 你也可以改為 192.168.1.1 這種。DHCP 選項(xiàng)卡不勾選。
然后這樣宿主就自動(dòng)連接上這個(gè)虛擬網(wǎng)卡了,Ubuntu 菜單欄會(huì)有一項(xiàng)顯示「設(shè)備未托管」的網(wǎng)絡(luò)就是這個(gè)。因?yàn)槟愕腎P就是剛剛記下的,不需要再在「編輯連接」里配置了。
在虛擬機(jī)關(guān)閉狀態(tài)或剛新建還沒(méi)啟動(dòng)時(shí),配置他的網(wǎng)絡(luò)。選擇要配置的虛擬機(jī),「設(shè)置」-「網(wǎng)絡(luò)」:
網(wǎng)卡一:?jiǎn)⒂镁W(wǎng)絡(luò)連接,選擇「網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)」。
網(wǎng)卡二:?jiǎn)⒂镁W(wǎng)絡(luò)連接,選擇「僅主機(jī)(HostOnly)適配器」,界面選擇剛剛?cè)痔砑拥哪莻€(gè)名稱(chēng)。
啟動(dòng)虛擬機(jī)后,在其中可以看到兩個(gè)網(wǎng)絡(luò)連接,在右上角的菜單欄中點(diǎn)擊選擇「編輯連接」
「以太網(wǎng)」選項(xiàng)卡選擇網(wǎng)絡(luò)接口,新版本的Ubuntu不是eth0/eth1這種名稱(chēng)了,是 enp0s3/enp0s8類(lèi)似的名稱(chēng),數(shù)字小的一個(gè)是網(wǎng)卡一,另一個(gè)是網(wǎng)卡二。
在網(wǎng)卡一中,我們選擇的是 NAT 模式,那么,在 IPv4 選項(xiàng)卡,就只需要選擇 DHCP 就行了,不用配置 IP 地址(自動(dòng)分配10.0.2.x)。這個(gè)是虛擬機(jī)上外網(wǎng)的網(wǎng)絡(luò)。
在網(wǎng)卡二中,我們選擇的時(shí)僅主機(jī)模式,在 IPv4 選項(xiàng)卡中,需要配置靜態(tài) IP(網(wǎng)關(guān)可以不用配置),用于各個(gè)機(jī)器間互相訪問(wèn)。這個(gè)是宿主和虛擬機(jī)之間的局域網(wǎng)。
還需要在IPv4選項(xiàng)卡中的「路由…」按鈕中 勾選「僅將連接用于相應(yīng)的網(wǎng)絡(luò)上的資源」 這樣當(dāng)兩個(gè)網(wǎng)絡(luò)同時(shí)啟用時(shí),訪問(wèn)外網(wǎng)就不會(huì)用網(wǎng)卡二的網(wǎng)關(guān)了。否則可能訪問(wèn)外網(wǎng)使用網(wǎng)卡二的網(wǎng)關(guān)192.168.56.1,那么將不能訪問(wèn)外網(wǎng)。
虛擬機(jī)配置網(wǎng)絡(luò)
現(xiàn)在,你可以在虛擬機(jī)(192.168.56.2)中ping通外網(wǎng)(如youthlin.com)、其他配置好的虛擬機(jī)(192.168.56.3)、宿主機(jī)(192.168.56.1)。
然后就是準(zhǔn)備安裝 Hadoop 了。
- Open-SSH
- JDK7+
- Hadoop2.7.3
ssh 就是配置免密碼登錄。
- ssh-keygen -t rsa
生成公鑰私鑰密鑰對(duì),把公鑰 id_rsa.pub 導(dǎo)入目標(biāo)主機(jī)的 authorized_keys 文件中,那么本機(jī)就可以免密碼登錄目標(biāo)主機(jī)。
Hadoop 2.7 需要 JDK7+ 版本,我是在 Oracle 網(wǎng)站上下載 JDK 然后解壓的。只需在 /etc/profile 要配置 JAVA_HOME 就可以了。
Hadoop 我下載的是當(dāng)前 2.7.3 版本,解壓在 /opt/ 文件夾下。
- chown -R xxx /opt
xxx 為你需要的用戶(hù)名,意思是把 /opt 文件夾授權(quán)給 xxx 用戶(hù)。
配置文件全在 $HADOOP_HOME/etc/hadoop下
- exportJAVA_HOME=xxx
- exportHADOOP_HOME=xxx
- exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
這三個(gè)環(huán)境變量在 profile 里也要配置一下,把 $JAVA_HOME/bin、$HADOOP_HOME/bin 加入 PATH,注銷(xiāo)再登錄生效。
- core-site.xml
- hdfs-site.xml
- mapred-site.xml.template
- slaves
這幾個(gè)文件具體配置自行搜索吧,我也不太確定咋配??煽聪路絽⒖兼溄?。
先在 HADOOP_HOME 下新建了 tmp、name、data 文件夾, hadoop.tmp.dir 設(shè)為 tmp, dfs.namenode.name.dir 設(shè)為 name的路徑, dfs.datanode.data.dir 設(shè)為 data的路徑。暫時(shí)沒(méi)有用到 yarn.xml 等以后搞明白了在研究……
所有機(jī)器都這樣配置。然后就算配置好了環(huán)境~
準(zhǔn)備啟動(dòng)之前需要先格式化 HDFS. 這是 Hadoop 用的分布式文件系統(tǒng),理解為 NTFS、ext4 之類(lèi)的就行了,只不過(guò) HDFS 里的文件時(shí)存在多臺(tái)機(jī)器上的。
- hdfsnamenode -format
Exiting with status 0就表示執(zhí)行成功了。
啟動(dòng)使用的命令在 $HADOOP_HOME/sbin 下,用 start-dfs.sh 和 start-yarn.sh 啟動(dòng) Hadoop
- hdfs dfs -ls
- hdfs dfs -put
- hdfs dfs -cat
用于列出HDFS里文件、上傳本地文件到HDFS、輸出HDFS里文件內(nèi)容。
Hadoop自帶的網(wǎng)絡(luò)界面
測(cè)試安裝是否成功用 WordCount 檢測(cè)。(此時(shí)可以訪問(wèn) http://master:50070/ 為了方便可以把 master/slave1 的 IP 放在/etc/hosts 里)
首先在 master 里隨便準(zhǔn)備一個(gè)文本文件,比如叫做 words,內(nèi)容就是幾個(gè)單詞。
然后再
- hdfs -dfs -put /path/to/words /test/words
這樣就把 words 文件放入 HDFS 文件系統(tǒng)了。
在 HADOOP_HOME 執(zhí)行:
- hadoopjarshare/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/words /test/out
記執(zhí)行單詞計(jì)數(shù)統(tǒng)計(jì)程序,/test/words 為輸入文件,/test/out 為輸出目錄,其中輸出目錄的父目錄必須存在,否則報(bào)異常,slave 里 hadoop-env.sh 沒(méi)配置 JAVA_HOME 也會(huì)報(bào)異常。退出碼為 0 表示執(zhí)行成功。
運(yùn)行結(jié)果
這樣就算安裝成功啟動(dòng)成功了,jps 命令可以看到運(yùn)行中的 Java 進(jìn)程。下一步有空的話(huà)再看書(shū)學(xué)習(xí)~