Hadoop集群安装配置教程Hadoop260UbuntuCentOS.docx
《Hadoop集群安装配置教程Hadoop260UbuntuCentOS.docx》由会员分享,可在线阅读,更多相关《Hadoop集群安装配置教程Hadoop260UbuntuCentOS.docx(16页珍藏版)》请在冰点文库上搜索。
![Hadoop集群安装配置教程Hadoop260UbuntuCentOS.docx](https://file1.bingdoc.com/fileroot1/2023-6/3/d47fdbbb-8731-4d6a-b908-395c3d5a4318/d47fdbbb-8731-4d6a-b908-395c3d5a43181.gif)
Hadoop集群安装配置教程Hadoop260UbuntuCentOS
Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS
本教程讲述如何配置Hadoop集群,默认读者已经掌握了Hadoop的单机伪分布式配置,否则请先查看Hadoop安装教程_单机/伪分布式配置或CentOS安装Hadoop_单机/伪分布式配置。
本教程由厦门大学数据库实验室出品,转载请注明。
本教程适合于原生Hadoop2,包括Hadoop2.6.0,Hadoop2.7.1等版本,主要参考了官方安装教程,步骤详细,辅以适当说明,保证按照步骤来,都能顺利安装并运行Hadoop。
另外有Hadoop安装配置简略版方便有基础的读者快速完成安装。
为了方便新手入门,我们准备了两篇不同系统的Hadoop伪分布式配置教程。
但其他Hadoop教程我们将不再区分,可同时适用于Ubuntu和CentOS/RedHat系统。
例如本教程以Ubuntu系统为主要演示环境,但对Ubuntu/CentOS的不同配置之处、CentOS6.x与CentOS7的操作区别等都会尽量给出注明。
环境
本教程使用Ubuntu14.0464位作为系统环境,基于原生Hadoop2,在Hadoop2.6.0(stable)版本下验证通过,可适合任何Hadoop2.x.y版本,例如Hadoop2.7.1,Hadoop2.4.1等。
本教程简单的使用两个节点作为集群环境:
一个作为Master节点,局域网IP为192.168.1.121;另一个作为Slave节点,局域网IP为192.168.1.122。
准备工作
Hadoop集群的安装配置大致为如下流程:
1.选定一台机器作为Master
2.在Master节点上配置hadoop用户、安装SSHserver、安装Java环境
3.在Master节点上安装Hadoop,并完成配置
4.在其他Slave节点上配置hadoop用户、安装SSHserver、安装Java环境
5.将Master节点上的/usr/local/hadoop目录复制到其他Slave节点上
6.在Master节点上开启Hadoop
配置hadoop用户、安装SSHserver、安装Java环境、安装Hadoop等过程已经在Hadoop安装教程_单机/伪分布式配置或CentOS安装Hadoop_单机/伪分布式配置中有详细介绍,请前往查看,不再重复叙述。
继续下一步配置前,请先完成上述流程的前4个步骤。
网络配置
假设集群所用的节点都位于同一个局域网。
如果使用的是虚拟机安装的系统,那么需要更改网络连接方式为桥接(Bridge)模式,才能实现多个节点互连,例如在VirturalBox中的设置如下图。
此外,如果节点的系统是在虚拟机中直接复制的,要确保各个节点的Mac地址不同(可以点右边的按钮随机生成MAC地址,否则IP会冲突):
VirturalBox中节点的网络设置
Linux中查看节点IP地址的命令为ifconfig,即下图所示的inet地址(注意虚拟机安装的CentoS不会自动联网,需要点右上角连上网络才能看到IP地址):
Linux查看IP命令
首先在Master节点上完成准备工作,并关闭Hadoop(/usr/local/hadoop/sbin/stop-dfs.sh),再进行后续集群配置。
为了便于区分,可以修改各个节点的主机名(在终端标题、命令行中可以看到主机名,以便区分)。
在Ubuntu/CentOS7中,我们在Master节点上执行如下命令修改主机名(即改为Master,注意是区分大小写的):
sudovim/etc/hostname
如果是用CentOS6.x系统,则是修改/etc/sysconfig/network文件,改为HOSTNAME=Master,如下图所示:
CentOS中hostname设置
然后执行如下命令修改自己所用节点的IP映射:
sudovim/etc/hosts
例如本教程使用两个节点的名称与对应的IP关系如下:
192.168.1.121Master
192.168.1.122Slave1
我们在/etc/hosts中将该映射关系填写上去即可,如下图所示(一般该文件中只有一个127.0.0.1,其对应名为localhost,如果有多余的应删除,特别是不能有“127.0.0.1Master”这样的记录):
Hadoop中的hosts设置
CentOS中的/etc/hosts配置则如下图所示:
CentOS中的hosts设置
修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。
接下来的教程中请注意区分Master节点与Slave节点的操作。
需要在所有节点上完成网络配置
。
如上面讲的是Master节点的配置,而在其他的Slave节点上,也要对/etc/hostname(修改为Slave1、Slave2等)和/etc/hosts(跟Master的配置一样)这两个文件进行修改!
配置好后需要在各个节点上执行如下命令,测试是否相互ping得通,如果ping不通,后面就无法顺利配置成功:
pingMaster-c3#只ping3次,否则要按Ctrl+c中断
pingSlave1-c3
例如我在Master节点上pingSlave1,ping通的话会显示time,显示的结果如下图所示:
检查是否ping得通
继续下一步配置前,请先完成所有节点的网络配置,修改过主机名的话需重启才能生效。
SSH无密码登陆节点
这个操作是要让Master节点可以无密码SSH登陆到各个Slave节点上。
首先生成Master节点的公匙,在Master节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):
cd~/.ssh#如果没有该目录,先执行一次sshlocalhost
rm./id_rsa*#删除之前生成的公匙(如果有)
ssh-keygen-trsa#一直按回车就可以
让Master节点需能无密码SSH本机,在Master节点上执行:
cat./id_rsa.pub>>./authorized_keys
完成后可执行sshMaster验证一下(可能需要输入yes,成功后执行exit返回原来的终端)。
接着在Master节点将上公匙传输到Slave1节点:
scp~/.ssh/id_rsa.pubhadoop@Slave1:
/home/hadoop/
scp是securecopy的简写,用于在Linux下进行远程拷贝文件,类似于cp命令,不过cp只能在本机中拷贝。
执行scp时会要求输入Slave1上hadoop用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:
通过scp向远程主机拷贝文件
接着在Slave1节点上,将ssh公匙加入授权:
mkdir~/.ssh#如果不存在该文件夹需先创建,若已存在则忽略
cat~/id_rsa.pub>>~/.ssh/authorized_keys
rm~/id_rsa.pub#用完就可以删掉了
如果有其他Slave节点,也要执行将Master公匙传输到Slave节点、在Slave节点上加入授权这两步。
这样,在Master节点上就可以无密码SSH到各个Slave节点了,可在Master节点上执行如下命令进行检验,如下图所示:
sshSlave1
在Master节点中ssh到Slave节点
配置PATH变量
(CentOS单机配置Hadoop的教程中有配置这一项了,这一步可以跳过)
在单机伪分布式配置教程的最后,说到可以将Hadoop安装目录加入PATH变量中,这样就可以在任意目录中直接使用hadoo、hdfs等命令了,如果还没有配置的,需要在Master节点上进行配置。
首先执行vim~/.bashrc,加入一行:
exportPATH=$PATH:
/usr/local/hadoop/bin:
/usr/local/hadoop/sbin
如下图所示:
配置PATH变量
保存后执行source~/.bashrc使配置生效。
配置集群/分布式环境
集群/分布式模式需要修改/usr/local/hadoop/etc/hadoop中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项:
slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
1,文件slaves,将作为DataNode的主机名写入该文件,每行一个,默认为localhost,所以在伪分布式配置时,节点即作为NameNode也作为DataNode。
分布式配置可以保留localhost,也可以删掉,让Master节点仅作为NameNode使用。
本教程让Master节点仅作为NameNode使用,因此将文件中原来的localhost删除,只添加一行内容:
Slave1。
2,文件core-site.xml改为下面的配置:
fs.defaultFS
hdfs:
//Master:
9000
hadoop.tmp.dir
file:
/usr/local/hadoop/tmp
Abaseforothertemporarydirectories.
3,文件hdfs-site.xml,dfs.replication一般设为3,但我们只有一个Slave节点,所以dfs.replication的值还是设为1:
dfs.namenode.secondary.http-address
Master:
50090
dfs.replication
1
dfs.namenode.name.dir
file:
/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:
/usr/local/hadoop/tmp/dfs/data
4,文件mapred-site.xml(可能需要先重命名,默认文件名为mapred-site.xml.template),然后配置修改如下:
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
Master:
10020
mapreduce.jobhistory.webapp.address
Master:
19888
5,文件yarn-site.xml:
yarn.resourcemanager.hostname
Master
yarn.nodemanager.aux-services
mapreduce_shuffle
配置好后,将Master上的/usr/local/Hadoop文件夹复制到各个节点上。
因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。
在Master节点上执行:
cd/usr/local
sudorm-r./hadoop/tmp#删除Hadoop临时文件
sudorm-r./hadoop/logs/*#删除日志文件
tar-zcf~/hadoop.master.tar.gz./hadoop#先压缩再复制
cd~
scp./hadoop.master.tar.gzSlave1:
/home/hadoop
在Slave1节点上执行:
sudorm-r/usr/local/hadoop#删掉旧的(如果存在)
sudotar-zxf~/hadoop.master.tar.gz-C/usr/local
sudochown-Rhadoop/usr/local/hadoop
同样,如果有其他Slave节点,也要执行将hadoop.master.tar.gz传输到Slave节点、在Slave节点解压文件的操作。
首次启动需要先在Master节点执行NameNode的格式化:
hdfsnamenode-format#首次运行需要执行初始化,之后不需要
CentOS系统需要关闭防火墙
CentOS系统默认开启了防火墙,在开启Hadoop集群之前,需要关闭集群中每个节点的防火墙。
有防火墙会导致ping得通但telnet端口不通,从而导致DataNode启动了,但Livedatanodes为0的情况。
在CentOS6.x中,可以通过如下命令关闭防火墙:
sudoserviceiptablesstop#关闭防火墙服务
sudochkconfigiptablesoff#禁止防火墙开机自启,就不用手动关闭了
若用是CentOS7,需通过如下命令关闭(防火墙服务改成了firewall):
systemctlstopfirewalld.service#关闭firewall
systemctldisablefirewalld.service#禁止firewall开机启动
如下图,是在CentOS6.x中关闭防火墙:
CentOS6.x系统关闭防火墙
接着可以启动hadoop了,启动需要在Master节点上进行:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.shstarthistoryserver
通过命令jps可以查看各个节点所启动的进程。
正确的话,在Master节点上可以看到NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer进程,如下图所示:
通过jps查看Master的Hadoop进程
在Slave节点可以看到DataNode和NodeManager进程,如下图所示:
通过jps查看Slave的Hadoop进程
缺少任一进程都表示出错。
另外还需要在Master节点上通过命令hdfsdfsadmin-report查看DataNode是否正常启动,如果Livedatanodes不为0,则说明集群启动成功。
例如我这边一共有1个Datanodes:
通过dfsadmin查看DataNode的状态
也可以通过Web页面看到查看DataNode和NameNode的状态:
http:
//master:
50070/。
如果不成功,可以通过启动日志排查原因。
伪分布式、分布式配置切换时的注意事项
1,从分布式切换到伪分布式时,不要忘记修改slaves配置文件;
2,在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。
所以如果集群以前能启动,但后来启动不了,特别是DataNode无法启动,不妨试着删除所有节点(包括Slave节点)上的/usr/local/hadoop/tmp文件夹,再重新执行一次hdfsnamenode-format,再次启动试试。
执行分布式实例
执行分布式实例过程与伪分布式模式一样,首先创建HDFS上的用户目录:
hdfsdfs-mkdir-p/user/hadoop
将/usr/local/hadoop/etc/hadoop中的配置文件作为输入文件复制到分布式文件系统中:
hdfsdfs-mkdirinput
hdfsdfs-put/usr/local/hadoop/etc/hadoop/*.xmlinput
通过查看DataNode的状态(占用大小有改变),输入文件确实复制到了DataNode中,如下图所示:
通过Web页面查看DataNode的状态
接着就可以运行MapReduce作业了:
hadoopjar/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jargrepinputoutput'dfs[a-z.]+'
运行时的输出信息与伪分布式类似,会显示Job的进度。
可能会有点慢,但如果迟迟没有进度,比如5分钟都没看到进度,那不妨重启Hadoop再试试。
若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改YARN的内存配置解决。
显示MapReduceJob的进度
同样可以通过Web界面查看任务进度http:
//master:
8088/cluster,在Web界面点击“TrackingUI”这一列的History连接,可以看到任务的运行信息,如下图所示:
通过Web页面查看集群和MapReduce作业的信息
执行完毕后的输出结果:
MapReduce作业的输出结果
关闭Hadoop集群也是在Master节点上执行的:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.shstophistoryserver
此外,同伪分布式一样,也可以不启动YARN,但要记得改掉mapred-site.xml的文件名。
自此,你就掌握了Hadoop的集群搭建与基本使用了。