本文将介绍搭建Hadoop2.x系列集群的主要过程和相关问题的解决,目的让Hadoop初学者能够快速地熟悉环境搭建以及上手mapreduce程序的开发。下面我们进入正题:
一、软件准备
- VMWare WorkStation 10: 自行百度搜索下载,也可以采用Virtual Box(但我在win7上安装老出现问题,没有成功);
- CentOS-6.5-i386-minimal.iso: 这里采用精简版,只安装运行集群所需要的软件,降低虚拟机资源消耗,也可以采用其他版本的linux系统,如ubuntu等;
- jdk-7u76-linux-i586.tar.gz:32位的linux版本的JDK1.7.*系列最新版,由自己主机操作系统的位数决定;
- hadoop-2.2.0.tar.gz: 当前Hadoop2.x的最新版本是2.7.0,稳定版本是2.6.0,本文采用hadoop-2.2.0;
- 备注: 以上涉及到的安装软件的位数必须和操作系统的位数保持一致,以防出现兼容性问题导致安装失败。
二、安装CentOS
在安装linux系统之前,需要先把虚拟机安装成功,这个过程很简单,不做陈述。
首先,进入到虚拟机页面,点击新建虚拟机,选择典型安装。下一步,这里一定要选择稍后安装操作系统,否则会进入到简易安装模式,导致安装的centos的无法启动。下一步,选择安装的linux系统的类型,这里选择centos即可。下一步,设置虚拟机的名称和安装的位置。
之后,需要对新建的虚拟机进行配置。包括设置硬盘的大小、内存的大小、网络适配器以及CentOS的iso的文件位置。其中网络适配器的网络连接设置为桥接模式(具体的将在后文介绍)。然后,开始运行该虚拟机进入安装操作,这里虚拟磁盘的分区是系统自动完成的。安装成功后,我们就进入了超级用户root账户的shell交互界面,起初是该root账户是没有密码的。
三、VM网络知识
我们设置网络的最终目的是让宿主机和虚拟机、虚拟机和虚拟机能够互相连通,并且都能够访问互联网。在虚拟机中,网络适配器的设置主要分为bridge(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)三种:
- Bridge:使用桥接模式,使得虚拟机和宿主机就像局域网中两台不同的PC机,只要将虚拟机的子网掩码、ip地址和网关配置成和宿主机同一网段内就可以相互通信,也就是通过Hub设备进行连接,由VMnet0来提供类似交换机的功能。在使用桥接模式时,如果想要虚拟机也可以访问互联网,会出现以下两种情况:
- 路由拨号上网:即通过路由器进行拨号,连上该路由器的设备都可以直接上网,那么宿主机和虚拟机都连在该路由器上都可以上网;
- 宽带拨号上网:该情况下,宿主机和虚拟机ping通,虚拟机之间也可ping通,宿主机拨号上网这时虚拟机就无法连接外网,需要将宿主机断网,在虚拟机配置拨号上网。
- 路由拨号上网:即通过路由器进行拨号,连上该路由器的设备都可以直接上网,那么宿主机和虚拟机都连在该路由器上都可以上网;
- Host-only:使用该模式,相当于虚拟机和宿主机通过双绞线进行连接,虚拟机的TCP/IP配置信息(如IP地址、网关地址、DNS服务器等),都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的;
- NAT:使用该模式,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟机访问互联网。NAT模式下的虚拟机的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟机也就无法和本局域网中的其他真实主机进行通讯。采用NAT模式最大的优势是虚拟机接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。
- 采用NAT的模式,实现宿主机和虚拟机的通信,并且都可以访问互联网。只需要将当前虚拟机的网络适配器模式设置为NAT,然后根据VMnet8中的网关、ip地址信息来配置虚拟机的信息,即将虚拟机的ip和VMnet8的ip配置在同一网段;
- 采用该方式,不管宿主机的网络环境如何变化,虚拟机的tcp/ip配置都不用改变;
- 备注:前提是一定要开启VMware NAT Service(该服务项是VMware安装后出现的windows服务)。
- 采用NAT的模式,实现宿主机和虚拟机的通信,并且都可以访问互联网。只需要将当前虚拟机的网络适配器模式设置为NAT,然后根据VMnet8中的网关、ip地址信息来配置虚拟机的信息,即将虚拟机的ip和VMnet8的ip配置在同一网段;
四、CentOS网络配置
选择NAT模式启动虚拟机,进入操作系统。通过workstation中的编辑>>虚拟网络编辑器查看VMnet0、1、8的相关信息,如图4.1所示,这里选择VMnet8查看NAT设置,如图4.2所示。
图4.1 虚拟网络编辑器界面
图 4.2 NAT设置
根据这些信息,我们需要在centos中编辑如下文件,来实现宿主机与虚拟机的通信,而且虚拟机可以借助宿主机访问互联网:
vi /etc/sysconfig/network-scripts/ifcfg-eth0 #设置tcp/ip信息
DEVICE=eth0
#HWADDR=00:0c:29:26:5d:7b
TYPE=Ethernet
#UUID=7c6effd8-d4a5-4be1-9cca-146eaad7efe4
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.50.101
NETMASK=255.255.255.0
GATEWAY=192.168.50.2
[hadoop@node1 ~]$ service network restart #重启网络服务
那么,为了搭建集群,接下来我们需要启动多个虚拟机,实现虚拟机之间的通信。首先,我这里采用VMmare Workstation的克隆功能,将之前安装过的CentOS-1重新克隆一份,重命名为CentOS-2,选择完全克隆。此时需要注意的是,完全克隆成功后,CentOS-2的网络配置信息是和CentOS-1一样的,但是在被克隆出来的机器的/etc/udev/rules.d/70-persistent-net.rules文件中,应该有两段PCI device的配置。第一条是原网卡的,name为eth0,mac是原来的mac。第二条为新网卡的,name为eth1,是新机器的网卡。只要把第一条删掉,把第二条的name改成eth0,然后重启虚拟机即可。
接下来,我们需要配置CentOS-2的ip地址信息:
另外为了方便宿主机和虚拟机以及虚拟机和虚拟机之间的通信,这里我们可以通过修改两个文件,来设置ip地址和主机名的映射关系:vi /etc/sysconfig/network-scripts/ifcfg-eth0 #设置tcp/ip信息
DEVICE=eth0
#HWADDR=00:0c:29:26:5d:7b
TYPE=Ethernet
#UUID=7c6effd8-d4a5-4be1-9cca-146eaad7efe4
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.50.102
NETMASK=255.255.255.0
GATEWAY=192.168.50.2
[hadoop@node2 ~]$ service network restart #重启网络服务
vi /etc/sysconfig/network #设置主机名称
NETWORKING=yes
HOSTNAME=node1[