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)
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 使用者名稱:所屬組 目錄