Running Hadoop On CentOS (Multi-Node Cluster)

February 22, 2012 / centos, Hadoop, Multi

本文将介绍如何在CentOS系统安装Hadoop机群,Hadoop版本为0.20.2,安装方法参考http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/。

准备

首先,在每个节点安装一个单节点机群,参照Running Hadoop On CentOS (Single-Node Cluster)

网络

现在,我们有多个机群启动并正在运行,我们需要修改Hadoop配置使其中一个节点作为master节点,其它节点作为slave节点

假设我们现在有一个master节点和两个slave节点,master节点的主机名为master,slave节点的主机名分别为slave1和slave2,在所有机器的/etc/hosts文件中添加以下内容:

 192.168.0.1    master
 192.168.0.2    slave1
 192.168.0.3    slave2

SSH无密码登陆

要确保master节点的hadoop用户能够不需要密码SSH登陆slave节点的hadoop用户,可以手动将master节点的/home/hadoop/.ssh/id_rsa.pub文件的内容添加到所有slave节点的/home/hadoop/.ssh/authorized_keys文件中,或是执行以下命令:

 $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave1
 $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave2

机群概况

在一个Hadoop机群中,master节点将运行master守护进程:用于HDFS存储的NameNode和用于MapReduce处理的JobTracker;所有的节点都运行slave守护进程:用于HDFS存储的DataNode和用于MapReduce处理的TaskTracker。

Hadoop配置

conf/masters

在master节点上,更新conf/masters文件,如下所示:

master

conf/slaves

在master节点上,更新conf/slaves文件,如下所示:

master slave

conf/core-site.xml

在所有节点上,修改core-site.xml文件:

 <!-- In: conf/core-site.xml -->
 <property>
   <name>fs.default.name</name>
   <value>hdfs://master:54310</value>
   <description>The name of the default file system.  A URI whose
   scheme and authority determine the FileSystem implementation.  The
   uri's scheme determines the config property (fs.SCHEME.impl) naming
   the FileSystem implementation class.  The uri's authority is used to
   determine the host, port, etc. for a filesystem.</description>
 </property>

conf/mapred-site.xml

在所有节点上,修改mapred-site.xml文件:

 <!-- In: conf/mapred-site.xml -->
 <property>
   <name>mapred.job.tracker</name>
   <value>master:54311</value>
   <description>The host and port that the MapReduce job tracker runs
   at.  If "local", then jobs are run in-process as a single map
   and reduce task.
   </description>
 </property>

conf/hdfs-site.xml

在所有节点上,修改hdfs-site.xml文件:

 <!-- In: conf/hdfs-site.xml -->
 <property>
   <name>dfs.replication</name>
   <value>3</value>
   <description>Default block replication.
   The actual number of replications can be specified when the file is created.
   The default is used if replication is not specified in create time.
   </description>
 </property>

在NameNode格式化HDFS文件系统

在启动多节点机群前,我们需要为NameNode格式化HDFS,此操作仅在初次建立Hadoop机群时执行,因为该操作会擦除HDFS文件系统上的数据。HDFS的naming信息存储在NameNode本地文件系统的指定目录,由属性dfs.name.dir设置。

 $ /opt/hadoop/bin/hadoop namenode -format

启动机群

启动机群有两个步骤。第一,启动HDFS守护进程:在master节点启动NameNode守护进程,在所有slave节点启动DataNode守护进程。第二,启动MapReduce守护进程:在master节点启动JobTracker守护进程,在所有slave节点启动JobTracker守护进程。

在master节点运行bin/start-dfs.sh命令,将会启动HDFS机群,在master节点运行NameNode守护进程,在conf/slaves文件列出的节点上运行DataNode守护进程。

此时,master节点上运行的Java进程有:

 $ jps
 24262 NameNode
 4925 Jps
 24403 DataNode
 24601 SecondaryNameNode

在slave1节点上,可能检查logs/hadoop-hadoop-datanode-slave1.log日志文件来判断命令的执行是否成功。DataNode会自动格式化其存储目录(由dfs.data.dir属性设置)

此时,slave节点上运行的Java进程有:

 $ jps
 2364 Jps
 27955 DataNode

在master节点运行bin/start-mapred.sh命令,将会启动MapReduce机群,在master节点运行JobTracker守护进程,在conf/slaves文件列出的节点上运行TaskTrackers守护进程。

此时,master节点上运行的Java进程有:

 $ jps
 24262 NameNode
 24848 TaskTracker
 5011 Jps
 24403 DataNode
 24601 SecondaryNameNode
 24704 JobTracker

在slave1节点上,可能检查logs/hadoop-hadoop-tasktracker-slave1.log日志文件来判断命令的执行是否成功。

此时,slave节点上运行的Java进程有:

 $ jps
 28130 TaskTracker
 2401 Jps
 24403 DataNode

停止机群

同启动机群一样,停止机群也分两步。第一,停止MapReduce守护进程:在master节点停止JobTracker守护进程,在所有slave节点停止JobTracker守护进程。第二,停止HDFS守护进程:在master节点停止NameNode守护进程,在所有slave节点停止DataNode守护进程。

在master节点运行bin/stop-mapred.sh命令,将会停止运行在master节点上的JobTracker守护进程,停止运行在conf/slaves文件列出的节点上的TaskTrackers守护进程。

在master节点运行bin/stop-dfs.sh命令,将会停止运行在master节点上的NameNode守护进程,停止运行在conf/slaves文件列出的节点上的DataNodes守护进程。