欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

基于Hadoop-0.20.2的完全分布式集群搭建详细过程

程序员文章站 2022-05-13 12:09:55
...

之前的学习都是基于伪分布式环境,但是要想深入学习hadoop数据分析技术,就必须将hadoop集群搭建起来。 说来简单,但是应该怎么做呢?不急,本文的主要目的就是流水式的记录,看了之后也能够亲自动手实施这些过程。由于资源问题,只能通过虚拟机来实施模 拟

之前的学习都是基于伪分布式环境,但是要想深入学习hadoop数据分析技术,就必须将hadoop集群搭建起来。

说来简单,但是应该怎么做呢?不急,本文的主要目的就是流水式的记录,看了之后也能够亲自动手实施这些过程。由于资源问题,只能通过虚拟机来实施模 拟集群环境,虽然说是虚机模拟,但是在虚机上的hadoop的集群搭建过程也可以使用在实际的物理节点中,思想是一样的。如果你有足够的节点也可以在虚拟 机上进行一些其它实验测试,这是最好不过的了。

资源介绍:

笔记本一台(自己的) 内存4G 双核四线程

台式机一台(导师的) 内存4G 双核四线程

两台电脑软件情况:

Win7 64位

Vmware-9.0.2

虚拟机情况:

ubuntu-12.04

hadoop-0.20.2

jdk-8u5-linux-i586-demos

准备过程:

环境准备:《搭建Hadoop-0.20.2环境(伪分布式)》 附:后面多次使用。
节点准备:

其实这一步骤非常简单,如果你已经完成了搭建Hadoop-0.20.2环境(伪分布式)这一步,此时你已经准备好了第一个虚拟节点,那第二个和第 三个虚拟机节点如何准备?可能你已经想明白了,你可以按之前那一步的方法,再分别安装两遍Ubuntu系统,就分别实现了第二、三个虚拟机节点。不过这个 过程估计会让你很崩溃,其实还有一个更简单的方法,就是复制和粘贴,没错,就是在你刚安装好的第一个虚拟机节点,将整个系统目录进行复制,形成第二和第三 个虚拟机节点。简单吧。

说明1:其实在这里如果你在复制第一个节点的时候已经将伪分布式环境搭建好,那么复制第二个节点,第三个节点的时候那么SSH已经可以互通。

说明2:如果在第一个节点已经实现伪分布式环境基础上复制的第二个、第三个节点,需要重新配置三个节点中conf文件夹中配置文件。

很多人也许会问,这三个结点有什么用,原理很简单,按照hadoop集群的基本要求,其中一个是master结点,主要是用于运行hadoop程序 中的namenode、secondorynamenode和jobtracker任务。用外两个结点均为slave结点,其中一个是用于冗余目的,如果 没有冗余,就不能称之为hadoop了,所以模拟hadoop集群至少要有三个结点,如果电脑配置非常高,可以考虑增加一些其它的结点。slave结点主 要将运行hadoop程序中的datanode和tasktracker任务。

所以,在准备好这三个结点之后,需要分别将linux系统的主机名重命名(因为前面是复制和粘帖操作产生另两上结点,此时这3个结点的主机名是一样的),重命名主机名的方法:

sudo gedit /etc/hostname

通过修改hostname文件即可,这三个点结均要修改,以示区分。

以下是我对三个结点的ubuntu系统主机分别命名为:s15(master), s17(slave), s18(slave)

搭建流程:

一、配置hosts文件

二、建立hadoop运行帐号

三、配置ssh免密码连入

四、下载并解压hadoop安装包

五、配置namenode之修改site文件

六、配置hadoop-env.sh文件

七、配置masters和slaves文件

八、向各节点复制hadoop

九、格式化namenode

十、启动hadoop

十一、用jps检验各后台进程是否成功启动

十二、通过webUI查看集群情况

一、配置hosts文件

先简单说明下配置hosts文件的作用,它主要用于确定每个结点的IP地址,方便后续master(s15)结点能快速查到并访问各个结点。在上述 3个虚机结点上均需要配置此文件。由于需要确定每个结点的IP地址,所以在配置hosts文件之前需要先查看当前虚机结点的IP地址是多少,可以通过 ifconfig命令进行查看,如本实验中,s15,s17,s18结点的IP地址分别为:

192.168.130.235
192.168.130.237
192.168.130.238

如果IP地址不在同一局域网内可以通过ifconfig命令更改结点的IP地址,如果你需要修改很多节点IP,可通过shell脚本来分别执行,省时简单,脚本如下:

#!/bin/bash
sudo ifconfig eth0 192.168.130.235
sudo route add default gw 192.168.130.1

在这里IP地址和网关修改成你自己需要的,注意:
1.每个节点IP不一样,运行前需修改。
2.脚本没权限,需添加权限。

sudo chown +x 脚本的名字.sh

3.每次重启虚拟机,IP需重新设置。

将每个结点的IP地址设置完成后,就可以配置每个节点的hosts文件了。执行

sudo gedit /etc/hosts

添加:

192.168.130.235 s15
192.168.130.237 s17
192.168.130.238 s18

格式:

节点IP 别名

二、建立hadoop运行帐号

即为hadoop集群专门设置一个用户组及用户,这部分比较简单,参考示例如下:

sudo groupadd hadoop//设置hadoop用户组
sudo useradd –s /bin/bash –d /home/hadoop –m hadoop –g hadoop –G admin   //添加一个hadoop用户,此用户属于hadoop用户组,且具有admin权限。  
sudo passwd 123456   //设置用户hadoop登录密码
su hadoop   //切换到hadoop用户中

上述三个节点均需要进行以上步骤来完成hadoop运行帐号的建立。

特别说明:如果之前按照《搭建Hadoop-0.20.2环境(伪分布式)》已经搭建好伪分布式环境再复制第二个、第三个节点,上述添加运行账号可略过。

三、配置ssh免密码连入

这一环节最为重要,而且也最为关键,如果这一步走成功了,后面环节进行的也会比较顺利。

SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可 以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,想要破解还是非常有难度的。Hadoop集群的各个结点之间需要 进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方法通过密钥验证及数据加解密的方式进行远程安全登录 操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免密码的方法直接远程连入被访问结点,这样将大 大提高访问效率。

1.每个结点分别产生公私密钥。可参考《搭建Hadoop-0.20.2环境(伪分布式)》中的搭建流程中的第五步:安装ssh服务。有图有真相。
2.单机回环ssh免密码登录测试。即在单机结点上用ssh进行登录,看能否登录成功。登录成功后注销退出。在第一步已经进行登陆测试了。
3.让主结点(master)能通过SSH免密码登录两个子结点(slave)。 为了实现这个功能,两个slave结点的公钥文件中必须要包含主结点的公钥信息,这样当master就可以顺利安全地访问这两个slave结点了。操作过程如下:

进入s17节点,

cd .ssh
scp  hadoop@s15:~/.ssh/id_dsa.pub ./master_dsa.pub
cat master_dsa.pub >> authorized_keys

进入s18节点,

cd .ssh
scp  hadoop@s15:~/.ssh/id_dsa.pub ./master_dsa.pub
cat master_dsa.pub >> authorized_keys

进入s15节点,

cd .ssh
scp  hadoop@s15:~/.ssh/id_dsa.pub ./master_dsa.pub
cat master_dsa.pub >> authorized_keys

在这里我并没有这样做,希望大家自己测试,如果有问题还望指出。

特别说明:如果之前按照《搭建Hadoop-0.20.2环境(伪分布式)》已经搭建好伪分布式环境再复制第二个、第三个节点,上述配置ssh免密码连入可略过。

四、下载并解压hadoop安装包

可参考《搭建Hadoop-0.20.2环境(伪分布式)》中的搭建流程中的第七步:安装hadoop(1-4)。

五、配置namenode之修改site文件

在本文中s15节点做为namenode,所以下面配置针对s15中的site文件。

1、打开conf/core-site.xml文件,编辑如下:

fs.default.namehdfs://s15:9000hadoop.tmp.dir/usr/local/hadoop/tmp

注意:如果按照之前的《搭建Hadoop-0.20.2环境(伪分布式)》搭建配置,对比不同。

2、打开conf/mapred-site.xml文件,编辑如下:

mapred.job.tracker192.168.130.235:9001

注意1:如果按照之前的《搭建Hadoop-0.20.2环境(伪分布式)》搭建配置,对比不同。
注意2:192.168.130.235为master(s15)的IP。

3、打开conf/hdfs-site.xml文件,编辑如下:

dfs.name.dir/usr/local/hadoop/hdfs/namedfs.data.dir/usr/local/hadoop/hdfs/datadfs.replication2

注意1:如果按照之前的《搭建Hadoop-0.20.2环境(伪分布式)》搭建配置,对比不同。

六、配置hadoop-env.sh文件

每个节点这个需要根据实际情况来配置。参考《搭建Hadoop-0.20.2环境(伪分布式)》中的搭建流程的第七步:安装hadoop(6)。

七、配置masters和slaves文件

10、打开conf/masters文件,添加作为secondarynamenode的主机名,因为是完全分布式,只有一个节点,这里只需填写s15就可以。

11、打开conf/slaves文件,添加作为slave的主机名,一行一个。因为是完全分布式,只有两个个节点,添加:

s17
s18

八、向各节点复制hadoop

如果在一个节点设置hadoop,然后打包使用scp指令,复制其它节点解压即可。

特别说明:如果是复制已经搭建好的伪分布式环境,只需按照上述修改配置即可。

九、格式化namenode

如果之前在使用伪分布式的环境下格式化,使用过,需将hdfs,tmp文件删除。

然后在主节点master(s15)上,执行,

bin/hadoop namenode -format

注意:上面只要出现“successfully formatted”就表示成功了。

十、启动hadoop

这一步也在主结点master(s15)上进行操作,执行,

bin/start-all.sh

十一、用jps检验各后台进程是否成功启动

在主结点master(s15)上执行jps查看namenode,jobtracker,secondarynamenode进程是否启动。

在s17和s18结点执行jps查看datanode和tasktracker进程是否启动。

十二、通过webUI查看集群情况

在浏览器中输入:http://192.168.130.235:50030,网址中的IP为master(s15)结点所对应的IP地址。

至此,基于hadoop-0.20.2的完全分布式集群已经全部搭建完成。


附:基于Hadoop-0.20.2的完全分布式的wordcount运行

bin/hadoop jar hadoop-0.20.2-examples.jar wordcount input output

操作同伪分布式模式下,详情参考《运行WordCount》