用了這么久的hadoop,只會使用streaming接口跑任務,各種調優還不熟練,自定義inputformat , outputformat, partitioner 還不會寫,於是干脆從頭開始,自己搭一個玩玩,也熟悉一下整體架構。
整體環境:
主機Win7 i5 4核 8G內存 筆記本;
虛擬機(客戶機)采用Centos5.9 ( 用這個的原因是不想用圖形界面,並且以后還想試着裝一下ICE)
3台互聯的虛擬機搭建Hadoop集群:
1. 選用virtualbox V4.2.18 + Centos 5.9
virtualbox V4.2.18 下載地址:
Centos 5.9 下載地址(共9個iso文件):http://mirror.bit.edu.cn/centos/5.9/isos/x86_64/
2. 安裝virtualbox 和 Centos5.9
3. hadoop集群用3台機器,拓撲如下:
master: ip:192.168.56.120
機器名: master
啟動NameNode
啟動JobTracker
slave1: ip: 192.168.56.121
機器名:slave1
啟動SecondaryNameNode
啟動DataNode
啟動TaskTracker
slave2: ip: 192.168.56.122
機器名:slave2
啟動DataNode
啟動TaskTracker
4. 配置Centos5.9
要求: 在任何環境下主機和客戶機都要能夠聯通,正常工作。包括:筆記本插網線;筆記本不插網線;筆記本聯通無線網絡;筆記本完全沒有網絡等情況。
最復雜的情況是筆記本既沒有有線網也沒有無線網絡且沒有插網線的情況,這種情況下必須采用host-only的方式。具體原因不細說,因為我也不清楚這四種網絡設置的區別到底有哪些 -_-!!!
配置方式參考:http://www.douban.com/group/topic/15558388/ 也可以google搜索 "virtualbox host-only unplug cable"
還是要說一下我對host-only 方式配置的理解:virtualbox安裝好之后在windows的”網絡和共享中心“ (XP系統叫做網上鄰居)中會出現一個新的虛擬網卡"VirtualBox Host-Only Network"。當虛擬機配置為host-only方式的時候,主機和虛擬機通過這個虛擬網卡進行通訊,因此無論主機的外部網絡如何,都能和虛擬機聯通。因此需要將虛擬機的ip設置到此虛擬網卡的網段內。
我的配置:
VirtualBox Host-Only Network ipv4設置: ip地址: 192.168.56.1
子網掩碼:255.255.255.0
centos ip設置: 參考:http://os.51cto.com/art/201001/177909.htm
執行:【vi /etc/sysconfig/network】
NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=master GATEWAY=192.168.56.1
執行:【vi /etc/sysconfig/network-scripts/ifcfg-eth0】
DEVICE=eth0 BOOTPROTO=static NM_CONTROLLED=yes TYPE=Ethernet IPADDR=192.168.56.120 HWADDR=08:00:27:XX:XX:XX NETMASK=255.255.255.0 NETWORK=192.168.56.0 ONBOOT=yes
執行:【vi /etc/resolv.conf】添加dns
nameserver 192.168.56.1
執行:【vi /etc/hosts】 設置本機名和靜態域名解析
127.0.0.1 master localhost ::1 master6 localhost6 #hadoop 192.168.56.120 master 192.168.56.121 slave1 192.168.56.122 slave2
執行:【vi /etc/hostname】 設置本機名
master
設置完成后運行:【service network restart】 重啟網絡服務以使設置生效。
測試設置是否成功: a) 從主機ping虛擬機 和 從虛擬機ping主機都要通。如果不通則需要關閉主機和虛擬機的防火牆。
b) 如果還不通則檢查virtualbox設置,如下圖紅圈的地方需要特別注意。
注意: 上面對機器的ip和機器名設置非常重要,因為hadoop的master與slave的連接是通過機器名來做的
5. 安裝ssh服務(比較簡單,google)
6. 為虛擬機添加hadoop賬戶
7. 安裝jdk1.6 (據說1.7有些問題)
(此步如果centos自帶了1.6的jdk的話,可以省略,但是要找到java的安裝路徑,因為后面配置環境變量要用)
8. 安裝hadoop
9. 配置hadoop
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop_tmp/</value> </property> </configuration>執行:【vi mapred-site.xml】 配置 JobTracker運行在master上的9001端口
<configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>執行:【vi hdfs-site.xml】 配置hdfs 備份數量(不能超過機器數)
<configuration> <property> <name>dfs.replication</name> <value>3</value> </property> </configuration>執行:【vi masters】 配置SecondaryNameNode;指定SecondaryNameNode運行在slave1上。
slave1執行:【vi slaves】 配置DataNode 和 TaskTracker
slave1 slave2
10. 配置環境變量
$HADOOP_HOME/bin
加入PATH
#配置java相關的環境變量 export JAVA_HOME=/usr/java/jdk1.6.0_35 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH #配置hadoop相關環境變量 export HADOOP_HOME=/home/hadoop/hadoop-1.2.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export CLASSPATH=$CLASSPATH:$HADOOP_HOME/hadoop-core-1.2.1.jar
11. 克隆兩台虛擬機(使用鏈接復制即可)並設置主機名和ip
執行:【vi /etc/sysconfig/network】
修改:HOSTNAME=slave1 和 HOSTNAME=slave2)
::1 master6 localhost6 --> ::1 slave16 localhost6 )
(對slave2修改:127.0.0.1 master localhost --> 127.0.0.1 slave2 localhost
::1 master6 localhost6 --> ::1 slave26 localhost6 )
12. 配置master ssh無密碼登陸到所有機器(包括本機)
13. 測試
8192 Jps 6438 NameNode 6614 JobTracker
執行:【ssh hadoop@slave1】
4606 DataNode 4692 SecondaryNameNode 5980 Jps 4784 TaskTracker
4283 TaskTracker 5437 Jps 4190 DataNode
drwxr-xr-x - hadoop supergroup 0 2013-10-07 22:14 /home