前提:我们以在三台主机组成的集群上配置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中都要添加如下信息:
3.SSH配置
SSH配置的目的是让Hadoop集群中的各节点之间可以免密码相互通信。
SSH配置步骤如下:
a)首先要在三台主机上都要装上OpenSSH
b)在h1上用户主目录下执行ssh-keygen -t rsa命令,结果如下所示:
这样就会在~/.ssh目录下生成id_rsa,id_rsa.pub两个文件,其中id_rsa是私钥,id_rsa.pub是公钥。
c)将id_rsa.pub拷贝一份,并重命名为authorized_keys.
d)在h2,h3主机上执行b)c)两个步骤。生成相应的authorized_keys文件。
e)将h1,h2,h3主机上的authorized_keys文件合成一个大的authorized_keys文件。
然后将这个合并后的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
此处假设我的JDK是安装在/usr/java/jdk1.6.0_26目录下。
b)修改$HADOOP_HOME/conf/core-site.xml
设置这个文件目的是设定HDFS系统的NameNode的主机名和端口(也可以把主机名直接写成IP)
c)修改$HADOOP_HOME/conf/hdfs-site.xml
这个配置文件设置的是HDFS系统的数据备份策略。设置为2表示HDFS里面数据都会有两份。这是一个安全策略。
d)修改$HADOOP_HOME/conf/mapred-site.xml
这个配置文件配置的是指定HDFS的JobTracker的主机名和端口(也可以把主机名直接写成IP)。
e)修改$HADOOP_HOME/conf/masters
将Hadoop集群中的所有NameNode,JobTracker的节点的主机名添加到masters文件中。
f)修改$HADOOP_HOME/conf/slaves
将Hadoop集群中的所有DataNode,TaskTracker的节点的主机名添加到slaves文件中。
7.向其他节点复制Hadoop
完成了第5,6两个步骤,就可以将Hadoop的目录复制到Hadoop集群中的其他节点,也就是本例中的h2,h3主机。
这种方式的好处不用在h2,h3主机上进行第5,6两个步骤,去对每个Hadoop集群中的节点修改hadoop配置文件。
8.格式化分布式文件系统
在NameNode节点上也就是本例的h1主机上进行如下操作:
9.启动Hadoop
在Hadoop集群的主节点上运行$HADOOP_HOME/bin/start-all.sh来启动Hadoop的各个守护进程
10.验证Hadoop是否启动成功
采用JDK自带jps工具去在各节点上查看Hadoop的守护进程是否启动成功。
在h1上查看效果如下所示:
在h1上我们可以看到有3个Hadoop相关的进程被开启。分别是JobTracker、NameNode和SecondaryNameNode。
在h2上查看效果如下所示:
在h2上我们可以看到有2个Hadoop相关的进程被开启。分别是DataNode和TaskTracker。