前提:我们以在三台主机组成的集群上配置Hadoop为例,来介绍Hadoop集群的配置过程。为此,我们做如下规划:

         h1:10.37.128.2—NameNode,JobTracker(角色为主节点master)

         h2:10.37.128.3—DataNode,TaskTracker(角色为从节点slave)

         h3:10.37.128.4—DataNode,TaskTracker(角色为从节点slave)

         也就是,h1,h2,h3都是主机名,h1作为Hadoop的主节点,h2和h3作为Hadoop的2个从节点。也可以利用DNS的方式解决这个问题。

 

下面是Hadoop集群的详细配置过程:

1.建立Hadoop运行账号

在h1,h2,h3创建一个同名的账号,假设为grid。三台主机上面的Hadoop运行账号一定要同名哦。

 

2.配置/etc/hosts

/etc/hosts这个文件用于定义主机名和IP地址之间的映射关系。

在h1,h2,h3上的/etc/hosts中都要添加如下信息:

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop中的主从节点指什么

 

3.SSH配置

SSH配置的目的是让Hadoop集群中的各节点之间可以免密码相互通信。

SSH配置步骤如下:

          a)首先要在三台主机上都要装上OpenSSH

          b)在h1上用户主目录下执行ssh-keygen -t rsa命令,结果如下所示:

Hadoop中的主从节点指什么 配置hadoop集群主节点_主机名_02

这样就会在~/.ssh目录下生成id_rsa,id_rsa.pub两个文件,其中id_rsa是私钥,id_rsa.pub是公钥。

            c)将id_rsa.pub拷贝一份,并重命名为authorized_keys.

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_03

           d)在h2,h3主机上执行b)c)两个步骤。生成相应的authorized_keys文件。

           e)将h1,h2,h3主机上的authorized_keys文件合成一个大的authorized_keys文件。

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop_04

然后将这个合并后的authorized_keys文件,去覆盖掉h1,h2,h3主机上的authorized_keys文件。

Remarks:

         a)验证SSH是否配置正确,可以使用ssh h1,ssh h2,ssh s3来验证一下。

关于SSH的原理请参见博文

 

4.JDK的配置

在h1,h2,h3三台主机上配置JDK,因为Hadoop运行在Java的平台下。在Linux系统下配置JDK以及设定环境变量的具体过程略。

 

5.在h1主机上下载Hadoop压缩包并加压缩

           a)下载Hadoop压缩包hadoop-*.*.*.tar.gz

           b)解压缩Hadoop压缩包,我们这里假设解压缩到/home/grid目录下,使用的命令是tar -zxvf hadoop-*.*.*.tar.gz

 

6.在h1主机上修改Hadoop的配置文件

           a)修改$HADOOP_HOME/conf/Hadoop-env.sh

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_05

此处假设我的JDK是安装在/usr/java/jdk1.6.0_26目录下。

            b)修改$HADOOP_HOME/conf/core-site.xml

设置这个文件目的是设定HDFS系统的NameNode的主机名和端口(也可以把主机名直接写成IP)

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop中的主从节点指什么_06

             c)修改$HADOOP_HOME/conf/hdfs-site.xml

Hadoop中的主从节点指什么 配置hadoop集群主节点_主机名_07

这个配置文件设置的是HDFS系统的数据备份策略。设置为2表示HDFS里面数据都会有两份。这是一个安全策略。

               d)修改$HADOOP_HOME/conf/mapred-site.xml

这个配置文件配置的是指定HDFS的JobTracker的主机名和端口(也可以把主机名直接写成IP)。

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_08

               e)修改$HADOOP_HOME/conf/masters

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_09

将Hadoop集群中的所有NameNode,JobTracker的节点的主机名添加到masters文件中。

               f)修改$HADOOP_HOME/conf/slaves

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_10

将Hadoop集群中的所有DataNode,TaskTracker的节点的主机名添加到slaves文件中。

 

7.向其他节点复制Hadoop

完成了第5,6两个步骤,就可以将Hadoop的目录复制到Hadoop集群中的其他节点,也就是本例中的h2,h3主机。

Hadoop中的主从节点指什么 配置hadoop集群主节点_主机名_11

这种方式的好处不用在h2,h3主机上进行第5,6两个步骤,去对每个Hadoop集群中的节点修改hadoop配置文件。

 

8.格式化分布式文件系统

在NameNode节点上也就是本例的h1主机上进行如下操作:

Hadoop中的主从节点指什么 配置hadoop集群主节点_HDFS_12

 

9.启动Hadoop

在Hadoop集群的主节点上运行$HADOOP_HOME/bin/start-all.sh来启动Hadoop的各个守护进程

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop中的主从节点指什么_13

 

10.验证Hadoop是否启动成功

采用JDK自带jps工具去在各节点上查看Hadoop的守护进程是否启动成功。

在h1上查看效果如下所示:

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop_14

在h1上我们可以看到有3个Hadoop相关的进程被开启。分别是JobTracker、NameNode和SecondaryNameNode。

在h2上查看效果如下所示:

Hadoop中的主从节点指什么 配置hadoop集群主节点_Hadoop_15

在h2上我们可以看到有2个Hadoop相关的进程被开启。分别是DataNode和TaskTracker。