hadoop完全分布式集群安装

因为机器学习,接触到了数据挖掘;因为数据挖掘,接触到了大数据;因为大数据,接触到了hadoop。之前有过hadoop的简单了解,但都是基于别人提供的hadoop来学习和使用,虽然也很好用 ,终究不如自己的使用起来方便 。经过这两天参考大量网上的经验,终于成功的搭建了自己的hadoop完全分布式环境。现在我把所有的安装思路、安装过程中的截图以及对待错误的经验总结出来,相信安装这个思路去做,hadoop安装就不再是一件困难的事。
我自己是搭建的完全分布式的hadoop,就涉及到了创建若干个虚拟机并使它们能够互通。所以我整个hadoop安装能够分为三个独立的部分:1、linux 虚拟机详细搭建过程;2、hadoop完全分布式集群安装;3、hadoop 自带示例wordcount 的具体运行步骤。本文介绍第二部分。

1. Hadoop 介绍

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

2. 配置hosts文件

在上一篇文章中,我已经详细介绍了我的虚拟机搭建和配置过程。我一共使用了三个虚拟机,其中,一个作为Master ,二个作为Salve ,三个节点之间已经能够实现ping通。
先简单说明下配置hosts文件的作用,它主要用于确定每个结点的IP地址,master结点能快速查到并访问各个结点。在上述3个虚机结点上均需要配置此文件。由于需要确定每个结点的IP地址,所以在配置hosts文件之前需要先查看当前虚机结点的IP地址是多少,可以通过ifconfig命令进行查看,如本实验中,node1结点的IP地址为:
hadoop完全分布式集群安装_第1张图片
在获取到每个结点的IP地址后,就可以配置hosts文件了,hosts文件路径为 /etc/hosts,我的hosts文件配置如下,大家可以参考自己的IP地址以及相应的主机名完成配置
节点的IP地址分布如下所示:

hadoop完全分布式集群安装_第2张图片

这样在三个虚拟机上配置完成之后,我们再让他们相互连接时就不需要再输入ip地址了,而是直接输入主机名字,下面是我使用master去ping node1的情况

hadoop完全分布式集群安装_第3张图片

3. 建立Hadoop 运行账号

即为hadoop集群专门设置一个用户组及用户:

groupadd hadoop    //设置hadoop用户组
useradd –s /bin/bash –d /home/hadoop –m hadoop –g hadoop  //添加一个hadoop用户,此用户属于hadoop用户组
passwd hadoop   //设置用户登录密码

hadoop完全分布式集群安装_第4张图片
上述3个虚机结点均需要进行以上步骤来完成hadoop运行帐号的建立。

4. ssh 无密码验证配置

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。
网上有教程说在配置ssh 无密码连接之前,先关闭各虚拟节点防火墙,我个人没有做,也没有问题。

4.1 检查Linux是否安装ssh

检查ssh是否安装,执行如下命令,如果出现了下面的几条信息,则表示已经安装。我Linux的centos7.0 默认带ssh,如果你发现没有安装,需要先安装ssh,安装完毕后再使用此命令检查。

这里写图片描述

4.2 每个结点分别产生公私密钥。

下面我介绍一下master节点下需要执行的命令,其他两个节点执行同样操作即可。

ssh-keygen -t rsa -P ''#运行后询问其保存路径时直接回车采用默认路径,生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/home/hadoop/.ssh"目录下。 

hadoop完全分布式集群安装_第5张图片

查看”/home/hadoop/”下是否有”.ssh”文件夹,且”.ssh”文件下是否有两个刚生产的无密码密钥对。
这里写图片描述
接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。

cat id_rsa.pub >> authorized_keys#把id_rsa.pub追加到授权的key里面去
chmod 600 authorized_keys#设置该文件的权限

这里写图片描述

切换到root用户登录修改ssh配置文件”/etc/ssh/sshd_config”的下列内容。
检查下面几行前面”#”注释是否取消掉:

LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  %h/.ssh/authorized_keys 

hadoop完全分布式集群安装_第6张图片

设置完之后记得重启SSH服务,才能使刚才设置有效。
这里写图片描述

退出root登录,使用普通用户验证是否设置成功。
hadoop完全分布式集群安装_第7张图片

登陆成功之后注销退出。
这里写图片描述

master节点已经设置完毕。用上述同样的方法在剩下的两个结点中同样操作即可。

4.3 主结点能通过SSH免密码登录两个子结点

接下来的事儿是让主结点(master)能通过SSH免密码登录两个子结点(slave),为了实现这个功能,两个slave结点的公钥文件中必须要包含主结点的公钥信息,这样当master就可以顺利安全地访问这两个slave结点了。(这一步只在master上操作,使得master能够ssh免密码登陆)

ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop@node1#命令执行后需要输入node1 的登陆密码
ssh hadoop@node1 #验证是否能够免密码登陆

对node2结点也可以用同样的方法进行,下图分别是对node1和node2的操作过程。
对node1的操作过程:
hadoop完全分布式集群安装_第8张图片

对node2的操作过程:
hadoop完全分布式集群安装_第9张图片
至此,SSH免密码登录已经配置成功。

5. Java环境安装

所有的机器上都要安装JDK,现在就先在Master服务器安装,然后其他服务器按照步骤重复进行即可。安装JDK以及配置环境变量,需要以”root”的身份进行。
因为centos7 预装了Open JDK ,但还是推荐用Oracle JDK,所以第一步是查看系统里的JDK ,如果出现了openjdk ,则卸载。查看和卸载的操作如下:
这里写图片描述
出现了openjdk ,两个都需要卸载,执行命令是yum -y remove xxx。xxx为以上返回的结果。
这里写图片描述
这里写图片描述

卸载完毕后将已经下载好的”jdk-7u67-linux-x64.tar.gz”复制到”/opt”文件夹中,然后解压即可。查看”/opt”下面会发现多了一个名为”jdk1.7.0_67”文件夹,说明我们的JDK安装结束,删除”jdk-7u67-linux-x64.tar.gz”文件。
注:复制过程我是从windows 系统传到了虚拟机master中,使用的是xftp4软件,非常方便能够连接虚拟机并传送文件,其中需要注意的是在新建连接中把协议改为sftp。
上述过程中的解压和删除的操作如下:
这里写图片描述

这里写图片描述

配置环境变量:
这里写图片描述

这里写图片描述
使配置立即生效:
这里写图片描述

验证效果:
这里写图片描述
注:以上这些步骤要分别在三台机器上执行。由于当时安装过程中截图保存不全,查看和卸载的操作我用的master的截图,从解压开始的操作我是用的node1的截图。大家看操作命令,忽视掉主机名就行了。

6. Hadoop集群安装

6.1 安装Hadoop

到目前为止,准备工作已经完成,现在我们可以开始安装和配置Hadoop了。
首先用root用户登录”master”机器,将下载的”hadoop-1.2.1.tar.gz”复制到/usr目录下。然后进入”/usr”目录下,用下面命令把”hadoop-1.2.1.tar.gz”进行解压,并将其重命名为”hadoop”,把该文件夹的读权限分配给普通用户hadoop,然后删除”hadoop-1.2.1.tar.gz”安装包。

cd /usr
tar –xzvf hadoop-1.2.1.tar.gz
mv hadoop-1.2.1 hadoop
chown –R hadoop:hadoop hadoop #将文件夹"hadoop"读权限分配给hadoop普通用户
rm -rf hadoop-1.2.1.tar.gz 

最后在”/usr/hadoop”下面创建tmp文件夹,并把Hadoop的安装路径添加到”/etc/profile”中,修改”/etc/profile”文件,将以下语句添加到末尾,并使其生效(source /etc/profile):

export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

hadoop完全分布式集群安装_第10张图片
hadoop完全分布式集群安装_第11张图片
hadoop完全分布式集群安装_第12张图片

下面两张图,第一张图是编辑”/etc/profile”文件和使之生效的命令。
第二张图是进入编辑之后,要添加的内容,添加的是后两行,前两行已经添加过了。
这里写图片描述

hadoop完全分布式集群安装_第13张图片

在master上执行完毕以上操作之后,还需要在另两个机器上执行同样操作。

6.2 Hadoop配置

所需要配置的文件均存放在/hadoop/conf文件夹里。
(1)配置hadoop-env.sh
该”hadoop-env.sh”文件位于”/usr/hadoop/conf”目录下。
在文件中修改下面内容:
`
export JAVA_HOME=/opt/jdk1.7.0_67

这里写图片描述
(2)配置core-site.xml文件
修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。
hadoop完全分布式集群安装_第14张图片
(3)配置hdfs-site.xml文件
修改Hadoop中HDFS的配置,配置的备份方式默认为3。他是指配置文件的冗余数,不能大于slave个数,因此设置为2。
hadoop完全分布式集群安装_第15张图片
上图中有两处要改动一下,把/usr/hadoop/dfs/name中的dfs 改成hdfs
把/usr/hadoop/dfs/data 中的dfs 改成hdfs。因为这里我在没改的情况下Hadoop启动之后有一个进程启不了,查看了logs日志之后说是文件名不一致,我就改了这里,就好了。
(4)配置mapred-site.xml文件
修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。
hadoop完全分布式集群安装_第16张图片
(5)配置masters文件
修改localhost为master
这里写图片描述
(6)配置slaves文件
去掉”localhost”,每行添加一个主机名,把剩余的Slave主机名都填上。
这里写图片描述

现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。最简单的方法是将 Master上配置好的hadoop所在文件夹”/usr/hadoop”复制到所有的Slave的”/usr”目录下用下面命令格式进行

scp -r /usr/hadoop root@node2:/usr/

这里写图片描述
查看node2服务器的”/usr”目录下是否已经存在”hadoop”文件夹,确认已经复制成功。查看结果如下:
这里写图片描述

执行完对node2操作之后,再对node1 的传输和验证执行同样操作。

7. Hadoop启动和验证

7.1 格式化HDFS文件系统

这一步只在主结点master上进行操作:
hadoop完全分布式集群安装_第17张图片

7.2 启动hadoop

在启动前关闭集群中所有机器的防火墙,使用下面命令启动。
hadoop完全分布式集群安装_第18张图片
可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。

7.3 验证hadoop

验证方法一:用”jps”命令
这里写图片描述
验证方式二:用”hadoop dfsadmin -report”
hadoop完全分布式集群安装_第19张图片
这个图没有显示完全,下面还有node2 的情况.

7.4 网页查看集群

(1)访问”http://172.16.10.15:50030”
hadoop完全分布式集群安装_第20张图片
(2)访问”http://172.16.10.15:50070”
hadoop完全分布式集群安装_第21张图片

8.参考文献

  1. http://www.cnblogs.com/lanxuezaipiao/p/3525554.html
  2. http://blog.csdn.net/ab198604/article/details/8250461
  3. http://www.cnblogs.com/shishanyuan/p/4147580.html
  4. http://blog.csdn.net/weixuehao/article/details/15813681
  5. http://www.cnblogs.com/fabulousyoung/p/4074197.html
  6. http://xubindehao.iteye.com/blog/1395580
  7. http://blog.csdn.net/hpuyancy/article/details/12685657

你可能感兴趣的:(Hadoop)