用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己搭一个玩玩,也熟悉一下整体架构。
整体环境:
主机Win7 i5 4核 8G内存 笔记本;
虚拟机(客户机)采用Centos5.9 ( 用这个的原因是不想用图形界面,并且以后还想试着装一下ICE)
3台互联的虚拟机搭建Hadoop集群:
virtualbox V4.2.18 下载地址:
Centos 5.9 下载地址(共9个iso文件):http://mirror.bit.edu.cn/centos/5.9/isos/x86_64/
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
要求: 在任何环境下主机和客户机都要能够联通,正常工作。包括:笔记本插网线;笔记本不插网线;笔记本联通无线网络;笔记本完全没有网络等情况。
最复杂的情况是笔记本既没有有线网也没有无线网络且没有插网线的情况,这种情况下必须采用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的连接是通过机器名来做的
(此步如果centos自带了1.6的jdk的话,可以省略,但是要找到java的安装路径,因为后面配置环境变量要用)
<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
$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
执行:【vi /etc/sysconfig/network】
修改:HOSTNAME=slave1 和 HOSTNAME=slave2)
8192 Jps 6438 NameNode 6614 JobTracker
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