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 fim@f1:~/.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 fim@f1:~/.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 用戶名:所屬組 目錄