用 Hadoop 进行分布式数据处理,第 2 部分: 进阶(3)

配置 Hadoop 以实现分布式操作

下一步是要使所有节点互联互通。这可以 /etc/hadoop-0.20/conf.dist/ 中的两个名为 masters 和 slaves 的文件中实现。本例中的三个节点的 IP 地址是静态分配的,如清单 3 所示(来自 /etc/hosts):


清单 3. 该设置的 Hadoop 节点(/etc/hosts)
master 192.168.108.133 slave1 192.168.108.134 slave2 192.168.108.135  

因此,在主节点上,更新 /etc/hadoop-0.20/conf.dist/masters 来确定主节点,如下所示:

master  

然后在 /etc/hadoop-0.20/conf.dist/slaves 中确定从节点, 其中包括以下两行:

slave1 slave2  

接下来,从每个节点上,将 Secure Shell (ssh) 连接到所有其他节点,确保 pass-phraseless ssh 在运行。所有这些文件(masters,slaves)都由本系列第 1 部分中使用过的 Hadoop 启动和停止工具使用。

下一步,在 /etc/hadoop-0.20/conf.dist 子目录中继续进行 Hadoop 配置。以下变更需要应用于所有节点(主节点和从节点),如同 Hadoop 文档中所定义的。首先,在 core-site.xml 文件(清单 4)中确定 HDFS 主节点,它定义名称节点的主机和端口(注意主节点的 IP 地址的使用)。core-site.xml 文件定义 Hadoop 的核心属性。


清单 4. 在 core-site.xml 中定义 HDFS 主节点
<configuration> <property> <name>fs.default.name<name> <value>hdfs://master:54310<value> <description>The name and URI of the default FS.</description> <property> <configuration>  

下一步,确认 MapReduce jobtracker。jobtracker 位于其自己的节点上,但对于本配置,将其放在主节点上,如清单 5 所示。mapred-site.xml 文件包含 MapReduce 属性。


清单 5. 在 mapred-site.xml 中定义 MapReduce jobtracker
<configuration> <property> <name>mapred.job.tracker<name> <value>master:54311<value> <description>Map Reduce jobtracker<description> <property> <configuration>  

最后,定义默认复制因子(清单 6)。该值定义将创建的副本数,一般小于 3。在本例中,将其定义为 2(数据节点的数量)。该值在包含 HDFS 属性的 hdfs-site.xml 中定义。


清单 6. 在 hdfs-site.xml 中定义默认数据副本
<configuration> <property> <name>dfs.replication<name> <value>2<value> <description>Default block replication<description> <property> <configuration>  

配置项如 清单 4 所示,分布式设置所需的元素见 清单 5 和 清单 6。Hadoop 在这里提供大量配置选项,支持您按需定制整个环境。参考资料 部分含有关于这些选项的更多信息。

完成配置之后,下一步是要格式化名称节点(HDFS 主节点)。对于该操作,使用 hadoop-0.20 实用程序指定名称节点和操作(-format):


清单 7. 格式化名称节点
user@master:~# sudo su - root@master:~# hadoop-0.20 namenode -format 10/05/11 18:39:58 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = master/127.0.1.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2+228 STARTUP_MSG: build = -r cfc3233ece0769b11af9add328261295aaf4d1ad; ************************************************************/ 10/05/11 18:39:59 INFO namenode.FSNamesystem: fsOwner=root,root 10/05/11 18:39:59 INFO namenode.FSNamesystem: supergroup=supergroup 10/05/11 18:39:59 INFO namenode.FSNamesystem: isPermissionEnabled=true 10/05/11 18:39:59 INFO common.Storage: Image file of size 94 saved in 0 seconds. 10/05/11 18:39:59 INFO common.Storage: Storage directory /tmp/hadoop-root/dfs/name has been successfully formatted. 10/05/11 18:39:59 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at master/127.0.1.1 ************************************************************/ root@master:~#  

格式化名称节点之后,就可以启动 Hadoop 守护进程了。可以对第 1 部分中的伪分布式配置执行同样的操作,但进程为分布式配置完成同样的工作。注意,这里的代码启动名称节点和从属名称节点(正如 jps 命令所指示):


清单 8. 启动名称节点
root@master:~# /usr/lib/hadoop-0.20/bin/start-dfs.sh starting namenode, logging to /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-namenode-mtj-desktop.out 192.168.108.135: starting datanode, logging to /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-datanode-mtj-desktop.out 192.168.108.134: starting datanode, logging to /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-datanode-mtj-desktop.out 192.168.108.133: starting secondarynamenode, logging to /usr/lib/hadoop-0.20/logs/hadoop-root-secondarynamenode-mtj-desktop.out root@master:~# jps 7367 NameNode 7618 Jps 7522 SecondaryNameNode root@master:~#  

现在,如果使用 jps 节点检测其中一个从节点(数据节点),您会看到每个节点上都有一个数据节点守护进程:


清单 9. 检测其中一个从节点上的数据节点
root@slave1:~# jps 10562 Jps 10451 DataNode root@slave1:~#  

下一步是要启动 MapReduce 守护进程(jobtracker 和 tasktracker)。如 清单 10 所示执行该操作。注意,脚本启动主节点上的 jobtracker(正如配置所定义的;参见 清单 5)和每个从节点上的 tasktrackers。主节点上的一个 jps 命令显示 jobtracker 正在运行。


清单 10. 启动 MapReduce 守护进程
root@master:~# /usr/lib/hadoop-0.20/bin/start-mapred.sh starting jobtracker, logging to /usr/lib/hadoop-0.20/logs/hadoop-root-jobtracker-mtj-desktop.out 192.168.108.134: starting tasktracker, logging to /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-tasktracker-mtj-desktop.out 192.168.108.135: starting tasktracker, logging to /usr/lib/hadoop-0.20/bin/../logs/hadoop-root-tasktracker-mtj-desktop.out root@master:~# jps 7367 NameNode 7842 JobTracker 7938 Jps 7522 SecondaryNameNode root@master:~#  

最后,使用 jps 检查一个从节点。这里您可以看到,一个 tasktracker 守护进程将数据节点守护进程联接到每个从数据节点上:


清单 11. 检测其中一个从节点上的数据节点
root@slave1:~# jps 7785 DataNode 8114 Jps 7991 TaskTracker root@slave1:~#  

启动脚本、节点和启动的守护进程之间的关系如图 4 所示。如您所见,start-dfs 脚本启动名称节点和数据节点,而 start-mapred 脚本启动 jobtracker 和 tasktrackers。


图 4. 每个节点的启动脚本和守护进程的关系

每个节点的启动脚本和守护进程的关系

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2d55d267c803c66ff885b2f3e1e3bb4f.html