1. 程式人生 > >在VMWare中建立Hadoop虛擬叢集的詳細步驟(使用CentOS)

在VMWare中建立Hadoop虛擬叢集的詳細步驟(使用CentOS)

最近在學習Hadoop,於是想使用VMWare建立一個虛擬的叢集環境。網上有很多參考資料,但參照其步驟進行設定時卻還是遇到了不少問題,所以在這裡詳細寫一下我的配置過程,以及其中遇到的問題及相應的解決方法。一來做個記錄,二來也希望能幫到大家。

目標

我們要建立一個具有如下配置的叢集:

 host name   ip address   os
1  master  192.168.224.100  CentOS
2  slave1  192.168.224.201  CentOS
3  slave2   192.168.224.202   CentOS

其中master為name node和job tracker節點,slaveN為data node和task tracker節點。

步驟

1. 配置虛擬網路

如果你對VMWare和網路配置比較熟悉,可以忽略這一步,但是後面配置IP地址時具體的引數可能和我說的不一樣。如果你想通過一步一步操作就能成功的話,就需要這些設定

通過VMWare -> Edit -> Virtual Network Editor開啟如下對話方塊:

在上面的列表中選中VMnet8 NAT那一行,然後按圖設定所有內容,之後點選NAT Setting按鈕,開啟如下對話方塊,確保各個引數如圖中所示設定。

2. 建立虛擬機器

虛擬機器命名為master,建立過程中網路模式可以任意選擇,下面假設選擇的是NAT方式。需要額外注意的是去【控制面板/管理工具/服務】中看一下VMWare相關的服務是否都已經啟用,我就曾因為NAT服務沒有啟用,而造成各個虛擬機器之間無法ping通,而浪費了很多時間。

到http://www.centos.org/中下去CentOS的iso映象,使用minimal版本就可以,這樣能效的控制虛擬機器的大小。

然後就是虛擬機器安裝的過程了,我們不需要安裝VMWare Tools。而且這時不需要建立多臺虛擬機器,我們將統一配置一臺虛擬機器,然後複製出其它虛擬機器,後面的詳細的說明。

後面的步驟中我們假設使用root登入虛擬機器,密碼假設為hadoop。

2. 配置網路

關掉SELINUX:vi /etc/selinux/config ,設定SELINUX=disabled,儲存退出。

關閉防火牆:/sbin/service iptables stop;chkconfig --level 35 iptables off 

修改IP地址為靜態地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0,將其內容改為如下圖所示,注意HWADDR那一行,你所建立的虛擬機器的值很可能與之不同,保持原值,不要修改它!

修改主機名稱:vi /etc/sysconfig/network,將其內容改為如下圖所示:

修改hosts對映:vi /etc/hosts,將其內容改為如下圖所示。我們在這裡就加入了slave1和slave2的對映項,以簡化後面的步驟。

執行:service network restart 以重啟網路。

3. 安裝putty

我使用這個工具將windows中的檔案傳到虛擬機器中,因為使用wget下載相應的軟體包比較困難。

從http://www.putty.org/下載putty套件,解壓到你喜歡的目錄就可以了,確保裡面有pscp.exe

4. 安裝JDK

從下面的地址下載JDK,檔名是jdk-6u26-linux-i586.bin,如果這個地址已經失效,你可以在oracle的網站上下載最新的版本。

http://download.oracle.com/otn/java/jdk/6u26-b03/jdk-6u26-linux-i586.bin

我是在windows下用迅雷下載的,假設下載後文件放在 e:\jdk-6u26-linux-i586.bin 這個位置,在虛擬機器開機的狀態下從windows中開啟命令提示符,執行如下命令(其中的pscp就是putty中的pscp.exe,所以你可能需要到相應的目錄中去執行,或者將其所在的目錄新增到PATH中):

pscp e:\jdk-6u26-linux-i586.bin [email protected]:~/

如果提示輸入密碼,就輸入虛擬機器中root帳戶的密碼(假設為hadoop)。

然後進入虛擬機器,執行如下命令:

mkdir -p ~/bin
mv ~/jdk-6u26-linux-i586.bin ~/bin
cd ~/bin
./jdk-6u26-linux-i586.bin

然後修改環境變數:vi ~/.bash_profile,在最後新增

export JAVA_HOME=/root/bin/jdk1.6.0_26
export PATH=$PATH:$JAVA_HOME/bin

儲存退出後,執行 source ~/.bash_profile 使配置生效,之後可以執行java命令以判斷是否已經配置成功。

5. 安裝Hadoop

從http://labs.renren.com/apache-mirror/hadoop/common/hadoop-0.20.2/中下載hadoop-0.20.2.tar.gz,放到~/bin目錄下(如果你是在windows下下載的,就通過上面的方法將其複製到虛擬機器中)。執行下列命令:

tar -xzvf hadoop-0.20.2.tar.gz
cd ~/bin/hadoop-0.20.2/conf
vi hadoop-env.sh

將JAVA_HOME一行的註釋去掉,並改為如下設定:

export JAVA_HOME=/root/bin/jdk1.6.0_26

然後新增環境變數 vi ~/.bash_profile ,使其內容如下所示(已經合併了前面關於JAVA的設定)

export JAVA_HOME=/root/bin/jdk1.6.0_26
export HADOOP_HOME=/root/bin/hadoop-0.20.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

現在就可以在shell中執行hadoop,以確定能正常執行了。下面還要對hadoop進行設定,所有要設定的檔案都在~/bin/hadoop-0.20.2/conf目錄下。如果你足夠懶的話,可以在windows下建立這幾個檔案,把相應的內容複製到檔案中,然後通過pscp.exe複製到虛擬機器中去。

core-site.xml的內容:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <name>Hadoop.tmp.dir</name>
    <value>/tmp/hadoop-root</value>
  </property>
</configuration>

hdfs-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>
</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>master:9001</value>
  </property>
</configuration>

slaves

slave1
slave2

masters的內容為空,此檔案用於配置secondary name node,我這次建立的叢集不需要此節點,如果需要的話可以將其主機名加入此檔案中(別忘了在/etc/hosts中加入相應的條目)。

6. 複製虛擬機器

使用VMWare中clone功能,複製出另外兩臺虛擬機器,分別命名為slave1和slave2。因為克隆出的虛擬機器網絡卡地址已經改變,所以要分別在複製出的兩臺虛擬機器中執行以下操作:

  • 執行:rm -f /etc/udev/rules.d/70-persistent-net.rules
  • 執行:reboot 重啟虛擬機器
  • 執行:vim /etc/sysconfig/networking/devices/ifcfg-eth0 將其中的 HWADDR修改為新虛擬機器的網絡卡地址,具體檢視方式為:在虛擬機器設定中選中Network Adapter,如下圖所示,選擇Advanced,如下圖紅框中所示即為網絡卡地址。


  • 同樣在此檔案中將IPADDR改為192.168.224.201(對於slave1)或192.168.224.202(對於slave2)。
  • 修改slave1和slave2的/etc/sysconfig/network檔案,將主機名改為slave1或者slave2。

7. 設定SSH

開啟三臺虛擬機器,登入到master中,執行如下命令:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
ssh slave1 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave1:~/.ssh/authorized_keys
ssh slave2 "mkdir ~/.ssh"
scp ~/.ssh/id_dsa.pub slave2:~/.ssh/authorized_keys

中間可能需要輸入密碼 ,按提示輸入即可。現在分別執行如下命令

ssh localhost
ssh slave1
ssh slave2

不需要再輸入密碼就對了。

8. 啟動Hadoop

執行HDFS格式化命令:hadoop namenode -format

在master虛擬機器中進入/root/hadoop-0.20.2/bin目錄,執行 ./start-all.sh 就OK了。

你可以在宿主機中開啟瀏覽器,指向 192.168.224.100:50070 檢視HDFS的資訊。

如果你是一步一步操作下來的,應該不會遇到什麼問題,如果有問題,歡迎一起來討論。