你的位置:首页 > 数据库

[数据库]Hadoop多节点集群安装配置


目录:

1、集群部署介绍

1.1 Hadoop简介

1.2 环境说明

1.3 环境配置

1.4 所需软件

2、SSH无密码验证配置

2.1 SSH基本原理和用法

2.2 配置Master无密码登录所有Salve

3、Java环境安装

3.1 安装JDK

3.2 配置环境变量

3.3 验证安装成功

3.4 安装剩余机器

4、Hadoop集群安装

4.1 安装hadoop

4.2 配置hadoop

4.3 启动及验证

4.4 网页查看集群

5、常见问题FAQ

 

5.1 关于 Warning: $HADOOP_HOME is deprecated.

5.2 解决"no datanode to stop"问题

5.3 Slave服务器中datanode启动后又自动关闭

5.4 从本地往hdfs文件系统上传文件

5.5 安全模式导致的错误

1、集群部署介绍

1.1 Hadoop简介

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。

对于Hadoop的集群来讲,可以分成两大类角色:MasterSalve。一个HDFS集群是由一个NameNode和若干个DataNode组 成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。 MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个从节点的TaskTracker共同组成的。主节点负责调度构成一 个作业的所有任 务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交 时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。

从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

1.2 环境说明

我的环境是在虚拟机中配置的,Hadoop集群中包括4个节点:1个Master,2个Salve,节点之间局域网连接,可以相互ping通,节点IP地址分布如下:


虚拟机系统


机器名称



IP地址



Ubuntu 13.04



Master.Hadoop



192.168.1.141



Ubuntu 9.11



Salve1.Hadoop



192.168.1.142



Fedora 17



Salve2.Hadoop



192.168.1.137



Master机器主要配置NameNode和JobTracker的角色,负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode 和TaskTracker的角色,负责分布式数据存储以及任务的执行。其实应该还应该有1个Master机器,用来作为备用,以防止Master服务器宕机,还有一个备用马上启用。后续经验积累一定阶段后补上一台备用Master机器(可通过配置文件修改备用机器数)。

    注意:由于hadoop要求所有机器上hadoop的部署目录结构要求相同(因为在启动时按与主节点相同的目录启动其它任务节点),并且都有一个相同的用户名账户。参考各种文档上说的是所有机器都建立一个hadoop用户,使用这个账户来实现无密码认证。这里为了方便,分别在三台机器上都重新建立一个hadoop用户。

 

1.3 环境配置

Hadoop集群要按照1.2小节表格所示进行配置,下面介绍如何修改机器名称和配置hosts文件,以方便使用。

注意:我的虚拟机都采用NAT方式连接网络,IP地址是自动分配的,所以这里就使用自动分配的IP地址而未特地修改为某些IP地址。

(1)修改当前机器名称

假定我们发现我们的机器的主机名不是我们想要的。

1)在Ubuntu下修改机器名称

修改文件/etc/hostname里的值即可,修改成功后用hostname命令查看当前主机名是否设置成功。

       另外为了能正确解析主机名,最好也修改/etc/hosts文件里对应的主机名
      

2)在Fedora下修改机器名称

通过对"/etc/sysconfig/network"文件修改其中"HOSTNAME"后面的值,改成我们规定的名称。

命令:vi /etc/sysconfig/network,修改如下:
   
        

    同样为了能正确解析主机名,最好也修改/etc/hosts文件里对应的主机名。

(2)配置hosts文件(必须)

"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName  IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名对应的IP地址。

我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器(这也就是为什么在修改主机名的同时最好修改该文件中对应的主机名),解决的办法就是修改"/etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。

例如:机器为"Master.Hadoop:192.168.1.141"对机器为"Salve1.Hadoop:192.168.1.142"用命令"ping"记性连接测试。测试结果如下:
   

从上图中的值,直接对IP地址进行测试,能够ping通,但是对主机名进行测试,发现没有ping通,提示"unknown host——未知主机",这时查看"Master.Hadoop"的"/etc/hosts"文件内容会发现里面没有"192.168.1.142  Slave1.Hadoop"内容,故而本机器是无法对机器的主机名为"Slave1.Hadoop" 解析。

在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件中都要添加如下内容:

192.168.1.141 Master.Hadoop

192.168.1.142 Slave1.Hadoop

192.168.1.137 Slave2.Hadoop

命令:vi /etc/hosts,添加结果如下:

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

从上图中我们已经能用主机名进行ping通了,说明我们刚才添加的内容,在局域网内能进行DNS解析了,那么现在剩下的事儿就是在其余的Slave机器上进行相同的配置。然后进行测试。

1.4 所需软件

(1)JDK软件

    下载地址:http://www.oracle.com/technetwork/java/javase/index.html

    JDK版本:jdk-7u25-linux-i586.tar.gz

(2)Hadoop软件

    下载地址:http://hadoop.apache.org/common/releases.html

    Hadoop版本:hadoop-1.1.2.tar.gz