搭建6个节点的Hadoop集群
节点
在实验室192.168.100.20:8006,用户名:root,密码:**,申请了6个节点,分别是:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
网络基本配置
- 1
- 2
- 3
- 1
- 2
- 3
各个节点的初始用户名均是:zhujunpeng,密码均是:***,在配置Hadoop集群时,新创建了hadoop用户,下面会讲这个过程。
安装操作系统
安装操作系统(centos 7)中注意三点:
- 请安装Development版本的操作系统,我安装的是Centos 7的Development版本。
- 请使用固定ip地址,因为整个集群将使用网络进行通讯,ip地址是他们进行通讯的关键。
- 在配置网络的过程中采用的是 muanul(手动设置),不要使用动态分配,这样不利用集群节点之间的通信
工具介绍
在整个操作的过程中未了方便,我将使用两种工具:
- SecureCRT,该工具能够方便的与Linux系统进行交互,不用每次都在不同的虚拟机界面下切换,方便管理,如果没有呀用过该工具,请自行谷歌安装并学会使用,该工具需要破解,网上有很多破解的教程。
- WinSCP,这是一个FTP工具,用于不通操作系统时间的文件传输,当然在我的应用中只涉及到了Windows向Centos系统传输已经下载好的hadoop安装包和JDK,传输速度快。
创建hadoop用户
如果你安装hadoop时不是采用“hadoop”用户,那么需要增加一个名为hadoop的用户(安装集群时形成习惯,每个集群都是用自己的用户名和密码,方便管理),密码也为hadoop,首先打开终端,在终端中输入:
- 1
- 1
输入密码之后,进入root权限,接着在终端中输入:
- 1
- 1
接着使用下面的命令修改密码,提示输入两次密码,可简单的设为“hadoop”(密码随意指定,若提示“无效的密码,过于简单”,不用理会,再次输入确认即可)。
- 1
- 1
可以为hadoop用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,在终端中输入:
- 1
- 1
打开这个文件之后,在文件的98行会看见如下的一条命令:
- 1
- 2
- 1
- 2
另外一种比较常用的设置管理员权限的方法是:
- 1
- 1
准备工作
使用hadoop用户登陆后,还需要安装几个软件才能安装hadoop,Centos采用的是yum来安装软件,需要联网环境,请检查你的操作系统是否已经连接网络,连接网络之后,需要安装ssh和Java环境。
安装SSH、配置SSH无密码登陆
首先检查是否已经安装ssh,在终端中输入:
- 1
- 1
在返回的结果中如果有clients和server说明已经安装成功,如果安装没有成功,在终端中输入:
- 1
- 2
- 1
- 2
接着用下面的命令测试ssh是否可用,在终端中输入:
- 1
- 1
但是仅仅这样登陆的话,每次都是需要密码的,我们需要配置ssh无密码登陆方式才比较方便,在终端中输入下面的命令:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
增加了上述的操作之后,再次使用ssh localhost
命令,无需密码就能直接登录了。
安装Java环境
首先下载相应版本的JDK,我推荐sun公司发行的JDK,并且在当前生态环境下使用JDK 1.7就够了,我的计算机中使用的是:jdk-7u79-Linux-x64.tar.gz(实验室一直使用这哥版本的JDK)。并且放在”/home/hadoop(即~)”中。注意hadoop用户必须有管理员权限,因为下面的操作全部都包含sudo操作,前面已经设置过,在传输文件时用WinSCP前面已经介绍过这种工具。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
在各个节点上安装hadoop 2.7.2稳定版
可用从apache官网下载最新版本的hadoop,但是请下载稳定版。下载时请下载hadoop-2.x.x.tar.gz这个格式的文件,这是编译好的文件,另一个包含src的文件时是hadoop源代码,需要进行编译才能使用。在Windows上下载好hadoop的安装包,使用WinSCP将其传入”/home/hadoop”中,接着进行下面的过程。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
测试实例看单节点是否成功配置
hadoop默认模式为非分布式,无需进行其他的配置即可运行,非分布式即单java进程,方便进行调试。现在我们可以执行例子来感受一下hadoop的运行。hadoop附带了丰富的例子(运行./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar可以看到所有的例子),包括wordcount、terasort、join、grep等。在此我们选择运行grep的例子,我们将input文件夹中的所有文件作为输入,筛选当中符合正则表达式dfs[a-z.]+
的单词并统计出现的次数,最后输出结果到output文件夹中。
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
上述代码的运行结果为:
- 1
- 1
输入下面的命令:
- 1
- 1
集群生态系统之间互相通信-网络配置
首先应该保证集群在同一个局域网,如果使用的是虚拟机安装的系统,需要更改网络连接方式为桥接(Bridge)模式,才能实现多个节点之间的互联。
- 修改主机名:hostname
- 1
- 2
- 1
- 2
- 修改/etc/hosts文件
- 1
- 1
打开后出现下面的内容,如果有其他的内容,删除它,那些信息并没有什么用:
- 1
- 2
- 1
- 2
在打开的/etc/hosts文件后面追加下面的内容:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
完成上述操作之后,ping一下看是否能联通
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
修改完成后,需要重新启动一下(exit即可,只是重启终端,并不需要重启操作系统),重启后在终端中才能看到机器名的变化。后面的操作请注意区分Master和Slave节点的操作。
ssh无密码登陆节点
这个操作是让Master节点可以无密码ssh登陆到各个Slave节点上,首先生成Master节点的公钥,在Master节点的终端执行(因为改过主机名,所以还需要删掉原来有的重新生成一次,凡是修改了Master节点的内容,都要执行此步进行更新公钥,当然会对后续的过程有影响,请更改有影响的步骤,也就是进行redo操作)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
配置PATH环境变量
可以将hadoop安装目录加入到PATH变量中,这样就有可以在任意目录中使用hadoop、hdfs等命令,需要在Master节点上进行配置,注意下面命令只须在Master节点上执行,其他的Slave节点不需要。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
配置集群/分布式环境
集群/分布式环境需要修改/usr/local/hadoop/etc/hadoop中的5个配置文件,更多设置项可查看官方说明,这里仅仅设置了正常启动所必须的设置项:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
- 文件slaves,将作为DataNode的主机名写入该文件,每行一个,默认为localhost,所谓在伪分布式节点配置时,节点即作为NameNode也可以作为DataNode。分布式配置可以保留localhost,也可以删掉,让Master节点近作为NameNode节点。本教程让Master节点仅仅作为NameNode节点使用,因此将文件中原来的localhost删除,在slaves中添加:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 将core-site.xml文件改为下面的配置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 文件hdfs-site.xml,dfs.replication一般设置为3,但是我们现在有5个Slave节点,所以dfs.replication的值设置为5。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 文件mapred-site.xml(可能需要先重命名,默认文件名为madred-site.xml.template),然后配置修改如下:
首先重命名,在终端中输入:
- 1
- 1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 修改文件yarn-site.xml如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 最基本的配置完成,我们需要将Master节点上的/usr/local/hadoop文件夹复制到各个节点上,因为之前在节点上跑过单节点的例子,所以在切换到集群模式之前应先删除之前临时的文件,在Master节点上执行:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 在各个slave节点上执行下面的命令,我有5个slave节点,所有在5个节点下都应该执行下面的命令:
- 1
- 2
- 3
- 1
- 2
- 3
首次启动hadoop
- 首次启动需要先在Master节点上执行NameNode的格式化,如果要重新格式化,要删除所有节点上tmp文件,否则是不能格式化成功的,即使成功也不会刷新状态。
- 1
- 1
-
关闭防火墙,Centos中默认开启了防火墙,在开启hadoop集群之前,需要关闭集群中每个节点的防火墙,有防火墙会导致ping得通但是telnet端口不通,从而导致DataNode启动了,但是Live datanodes为0的情况。
-
在Centos 6.x中关闭防火墙命令
- 1
- 2
- 1
- 2
-
在Centos 7中需要通过如下命令(防火墙改成了firewall)
- 1
- 2
- 1
- 2
-
-
启动hadoop,需要在Master上进行:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
启动的过程如果报错,可能是环境变量设置有问题,将下面我已经设置好的环境变量放到指定的部分就可以。
最终环境变量设置
最终在~/.bashrc和~/.bash_profile文件中应该有下面的环境变量,请直接复制下面的环境变量,这种设置可以方便你izai任意路径下打开相应的可执行文件。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
查看运行结果
是否启动成功呢?这可能是我们最为关心的问题,下面一些方式去查看你的集群是否已经成功的启动。
-
jps,在各个节点上输入jps命令
- 在Master必须包含的信息,必须至少包含下面的4个进行,否则就可以判定你的集群没有成功的启动。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 在Slave节点上应该包含3个进程,三个进行却一不可。
- 1
- 2
- 3
- 1
- 2
- 3
-
Master:50070
将上面的Master换成你的Master节点的IP地址,在启动的界面中,查看,如下图,其中的LiveNode应该为你的Slave节点数:
-
在终端中输入:hdfs dfsadmin -report,其中的LiveNode应该为你的LiveNode数目,否则说明集群没有成功的启动。
停止hadoop集群
停止过程十分简单,只需要在Master节点上执行命令:
- 1
- 1
可能出现的问题
- 在你输入一些命令比如jps时,会提示“can not found“,这个命令本身不属于hadoop,这是Java的JDK自带的一条命令,出现这种情况的原因有二:
- 你的JDK安装不正确,但是如果你跟我的教程做,不会出现这种情况
- 环境变量的导入不正确,在本文中最后给出了你应该导入的环境变量,请自己仔细检查是否正确
-
第一次启动hadoop时不成功,之后一会报错该怎么办?
- 出现这种情况的原因可能是你第一次开启hadoop的姿势不正确,请删除/usr/local/hadoop路径下的tmp文件夹,重新进行格式化操作,看是否能够成功。
-
在启动的过程中可能会伴随一个警告,还警告直接忽略,它不会影响你的正常启动,这个警告的解决需要编译源代码,还是比较复杂的,一般不建议修改。