Win7下用virtualbox 虚拟3台虚拟机搭建hadoop集群
2013-10-07 23:53
761 查看
用了这么久的hadoop,只会使用streaming接口跑任务,各种调优还不熟练,自定义inputformat , outputformat, partitioner 还不会写,于是干脆从头开始,自己搭一个玩玩,也熟悉一下整体架构。
整体环境:
主机Win7 i5 4核 8G内存 笔记本;
虚拟机(客户机)采用Centos5.9 ( 用这个的原因是不想用图形界面,并且以后还想试着装一下ICE)
3台互联的虚拟机搭建Hadoop集群:
Centos 5.9 下载地址(共9个iso文件):http://mirror.bit.edu.cn/centos/5.9/isos/x86_64/
机器名: 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】
执行:【vi /etc/sysconfig/network-scripts/ifcfg-eth0】
执行:【vi /etc/resolv.conf】添加dns
执行:【vi /etc/hosts】 设置本机名和静态域名解析
执行:【vi /etc/hostname】 设置本机名
设置完成后运行:【service network restart】 重启网络服务以使设置生效。
测试设置是否成功: a) 从主机ping虚拟机 和 从虚拟机ping主机都要通。如果不通则需要关闭主机和虚拟机的防火墙。
b) 如果还不通则检查virtualbox设置,如下图红圈的地方需要特别注意。
![](http://img.blog.csdn.net/20131008001503781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdtb25zdGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意: 上面对机器的ip和机器名设置非常重要,因为hadoop的master与slave的连接是通过机器名来做的
看到有一个进程名为 sshd 的则安装成功。
测试ssh, 执行:【ssh localhost】需要输入密码
【passwd hadoop】
测试账户,执行:【su - hadoop】
下载jdk1.6 : http://download.oracle.com/otn-pub/java/jdk/6u35-b10/jdk-6u35-linux-x64-rpm.bin?AuthParam=1381058664_954e59f9391e5a0cf7ae446c5e0c7813 得到文件: jdk-6u35-linux-x64-rpm.bin
以 root账户登录
执行:【mkdir /usr/java】 (当然也可以是其他目录,此目录将作为java的安装目录,即为JAVA_HOME)
执行:【cd /usr/java】
执行:【rz -be】 #选择jdk文件上传到 /usr/java 目录下
执行:【./jdk-6u35-linux-x64-rpm.bin】
此时虽然安装完成了jdk,但是如果centos自带的java没有被卸载掉的话,使用java -version 还是会检测到老版本java, 因为还没有配置环境变量。
得到文件:hadoop-1.2.1-bin.tar.gz
执行: 【su - hadoop】
执行:【cd 】 #切换到hadoop账户的根目录
执行:【tar -zxvf hadoop-1.2.1-bin.tar.gz】 # 解压,解压后会出现 hadoop-1.2.1 目录
执行:【vi hadoop-env.sh】
找到JAVA_HOME那一行,取消注释并配置为:export JAVA_HOME=/usr/java/jdk1.6.0_35
执行:【mkdir /home/hadoop/hadoop_tmp】 为下一步做准备
执行:【vi core-site.xml】 配置NameNode节点运行在master上的9000端口和hadoop临时目录
执行:【vi mapred-site.xml】 配置 JobTracker运行在master上的9001端口
执行:【vi hdfs-site.xml】 配置hdfs 备份数量(不能超过机器数)
执行:【vi masters】 配置SecondaryNameNode;指定SecondaryNameNode运行在slave1上。
执行:【vi slaves】 配置DataNode 和 TaskTracker
执行:【cd 】 #切换到hadoop账户的根目录
执行:【vi .bashrc】设置环境变量
以root 身份分别登陆到克隆得到的2台虚拟机上。
执行:【vi /etc/sysconfig/network】
修改:HOSTNAME=slave1 和 HOSTNAME=slave2)
/etc/sysconfig/network-scripts/ifcfg-eth0
(修改:IPADDR=192.168.56.121 和 IPADDR=192.168.56.122)
/etc/hosts
(对slave1修改:127.0.0.1 master localhost --> 127.0.0.1 slave1 localhost
::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 )
/etc/hostname (修改: master --> slave1 和 slave2 )
执行:【ssh -keygen -t rsa】 会在.ssh目录下生成 id_rsa id_rsa.pub known_hosts 三个文件。
执行:【cd .ssh】
执行:【cp id_rsa.pub authorized_keys】
测试是否可以无密码登录:
执行:【ssh hadoop@master】 第一次运行时会有一个选择,填yes, 如果不需要输入密码则成功。
执行:【scp authorized_keys hadoop@slave1:~/.ssh】
执行:【scp authorized_keys hadoop@slave2:~/.ssh】
测试是否可以从master无密码登录到slave1 和 slave2上:
执行:【ssh hadoop@slave1】 若有个选项则填yes, 如果不需要输入密码则表示成功。
以hadoop登录到master
执行:【hadoop namenode -format】 # 此步只需执行一次即可,不需要每次启动都执行
执行:【start-all.sh】
执行:【jps】 查看java进程得到结果:
执行:【ssh hadoop@slave1】
执行:【jps】
执行:【ssh hadoop@slave1】
执行:【jps】
执行:【hadoop fs -ls /】
Oh my god! 终于完成了!!!
检查文件系统 hdfs:
执行:【hadoop fs -ls /】
执行:【hadoop fs -put xxx 】 #会将文件上传到用户的根目录
执行:【hadoop fs -ls 】 #正常情况会看到文件
检查NameNode:
打开浏览器,输入网址:http://192.168.56.120:50030/jobtracker.jsp 进入hadoop任务监控页。 正常情况会看到下图:
![](http://img.blog.csdn.net/20131014212504812?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdtb25zdGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
检查datanode:
浏览器中输入:http://192.168.56.120:50070 打开datanode监控页,正常情况会看到下图:
![](http://img.blog.csdn.net/20131014212526125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHdtb25zdGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
ok,上面都是正常情况,万一遇到不正常的情况改如何查呢? 每个人可能遇到不同的问题,或者同样的错误的原因不一样,所以并没有通用的解决办法,但是万变不离其宗。 这个宗就是hadoop的日志。
在hadoop的安装路径下有一个logs文件夹,里面有很多log,比如:hadoop-hadoop-jobtracker-master.log 一般hadoop出现问题的时候日志都在这里。
如果出现问题,比如上面两张图中显示的Nodes数为0, 那么就可以到master 和 slave1 slave2上的日志里找问题,找到报错信息后再google就可以了。
举例:
我碰到过live nodes 数为0的情况, 查日志发现slave节点找不到master,但是在slave上ping master还能ping通,也可以ssh成功,然后google了一下,说hosts配置有问题,于是把hosts配置改成如下:
其余全部注释掉,就ok啦。
整体环境:
主机Win7 i5 4核 8G内存 笔记本;
虚拟机(客户机)采用Centos5.9 ( 用这个的原因是不想用图形界面,并且以后还想试着装一下ICE)
3台互联的虚拟机搭建Hadoop集群:
1. 选用virtualbox V4.2.18 + Centos 5.9
virtualbox V4.2.18 下载地址:http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88781-Win.exeCentos 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)
安装完成后执行:【ps -ef | grep ssh】看到有一个进程名为 sshd 的则安装成功。
测试ssh, 执行:【ssh localhost】需要输入密码
6. 为虚拟机添加hadoop账户
以root账户登陆:执行 【useradd hadoop】【passwd hadoop】
测试账户,执行:【su - hadoop】
7. 安装jdk1.6 (据说1.7有些问题)
(此步如果centos自带了1.6的jdk的话,可以省略,但是要找到java的安装路径,因为后面配置环境变量要用)下载jdk1.6 : http://download.oracle.com/otn-pub/java/jdk/6u35-b10/jdk-6u35-linux-x64-rpm.bin?AuthParam=1381058664_954e59f9391e5a0cf7ae446c5e0c7813 得到文件: jdk-6u35-linux-x64-rpm.bin
以 root账户登录
执行:【mkdir /usr/java】 (当然也可以是其他目录,此目录将作为java的安装目录,即为JAVA_HOME)
执行:【cd /usr/java】
执行:【rz -be】 #选择jdk文件上传到 /usr/java 目录下
执行:【./jdk-6u35-linux-x64-rpm.bin】
此时虽然安装完成了jdk,但是如果centos自带的java没有被卸载掉的话,使用java -version 还是会检测到老版本java, 因为还没有配置环境变量。
8. 安装hadoop
下载hadoop安装包:http://mirrors.ustc.edu.cn/apache/hadoop/common/stable/hadoop-1.2.1-bin.tar.gz得到文件:hadoop-1.2.1-bin.tar.gz
执行: 【su - hadoop】
执行:【cd 】 #切换到hadoop账户的根目录
执行:【tar -zxvf hadoop-1.2.1-bin.tar.gz】 # 解压,解压后会出现 hadoop-1.2.1 目录
9. 配置hadoop
执行:【cd hadoop-1.2.1/conf】执行:【vi hadoop-env.sh】
找到JAVA_HOME那一行,取消注释并配置为:export JAVA_HOME=/usr/java/jdk1.6.0_35
执行:【mkdir /home/hadoop/hadoop_tmp】 为下一步做准备
执行:【vi core-site.xml】 配置NameNode节点运行在master上的9000端口和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,并将$HADOOP_HOME/bin加入PATH
执行:【cd 】 #切换到hadoop账户的根目录
执行:【vi .bashrc】设置环境变量
#配置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
( 放在这里进行克隆是因为hadoop集群中的所有机器的java 和 hadoop的安装路径必须都一样)以root 身份分别登陆到克隆得到的2台虚拟机上。
执行:【vi /etc/sysconfig/network】
修改:HOSTNAME=slave1 和 HOSTNAME=slave2)
/etc/sysconfig/network-scripts/ifcfg-eth0
(修改:IPADDR=192.168.56.121 和 IPADDR=192.168.56.122)
/etc/hosts
(对slave1修改:127.0.0.1 master localhost --> 127.0.0.1 slave1 localhost
::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 )
/etc/hostname (修改: master --> slave1 和 slave2 )
12. 配置master ssh无密码登陆到所有机器(包括本机)
在master上用hadoop账户登录。执行:【ssh -keygen -t rsa】 会在.ssh目录下生成 id_rsa id_rsa.pub known_hosts 三个文件。
执行:【cd .ssh】
执行:【cp id_rsa.pub authorized_keys】
测试是否可以无密码登录:
执行:【ssh hadoop@master】 第一次运行时会有一个选择,填yes, 如果不需要输入密码则成功。
执行:【scp authorized_keys hadoop@slave1:~/.ssh】
执行:【scp authorized_keys hadoop@slave2:~/.ssh】
测试是否可以从master无密码登录到slave1 和 slave2上:
执行:【ssh hadoop@slave1】 若有个选项则填yes, 如果不需要输入密码则表示成功。
13. 测试
OK, 到此为止所有配置都已完成,来测试一下是否可以启动hadoop集群。以hadoop登录到master
执行:【hadoop namenode -format】 # 此步只需执行一次即可,不需要每次启动都执行
执行:【start-all.sh】
执行:【jps】 查看java进程得到结果:
8192 Jps 6438 NameNode 6614 JobTracker
执行:【ssh hadoop@slave1】
执行:【jps】
4606 DataNode 4692 SecondaryNameNode 5980 Jps 4784 TaskTracker
执行:【ssh hadoop@slave1】
执行:【jps】
4283 TaskTracker 5437 Jps 4190 DataNode
执行:【hadoop fs -ls /】
drwxr-xr-x - hadoop supergroup 0 2013-10-07 22:14 /home
Oh my god! 终于完成了!!!
14. 错误检查
有时候上面检查虽然成功了,但是其实是假的,根本没法跑任务。因此要确切的知道hadoop是否真的可以跑任务。检查文件系统 hdfs:
执行:【hadoop fs -ls /】
执行:【hadoop fs -put xxx 】 #会将文件上传到用户的根目录
执行:【hadoop fs -ls 】 #正常情况会看到文件
检查NameNode:
打开浏览器,输入网址:http://192.168.56.120:50030/jobtracker.jsp 进入hadoop任务监控页。 正常情况会看到下图:
检查datanode:
浏览器中输入:http://192.168.56.120:50070 打开datanode监控页,正常情况会看到下图:
ok,上面都是正常情况,万一遇到不正常的情况改如何查呢? 每个人可能遇到不同的问题,或者同样的错误的原因不一样,所以并没有通用的解决办法,但是万变不离其宗。 这个宗就是hadoop的日志。
在hadoop的安装路径下有一个logs文件夹,里面有很多log,比如:hadoop-hadoop-jobtracker-master.log 一般hadoop出现问题的时候日志都在这里。
如果出现问题,比如上面两张图中显示的Nodes数为0, 那么就可以到master 和 slave1 slave2上的日志里找问题,找到报错信息后再google就可以了。
举例:
我碰到过live nodes 数为0的情况, 查日志发现slave节点找不到master,但是在slave上ping master还能ping通,也可以ssh成功,然后google了一下,说hosts配置有问题,于是把hosts配置改成如下:
#hadoop 192.168.56.120 master 192.168.56.121 slave1 192.168.56.122 slave2
其余全部注释掉,就ok啦。
相关文章推荐
- virtualbox 虚拟3台虚拟机搭建hadoop集群
- hadoop2.7.1在vmware上3台centos7虚拟机上的完全分布式集群搭建
- VirtualBox下安装3台Ubuntu虚拟机,并搭建Hadoop
- Hadoop集群环境搭建(win7下vmware虚拟ubuntu)
- Hadoop虚拟集群的搭建
- hadoop环境搭建和在本地用虚拟机模拟分布式集群的搭建
- 虚拟机搭建Hadoop集群(1) ---nat模式
- Hadoop 2.6 集群搭建从零开始之1 Ubuntu虚拟机搭建
- 在window上使用VirtualBox搭建Ubuntu15.04全分布Hadoop2.7.1集群
- 搭建Hadoop环境(在winodws环境下用虚拟机虚拟两个ubuntu系统进行搭建)
- win7 搭建虚拟机Sun VirtualBox 装xp,安装arcgis,一些运行软件
- 用虚拟机在centOS系统搭建hadoop分布式集群(updating...)
- 虚拟机搭建Hadoop集群
- Hadoop集群搭建-虚拟机安装(转)(一)
- Win7 使用virtualbox安装centos虚拟机出现“不能为虚拟电脑 centos7 打开一个新任务.”的解决办法。
- Hadoop2.6集群环境虚拟机中搭建网络配置
- VirtualBox环境下基于多台ubuntu虚拟机的Hadoop分布式计算环境搭建
- 虚拟机VirtualBox 中 ubuntu13.04 安装Hadoop 集群
- 搭建VM的虚拟机下hadoop集群环境
- Hadoop2.7.1 集群环境搭建(虚拟机)