利用ubuntu搭建高可用的hadoop集群系列之五——hadoop集群搭建

1 篇文章 0 订阅
1 篇文章 0 订阅

利用ubuntu搭建高可用的hadoop集群系列之五——hadoop集群搭建


1、集群部署介绍
1.1 Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
  对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框 架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任 务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交 时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
  从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
1.2 环境说明
集群中包括4个节点:1个Master,1个Master备份节点,2个Salve,节点之间虚拟局域网连接,可以相互ping通。节点IP地址分布如下:

机器名称

IP地址

nistest.master(主节点)

eth0:172.21.13.151

eth1: 192.168.21.128

eth0:0: 172.21.13.40

nistest.node1(slave)

eth0:172.21.13.49

nistest.node2(slave)

eth0:172.21.13.115


四个节点上均是ubuntu11.10系统,并且有一个相同的用户hadoop。Master(和backup)机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;2个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。

1.3 网络配置
Hadoop集群要按照1.2小节表格所示进行配置。
下面的例子我们将以Master机器为例,即主机名为"nistest.master",IP为"192.168.116.134"进行一些主机名配置的相关操作。其他的Slave机器以此为依据进行修改。
1)查看当前机器名称
用用hostname命令进行显示机器名称,

如果跟规划的不一致,要按照下面进行修改。

2)修改当前机器名称

3)配置hosts文件(必须)
"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。
  机器为"nistest.master:192.168.116.134"对机器为"nistest.node1:192.168.116.136"用命令"ping"记性连接测试。测试结果如下:

而直接ping ip地址,如图:

从上图中的值,直接对IP地址进行测试,能够ping通,但是对主机名进行测试,发现没有ping通,提示"unknown host——未知主机"。
  所以要在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件末尾中都要添加如下内容:
用以下命令进行添加:vim /etc/hosts
  添加结果如下:

  现在我们在进行对机器为"Slave1.Hadoop"的主机名进行ping通测试,看是否能测试成功。

2、SSH无密码验证配置
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用 无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。
2.1 安装和启动SSH协议
通过下面命令进行安装。
apt-get install ssh 安装SSH协议;
apt-get install rsync (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件);
  确保所有的服务器都安装,上面命令执行完毕,各台机器之间可以通过密码验证相互登。
2.2 配置Master无密码登录所有Salve
1)SSH无密码原理
  Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过 SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用 私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密 码。重要过程是将客户端Master复制到Slave上。
2)Master机器上生成密码对
   在Master节点上执行以下命令:ssh-keygen –t rsa –P ''
  这条命令是生成其无密码密钥对,询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
验证是否成功。
ssh localhost
2)设置SSH配置
把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:
scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/
例如:scp ~/.ssh/id_rsa.pub hadoop@172.21.13.49:~/.ssh
  上面的命令是复制文件"id_rsa.pub"到服务器IP为"172.21.13.49"的用户为"hadoop"的"/home/hadoop/"下面。
  下面就针对IP为"172.21.13.49"的nistest.node1的节点进行配置。
  1)把nistest.master上的公钥复制到nistest.node1上
2)追加到授权文件"authorized_keys"
  到目前为止Master.Hadoop的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把nistest.master的公钥追加到nistest.node1的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
 5)在nistest.master使用SSH无密码登录nistest.node1
当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。

3、Java环境安装
  所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以"root"的身份进行。
java环境的详细安装配置见http://blog.csdn.net/wyj1986/article/details/7687479( 在ubuntu 11.10上安装配置jdk图片详解

4、Hadoop集群安装
  所有的机器上都要安装hadoop,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装和配置hadoop需要以"root"的身份进行。
4.1 安装hadoop
  首先用root用户登录"nistest.node1"机器,查看我们之前用FTP上传至"/home/Hadoop"上传的"hadoop-1.0.0.tar.gz"。
  接着把"hadoop-1.0.0.tar.gz"复制到"/usr/local"目录下面。
cp /home/hadoop/hadoop-1.0.0.tar.gz /usr/local

下一步进入"/usr"目录下,用下面命令把"hadoop-1.0.0.tar.gz"进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-1.0.0.tar.gz"安装包。
最后在"/app/hadoop"下面创建tmp文件夹,把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有


1)在"/app/hadoop"创建"tmp"文件夹
mkdir /app/hadoop/tmp
2)配置"/etc/profile"
vim /etc/profile
3)重启"/etc/profile"
source /etc/profile
4.2 配置hadoop
  1)配置hadoop-env.sh
该"hadoop-env.sh"文件位于"/usr/local/hadoop/conf"目录下。
在文件的末尾添加下面内容。


Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于 Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core- site.xml、hdfs-site.xml、mapred-site.xml。core-site.xml和hdfs-site.xml是站在 HDFS角度上配置文件;core-site.xml和mapred-site.xml是站在MapReduce角度上配置文件。

2)配置core-site.xml文件
  修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。


备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。
用下面命令进行编辑:


3)配置hdfs-site.xml文件
  修改Hadoop中HDFS的配置,配置的备份方式默认为3。


(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)
用下面命令进行编辑:


 4)配置mapred-site.xml文件
  修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。


用下面命令进行编辑:


 5)配置masters文件
用下面命令编辑:


编辑内容如下:


6)配置slaves文件(Master主机特有)
去掉"localhost",每行只添加一个主机名,把剩余的Slave主机名都填上。
例如:添加形式如下


4.3 启动及验证
  1)格式化HDFS文件系统
  在"nistest.master"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)


2)启动hadoop
在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。


使用下面命令启动。

3)停止hadoop
使用下面命令停止hadoop集群

  4)验证hadoop 启动成功
  (1)验证方法:用"jps"命令
在nistest.master上用 java自带的小工具jps查看进程。

在nistest.node1上用jps查看进程。

4.4 网页查看集群
1)访问"http//:171.21.13.151:50030"

2)访问"http//:171.21.13.151:50070"

5 运行WordCount程序
单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"Hello World",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个 单词出现的次数,如下图所示。

5.1 准备工作
  现在以"hadoop"普通用户登录"nistest.master"服务器。
  1)创建本地示例文件
  首先在"/tmp"目录下创建文件夹"test"。
接着创建两个文本文件test1.txt和test2.txt,使test1.txt内容为

而test2.txt的内容为。

2)在HDFS上创建输入文件夹

3)上传本地test中文件到集群的input目录下

5.2 运行例子
1)在集群上运行WordCount程序

  备注:以input作为输入目录,output目录作为输出目录。已经编译好的WordCount的Jar在"/usr/local/hadoop"下面,就是"hadoop-examples-1.0.1.jar",所以在下面执行 命令时记得把路径写全了,不然会提示找不到该Jar包。
2)MapReduce执行过程显示信息
Hadoop命令会启动一个JVM来运行这个MapReduce程序,并自动获得Hadoop的配置,同时把类的路径(及其依赖关系)加入到Hadoop 的库中。以上就是Hadoop Job的运行记录,从这里可以看到,这个Job被赋予了一个ID号:job_local_0001,而且得知输入文件有两个(Total input paths to process : 2),同时还可以了解map的输入输出记录(record数及字节数),以及reduce输入输出记录。比如说,在本例中,map的task数量是3 个,reduce的task数量是一个。map的输入record数是2个,输出record数是4个等信息。


5.3 查看结果
1)查看HDFS上output目录内容

从上图中知道生成了2个文件,我们的结果在"part-r-00000"中。
2)查看结果输出文件内容

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值