工欲善其事,必先利其器。” 首先,还是和小讲一起搭建一个Hadoop环境吧。
Hadoop发行版本选择
从Hadoop官方网站可以看到,Hadoop最新版已经到2.7了。不过,据小讲所知,目前企业生产环境中2.2这个版本用得比较多,不少企业还停留在1.X等更低的版本,市面上很多教材采用的还是0.2X,1.X都极少, 对于初学者来说,小讲建议采用2.2版本,一方面接口已经是新的接口,使用起来没什么大的区别,另一方面也相对稳定,更重要的是,不会开发时找不到各种工具或插件导致学习无法进行,本产品《Hadoop大讲台》中前期的案例和讲解都采用的是2.2这个版本。
OK,我们之间有了个约定,Hadoop版本选择:2.2.0
Hadoop的安装模式
Hadoop的安装模式分为三种:单机模式、伪分布模式、全分布模式。
单机模式,这是默认的安装模式,也是占用资源最少的模式,配置文件不用修改。完全运行在本地,不与其它节点交互,也不使用Hadoop文件系统,不加载任何守护进程,主要用于开发调试MapReduce应用程序。
伪分布模式,即“单节点集群”模式,所有的守护进程都运行在同一台机子上。这种模式增加了代码调试功能,可以查看内存、HDFS的输入/输出,以及与其它守护进程之间的交互。
全分布模式,真正的分布式集群配置,用于生产环境。
前期学习,小讲建议还是使用伪分布模式安装,方便调试也省去了很多分布式环境下的麻烦问题干扰了自己的学习主线。本课程中,小讲会在中级阶段为同学安排分布式集群安装及维护的课程,现在我们的目标就是安装一个单节点的伪分布模式的Hadoop运行环境。
硬件要求
1台电脑,硬件方面:内存建议4G以上,空余硬盘30G以上。
hadoop 伪分布安装
Hadoop目前只能在Linux环境下运行,小讲知道,我们很多同学都是在Windows下学习和工作的,那么,我们要么用Cygwin在Windows下模拟Linux环境,要么搭Linux虚拟机。Cygwin模拟的方案还是不要用了,要学习我们就正式一点,还是踏踏实实玩Linux虚拟机吧。
如果从0开始搭建hadoop 伪分布集群,大致需要以下几个步骤。
第一步:在Windows上安装VMware Workstation,这个小讲就不细说了,不会的同学请看免费课程:VMWare 虚拟机的安装。
第二步:在VMware中安装一台Linux虚拟机,建议选用Centos6.5版本。
第三步:安装好centos系统后,进行网络配置。
第四步:安装好centos系统后,进行系统配置。
第五步:正式安装部署hadoop 伪分布集群。
中间的步骤如果大家已经搞定了,可以直接跳过。
接下来我们从第二步开始具体讲解。
第二步:CentOS6.5系统安装
1、首先打开网易开源镜像站: http://mirrors.163.com/
当然,大家也可以使用阿里开源镜像站:http://mirrors.aliyun.com/
2、点击进入centos目录。
3、因为我们选择安装centos6.5版本系统,所以点击进入6.5/目录
4、我们打开里面的readme文件,找到下载地址:http://vault.centos.org/。
5、打开下载地址。
6、点击进入6.5/目录。
7、点击进入isos/目录。
8、我们选择安装64位的centos系统,所以我们选择点击进入x86_64/目录。 当然,如果大家想安装32位的centos系统,可以选择 i386/目录。
9、这里我们选择点击进入CentOS-6.5-x86_64-bin-DVD1.iso,因为此时只是一个连接地址。
10、选择上面任何一个地址点击进入即可。
11、点击进入6.5/目录。
12、点击进入isos/目录。
13、点击进入x86_64/目录。
14、点击下载CentOS-6.5-x86_64-bin-DVD1.iso镜像文件就可以了。
15、点击虚拟机进行安装,点击创建虚拟机。
16、选择自定义安装。
17、下一步。
18、点击稍后安装操作系统。
19、选择安装Linux系统,Linux的版本选择64位。
20、设置好虚拟机的名称(比如,dajiangtai)及虚拟机的位置(选择一个安装目录),这里并不建议将其安装在C盘目录下,尽量安装在非系统盘中。
21、处理器数量以及其核心数量数,根据实际的需要进行修改,也可以选择默认,点击下一步。
22、设置虚拟机的内存,在这里选择默认的1G即可,根据需求也可以将其进行调整为2G,这样会更加流畅。此处选择默认,然后下一步。
23、在选择网络类型的时候,这里建议使用NAT服务地址转换,这样有利于虚拟机之间的通信。
24、选择默认,点击下一步。
25、磁盘类型也选择默认,点击下一步。
26、选择创建新的虚拟机磁盘。
27、最大磁盘选择默认即可,而下面的勾选框要去掉,否则立刻分配,对物理磁盘的消耗会是巨大的。最后选择将虚拟机拆分成多个文件,这样有利于复制。
28、选择默认即可。
29、默认Vmware会为虚拟机分配好多的硬件,我们点击自定义虚拟机的硬件,将不需要的硬件进行删除。
30、此时已经创建好名为dajiangtai的虚拟机,这时候我们要点击CD/DVD进行系统盘的加载,来安装Linux系统。
31、加载好之后,我们点击开启虚拟机进行安装。进入安装页面虚拟机会加载安装的光盘文件,并且提示安装,我们选择第一个选项即可。
32、这里提示找到光盘,是否要对光盘进行检查,我们选择跳过磁盘检查,因为下载的硬盘一般都是没有问题的,否则不会进入到安装页面,同时磁盘检查也会消耗大量的时间,所以我们点击Skip跳过即可。
33、正式进入CentOS的安装页面。
34、在语言选项这里,我们选择默认的English即可,因为中文容易出现乱码情况,不建议使用,同时很多操作本身还是英文的,所以我们就选择默认好啦。
35、这里选择的是键盘的类型,我们依然选择默认的美式键盘,防止出现错误。
36、这一步默认即可,选择Basic Storage Devices。
37、提示我们是否安装在此虚拟硬盘中,因为会抹除掉相关的信息,这里我们选择是的,因为这个虚拟磁盘相当于新的物理磁盘,我们直接清除即可。
38、这里设置主机名,我们可以自定义,比如 dajiangtai。
39、时区的话,我们选择默认即可。
40、这里是为root用户设置密码,我们可以自定义,比如 dajiangtai。
这里提示密码并不安全,因为Linux系统希望你设置的密码为组合式密码,所以建议你进行修改。当然,我们可以忽略提示,点击Use Anyway。
41、接下来提示我们如何进行系统的安装,我们选择使用磁盘的所有空间即可。
42、这里提示我们需要重新写入硬盘的相关信息,我们点击右侧的Write changes to disk。
系统开始设置硬盘。
43、这里是选择CentOS系统的安装类型及使用用途,新手的话建议选择Desktop模式,即会安装图形界面,但是考虑到我们学习Linux系统主要是通过命令行的方式来进行操作,并不需要图形界面,所以我们选择Minimal模式即可。
44、点击之后开始进行安装。
45、安装完成之后,我们选择Reboot重启即可。
46、重启之后我们发现屏幕黑黑,与我们常见的Windows系统的开机界面相当的不同,不过大家不用担心,你的电脑没坏,恭喜你Linux系统安装成功。
47、通过上面的欢迎页面我们可以看到CentOS的版本, 及内核的版本信息,然后我们输入,用户名:root,密码:dajiangtai,登录Linux系统。
48、Ok我们Linux系统已经安装完毕。
第三步:网络配置。
1、打开安装好的CentOS虚拟机dajiangtai。
2、登录到Centos系统。
3、输入ifconfig命令,先查看一下ip。
4、这个时候我们发现除了回环地址以外,我们并不能和外界通信,比如我们可以使用ping命令进行测试。
第一条的意思是ping百度,我们ping不通。
第二条是pingVMware虚拟机中NAT的网关,我们也ping不通,因为NAT的网关是192.168.20.2
大家也可以修改自己NAT模式的网关IP。
第三条是ping自己的物理机的地址,也ping不通。
但是回环地址能够ping通说明一个问题,那么就是我们虚拟机的网络协议是好的。
而Windows本机的网关地址(比如我的网关为:192.168.0.1,大家可以替换为自己的网关)是ping不通的,说明我们的网卡链路并没有通畅, 那么接下来就是就是通过配置网卡,我们使虚拟机可以和外部的网络进行通信。
5、我们使用vi命令,修改网卡的配置文件。
大家可以看到我们的网卡并没有开启,所以我们将其修改成yes,按Esc键,然后输入:wq保存退出。
6、这时候需要我们重启网络服务。
7、再次输入ifconfig命令,查看ip地址。
这时候大家发现,网卡已经成功开启。
8、我们再次尝试ping相关的地址。
本机网络协议检查:
本机网卡链路检查:
本机的NAT网关检查:
检查外部的连通性:
这说明我们现在已经和互联网打通,我们可以畅游在网络的海洋啦,好开心~ 啦啦啦。
9、Ok,那么简单的网络配置我们已经配置完毕, 然而在实际应用中,由于我们使用的DHCP服务器来分配的地址,那么ip地址有可能是会变动的。 而我们用Linux来搭建集群学习Hadoop的话,是希望IP固定不变的, 那么这个时候我们就需要配置静态IP,那么具体如何进行配置呢,接下来我们会介绍。
第四步:系统配置。
1、首先打开CentOS虚拟机。
2、通过ifconfig命令查看相关的IP地址。 因为我们使用Linux的远程连接工具,至少要知道IP地址是多少。 但此时我们还没有配置静态IP,IP地址可能会发生改变。
3、这时候我们可以使用Xshell客户端(如果不熟悉,可以观看:Linux连接工具-Xshell)来连接虚拟机, 当然大家也可以使用其它的客户端,这里建议使用Xshell。
4、连接之后,我们可以输入ifconfig命令来查看IP地址。
5、用户的设置。
在后面hadoop集群搭建的过程中,我们一般不直接使用超级用户root, 而是需要我们新建一个用户名称。那么我们现在就使用命令来创建一个新的用户吧, useradd命令,那么如何使用呢?那么直接输入useradd,就会返回该命令的使用帮助。
大家可以看到需要使用-m命令,来创建用户的home目录,那么我们使用如下的命令创建大讲台的普通用户。
然后我们进入home目录,就可以看到多了一个hadoop的目录, 这个就是普通用户hadoop的home目录了。这里我们可以使用su命令切换用户。
切换之后,我们进入自己的home目录,然后使用pwd命令查看当前目录, 可以看到/home下面的hadoop目录了。
Ok,那么创建完用户之后我们怎么删除呢, 这个时候就可以使用userdel命令来删除,输入userdel可以查看删除的相关帮助信息。
我们可以使用userdel –rf 命令,强制删除用户和对应的home目录。当然我们后面需要刚刚创建的用户,这里就不需要删除了。
Ok,那么以上就是关于用户的相关设置。
6、主机名的设置。
也就是修改hostname,它在/etc/sysconfig/network文件里面设置,我们使用vi命令进行编辑。
那么我们尝试进行修改,比如我们修改为djt(大家可以根据自己的习惯命名,当然也可以不用修改)。
然后保存退出。
咦~怎么没有变啊,是不是老师骗人啊! 其实不是的,是你们冤枉老师了,因为这个地方是需要重启才能更新主机名的。 那么我们使用reboot命令重启Linux系统,然后我们再来看一下。
Ok,这回显示正确了。
7、静态IP的配置。
我们虚拟机安装centos系统的时候,我们选择的是NAT模式(当然也可以选择桥接的模式等等), 无论是哪种模式,它的IP地址经常会变动,对我们后面搭建hadoop集群造成影响。 我们首先看一下NAT模式的相关配置信息。
我们可以使用vi /etc/sysconfig/network-scripts/ifcfg-eth0 命令来查看eth0的相关配置信息。
那么接下来我们就来配置一下静态IP地址。
我们需要修改和添加的有4个地方:
BOOTPROTO=static //由dhcp修改为static IPADDR=192.168.20.160 //可以自己设置,但必须与GATEWAY网段一致20 NETMASK=255.255.255.0 //默认设置 GATEWAY=192.168.20.2
NAT模式的GATEWAY请查看下图。
然后保存退出即可
重启网络服务service network restart
然后输入ifconfig进行查看。
发现IP地址已经改变。
8、关闭防火墙。
我们都知道防火墙对我们的服务器是进行一种保护, 但是有时候防火墙也会给我们带来很大的麻烦。 比如它会妨碍hadoop集群间的相互通信,所以我们需要关闭防火墙。 那么我们永久关闭防火墙的方法如下:
在命令行中输入: chkconfig iptables off
然后重启就可以了。
我们查看一下防火墙已经关闭了。
OK,防火墙的相关配置已经完毕。
9、相关服务的安装。
安装传输的利器lrzsz传输包。
root用户下,在命令行中输入yum install lrzsz
大家可以自己测试rz 上传、sz 下载文件。
安装openssh-server服务
输入ssh命令,则提示了ssh命令的使用方法。
OK,那么系统常用的配置就介绍到这里。
第五步:安装部署hadoop 伪分布集群。
在hadoop环境搭建之前,确保centos系统的网络配置正常、新用户已经创建、hostname已经设置、 静态IP已经设置、防火墙已经关闭、相关服务已经安装。
1、jdk安装
前面我们已经安装了64位的centos系统,所以我们的jdk也需要安装64位的。
创建安装目录/usr/java(当然,大家也可以使用其它目录)
大家注意:前面centos安装的时候,hostname为dajiangtai, 这里我换成了djt002,hostname大家可以自由修改,没有必要大惊小怪。当然大家可以直接使用dajiangtai就可以。
将下载好的jdk上传至/usr/java当前目录下。没有下载好的同学,可以点击下载
解压jdk安装包。
设置jdk环境变量,在/etc/profile.d目录下,新建一个java.sh脚本,添加如下内容。 当然配置jdk环境环境变量有很多种方式,大家也可以使用 vi /etc/profile 命令打开文件,添加相应的内容。
保存添加的内容并退出。
通过source使java.sh文件立即生效,如果能查看Java的版本号,代表jdk安装成功。
2、修改host文件,设置hostname与ip之间的映射关系。
大家注意:前面centos安装的时候,ip地址为192.168.20.160,这里我已经换了ip, ip变成了192.168.1.127, 大家没有必要大惊小怪。大家只需通过ifconfig命令查看当前ip地址, 然后设置hostname与ip之间的对应关系就可以了。当然大家直接使用前面配置的ip(192.168.20.160),没有问题。
3、配置ssh免密码
在hadoop用户下,切换到根目录。
[[email protected] root]$ cd [[email protected] ~]$
创建‘.ssh’目录。
[[email protected] ~]$ mkdir .ssh
生成秘钥,输入命令后,一直回车。
进入 .ssh 目录下。
将公钥拷贝到认证文件。
退回到根目录下,为.ssh赋予权限。
使用ssh 登录djt002,第一次登陆需要输入yes,第二次以后登录就不需要密码,此时表明设置成功
4、安装hadoop
在/usr/java目录下,在线下载hadoop2.2.0安装文件。
解压hadoop安装文件。
修改hadoop解压文件名称
将hadoop安装目录的权限赋值为hadoop用户。
创建Hadoop数据目录,并赋予权限。
进入hadoop安装目录的配置文件路径下。
修改core-site.xml配置文件
修改hdfs-site.xml配置文件。
修改mapred-site.xml配置文件。
修改yarn-site.xml配置文件。
修改slaves配置文件。
配置hadoop 环境变量。
使配置文件生效。
5、测试运行。
格式化NameNode
启动hadoop
出现以下进程说明hadoop启动成功。
通过webui访问文件系统。
在本地新建一个djt.txt文件并输入内容。
在hdfs文件系统中,新建一个dajiangtai目录并将本地djt.txt文件上传至该目录下。
通过webui查看hadoop作业运行情况。
让Wordcount飞起来。
通过webui查看作业正在运行情况。
在文件系统中查看作业最后运行结果。
关闭hadoop集群。
注意:大家在hadoop集群启动或者关闭的时候,最好使用命令正常关闭。
hadoop出现问题怎么办?
查看hadoop集群相关进程的启动情况。
如果哪个进程没有启动起来,我们可以查看对应进程的日志。 假如datanode没有启动,我们查看datanode对应的日志。
如果hadoop集群作业运行过程中出现问题怎么办?
可以查看作业运行日志,而且是userlogs目录中最大编号的文件目录。
环境搭建常见问题
1、报类似如下错误:org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /dajiangtai/djt.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation. at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget(BlockManager.java:1384)
参考答案:出现上述错误,一般是由于datanode没有启动。 解决方案:(1)首先关闭hadoop集群;(2)清空创建的/data目录;(3)格式化NameNode,重启hadoop集群。
2、报类似如下错误:FATAL namenode.NameNode: Exception in namenode join java.io.IOException: Cannot remove current directory: /data/dfs/name/current at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.clearDirectory(Storage.java:299)
参考答案:/data目录的权限不够,NameNode无法启动。 解决方案:(1)在root用户下,将/data/目录的操作权限赋给hadoop用户; (2)清空/data目录的文件;(3)重新格式化NameNode,重启hadoop集群。