1. 程式人生 > >Win10平臺下搭建hadoop分散式系統

Win10平臺下搭建hadoop分散式系統

1、安裝Oracle VM VirtualBox

2、在VirtualBox虛擬中新增3個虛擬主機,分別命令為Linux1,Linux2,Linux3

注:我們建的虛擬主機都是Ubuntu版本的Linux主機

3、在設定>儲存>虛擬光碟機中新增Ubuntu映象

注:如果沒有虛擬光碟機,可以自己新增一個留空的虛擬光碟機,如下圖:

4、虛擬機器網路設定

1)在新建虛擬電腦的時候,預設只設置了網絡卡1,如下圖:

注:網路地址轉換(NAT)的時候,如果主機插了網線,虛擬機器可以正常上網.但是如果虛擬機器中有多個虛擬電腦,則它們的ip都相同,格式為:10.0.x.x

2)

如果要裝hadoop叢集的話,我們希望每個節點都有一個私有ip,以實現他們的互聯

3)因此,我們可以給虛擬主機新增一個網絡卡2,此網絡卡連線方式為Host-Only,這種模式下,每個虛擬主機都會分配一個獨立的ip,如下:

注:僅主機(Host-Only)介面卡這種方式會給每個虛擬電腦分配一個獨立ip,這個ip在主機的VirtualBox Host-Only Network的ip網段內.

4)我搭建的分散式叢集式在win10平臺下進行的,由於VirtualBox不相容win10,在安裝VirtualBox的時候不會在主機中建立Host-Only連線,換了幾個版本的BirtualBox,有的能建立,但是Host-Only方式依然找不到介面名稱。因為我們網絡卡2設定為Nat方式。如下介紹。

5)如何配置一個Nat網路。

1.在VirtualBox主介面>管理>全域性設定>網路>Nat網路>新增一個Nat網路

2.在虛擬主機設定>網路>網絡卡2中的連線方式選則Nat網路,介面名稱選擇剛才建立的Nat網路。

注:1/3臺虛擬主機的網絡卡2的介面名稱都必須選同一個Nat網路。

   2/如果系統中本來存在Nat網路,可以不重建,每個虛擬主機選則同一個即可。

截圖如下:

6)這樣的網路設定,可以保證虛擬機器既可以上網,又有私有ip.

5、啟動虛擬主機,安裝Ubuntu作業系統

注:每臺主機的姓名要相同,計算機名必須不同。我們這裡計算機名取f1,f2,f3

6、耐心等待Ubuntu作業系統安裝完成!!!

7、虛擬主機和主機之間實現雙向拖放和共享貼上板以及資料夾。(非必需步驟)

1)導致這些問題的原因是Linux中沒有安裝增強功能

2)安裝增強功能,點選->裝置>>安裝增強功能

3)如果點選安裝增強功能提示沒有虛擬光碟機,則在VirtualBox中新增一個留空的虛擬光碟機即可.如下圖:

8、在每個Ubuntu系統中安裝jdk

1)官網下載後是一個jdk-8u51-linux-x64.tar.gz的壓縮包

2)sudo tar -zxvf jdk-8u51-linux-x64.tar.gz解壓得到jdk1.8.0_51資料夾

3)執行命令sudo gedit /etc/profile,開啟etc下的profile檔案,在檔案最後新增環境變數。

export JAVA_HOME=/usr/java/jdk1.8.0_51

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

4)在終端輸入命令source profile重新載入環境變數,輸入java命令測試安裝結果,如果不行請重啟電腦再試。

9、配置hosts檔案

1)在每臺虛擬主機的終端輸入ifconfig命令檢視本機ip

2)由於我是在win10平臺,用的是Nat網路,所以每臺主機分配的ip為:

10.0.2.4;10.0.2.5;10.0.2.6.

3)執行sudo gedit /etc/hosts命令開啟hosts檔案,在host檔案中新增每臺主機名以及它們的ip,如下圖紅框:

注:3臺虛擬主機都得配置hosts檔案。

10、建立使用者組、新使用者(前面按照要求安裝Ubuntu的,這步可省略)

1)如果前面在安裝Ubuntu的時候,3臺虛擬主機的使用者名稱都相同並且主機名都不相同,那麼此步驟可以省略,我們可以直接使用當前的使用者和主機。

2)建立使用者組

sudo groupadd hadoop

3)建立使用者

sudo useradd -s /bin/bash -d /home/fim -m fim -g hadoop -G admin

-s:指定使用者的登陸shell

-d:指定使用者主目錄

-m:如果指定的主目錄不存在,則建立主目錄

-g:指定使用者所屬的使用者組,用“,”分隔多個附加組

-G:指定使用者所屬的附加組

4)如果系統報admin組不存在,那麼我們需要給hadoop使用者組分配許可權,否則,該組使用者不能執行sudo操作。如:給hadoop使用者組賦sudo許可權:

1.開啟/etc/sudoers檔案

2.新增%hadoop ALL=(ALL) ALL

3.截圖如下:

5)建議我們在安裝Ubuntu的時候就建好使用者名稱,這樣省得麻煩,否則在以後的分散式搭建過程中都得切換到新建的使用者名稱下。

11、配置ssh免密碼登陸

1)Ubuntu預設只安裝了openssh-client,沒有安裝spenssh-server。檢視程序如下圖:

2)執行命令:sudo apt-get install openssh-server安裝,完成後程序如下:

注:如果安裝時報錯說:openssh-server 還沒有可供安裝的候選者,請執行sudo apt-get update更新apt-get。

3)生成ssh公鑰和私鑰

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

注:1/如果生成過程中報.ssh目錄不存在,可以自己在~下建立該目錄

2/linux中“~”表示使用者目錄,比如此處就表示/home/fim

4)檢視.ssh目錄下生成的檔案

注:id_dsa.pub就是生成的公鑰

5)將公鑰加入自己所認證的金鑰之中

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

注:1/此處如果切換到.ssh目錄下,也可以執行cat id_dsa.pub >>authorized_keys

2/cat命令中,">>"符號表示追加,">"表示建立,千萬別搞錯了。

3/此處命令表示將id_dsa.pub檔案內容追加到authorized_keys檔案末尾

4/此處也可以用cp id_dsa.pub authorized_keys替代,因為authorized_keys檔案還沒有建立,如果檔案不存在,cat和cp命令都會預設建立檔案,cp命令表示將檔案內容拷貝到另個檔案中,需注意的是會覆蓋原檔案內容。

注:此處我們用的cp命令拷貝後再檢視檔案就多了一個authorized_keys檔案

6)執行ssh localhost命令連線本機

注:如果報錯connect to host localhost port 22: Connection refused就是因為我們沒有安裝openssh-server

7)3臺虛擬主機都執行上面的操作

8)將f1主機的公鑰拷貝到f2,f3主機.ssh目錄下,使用scp命令,s=security

scp [email protected]:~/.ssh/id_dsa.pub ~/.ssh/h1_dsa.pub

檢視拷貝後目錄

注:1/此處可以用@主機名的方式訪問遠端主機,就是因為前面配置了hosts,否則此處要寫ip,顯得更加麻煩

2/訪問遠端主機需要輸入密碼,其實每次訪問遠端主機都需要輸入一次密碼,這就是我們配置ssh免密碼登陸的原因。

9)將拷貝過來的檔案新增到我們所認證的金鑰之中

cat f1_dsa.pub >> authorized_keys

10)切換到f1主機,用命令ssh f2登陸f2主機,你會發現此時已經不再需要輸入f2了,登陸f3也一樣。

登陸之後,f1主機的命令列路徑是這樣,也就是說當前使用者是f2主機的fim

注:exit命令退出遠端主機。

11)在f1主機中,通過遠端訪問的方式,將f1的公鑰拷貝過來並新增到認證金鑰中。

scp [email protected]:~/.ssh/id_dsa.pub ~/.ssh/f1_dsa.pub

cat~/.ssh/f1_dsa.pub >> ~/.ssh/authorized_keys

此處有點迷茫,這樣理解:這命令是為了保證NameNode能夠無密碼連入自己本機。也可以說是NameNode能夠無密碼訪問JobTracker。其實我是不明白這操作有什麼意義,因為這操作僅僅讓authorized_keys多了一段同樣的金鑰而已。

12)自此,ssh免密碼登陸就配置好了。

12、下載並解壓hadoop安裝包

1)將解壓後的包命名為hadoop,並將其移動到/usr/java目錄下

2)配置環境變數,執行sudo gedit /etc/profile開啟profile檔案,新增下面變數,儲存

export HADOOP_HOME=/usr/java/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

3)執行source /etc/profile載入配置檔案

4)終端執行echo $HADOOP_HOME,如果輸出hadoop安裝路徑,則表示配置成功

13、配置hadoop

1)修改 hadoop-env.sh

export JAVA_HOME=/usr/java/jdk

2)修改core-site.xml

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/fim/hdfs/hadooptmp</value><!--快取路徑-->

</property>

<property>

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

<value>hdfs://f1:9000</value><!--namenode主機名/ip-->

</property>

</configuration>

3)修改hdfs-site.xml

<configuration>

<property>

<name>dfs.name.dir</name>

<value>/home/fim/hdfs/name</value><!--NN所使用的元資料儲存-->

</property>

<property>

<name>dfs.data.dir</name>

<value>/home/fim/hdfs/data</value><!--真正的datanode資料儲存路徑-->

</property>

<property>

<name>dfs.replication</name>

<value>2</value><!--檔案備份數量-->

</property>

</configuration>

4)修改mapred-site.xml

<configuration>

<property>

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

<value>h1:9001</value><!--主機名/ip-->

</property>

</configuration>

5)修改masters和slaves,在masters檔案中加上namenode的主機名(ip),在slaves中加上datanode的主機名(ip)

#masters

f1

#slaves

f2

f3

14、將配置好的hadoop拷貝到各個子節點

1)將hadoop拷貝到f2節點

scp -r /usr/java/hadoop f2:~/java/hadoop

2)將hadoop拷貝到f3節點

scp -r /usr/java/hadoop f3:~/java/hadoop

注:1.-r表示拷貝目錄,不加-r表示拷貝的是檔案

   2.scp命令拷貝時,只能拷貝到使用者目錄下,即:~/下

3)配置各子節點的hadoop環境變數

4)到此,我覺得我們的hadoop安裝目錄最好在使用者目錄為好。

15、將hadoop安裝目錄所有許可權給當前使用者

sudo chown -R fim hadoop

注:-R表示向下遞迴,表示hadoop的所有子目錄

16、格式化NameNode、啟動hadoop

hadoop namenode -format

start-all.sh

17、檢驗 hadoop 的啟動情況

1)用jps命令檢查hadoop啟動情況

NameNode:

DataNode:

2)http://10.0.2.4:50070檢查是否加入了新的 datanode

3)http://10.0.2.4:50030檢查 map reduce的執行情況  

附:

一、VirtualBox共享資料夾掛載

1)建立掛載點mkdir home/fim/software

2)掛載共享資料夾sudo mount -t vboxsf BaiduShare home/fim/software

二、change該目錄包括子目錄的使用者(owner)

sudo chown -R 使用者名稱:所屬組  目錄