简介: Hadoop 是一个实现了 MapReduce 计算模型的开源分布式并行编程框架,借助于 Hadoop, 程序员可以轻松地编写分布式并行程序,将其运行于计算机集群上,完成海量数据的计算。在本文中,详细介绍了如何部署 Hadoop 分布式运行环境,如何让程序分布式运行于多台普通的计算机上,如何使用 IBM MapReduce Tools 轻松地将 MapReduce 程序部署到 Hadoop 分布式环境中运行等内容。
一 前言
在本系列文章的第一篇:用 Hadoop 进行分布式并行编程,第 1 部分: 基本概念与安装部署中(见 ),介绍了 MapReduce 计算模型,分布式文件系统 HDFS,分布式并行计算等的基本原理, 并且详细介绍了如何安装 Hadoop,如何在单机及伪分布式环境 (在一台单机中用多进程模拟) 运行基于 Hadoop 的并行程序。在本系列文章的第二篇:用 Hadoop 进行分布式并行编程,第 2 部分:程序实例与分析中( ),介绍了如何针对一个具体的计算任务,基于 Hadoop 编写 MapReduce 并行程序。 本文将介绍真实的 Hadoop 分布式运行环境, 包括如何在多台普通的计算机上部署分布式运行环境,如何将 MapReduce 程序远程部署并运行在这个分布式环境上,并简略介绍了”云计算平台” 以及计算能力按需租用服务。
使用三台机器,机器名分别为 homer06, homer07, homer08,均安装 RedHat Enterprise Linux 5.0 (其它 Linux 发行版亦可), 确保各台机器之间网络畅通,机器名与 IP 地址之间解析正确,从任一台机器都可以 ping 通其它机器的机器名。如有机器名的解析问题,可通过设置 /etc/hosts 文件解决,当然更好的解决方法是在你的网络中配置 DNS 服务器。此外,需要在三台机器上创建相同的用户帐号,如 caoyuz, 或直接使用 root 帐号亦可。
我们将使用 homer06 作为分布式文件系统 HDFS 的 Name Node 及 MapReduce 运行过程中的 Job Tracker 结点,我们将 homer06 称之为主结点。其它两台机器 (homer07, homer08) 作为 HDFS 的 Data Node 以及 MapReduce 运行过程中的 Task Tracker 结点,这些结点可统称为从结点。如你需要部署更多的机器,也是很容易的,将新加入的机器作为 Data Node 以及 Task Tracker 结点即可,其配置过程与本文介绍的三台机器的环境类似,此不赘述。
在 Hadoop 分布式环境中,Name Node (主节点) 需要通过 SSH 来启动和停止 Data Node (从结点)上的各类进程。我们需要保证环境中的各台机器均可以通过 SSH 登录访问,并且 Name Node 用 SSH 登录 Data Node 时,不需要输入密码,这样 Name Node 才能在后台自如地控制其它结点。可以将各台机器上的 SSH 配置为使用无密码公钥认证方式来实现。
现在流行的各类 Linux 发行版一般都安装了 SSH 协议的开源实现 OpenSSH, 并且已经启动了 SSH 服务, 即这些机器缺省应该就是支持 SSH 登录的。如果你的机器缺省不支持 SSH, 请下载安装 OpenSSH。
以下是配置 SSH 的无密码公钥认证的过程。首先,在 homer06 机器上执行命令,如代码清单 1 所示:
代码清单1
homer06: $ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/caoyuz/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/caoyuz/.ssh/id_rsa.
Your public key has been saved in /home/caoyuz/.ssh/id_rsa.pub.
The key fingerprint is:
2e:57:e2:bf:fd:d4:45:5c:a7:51:3d:f1:51:3c:69:68 root@krusty04
这个命令将为 homer06 上的当前用户 caoyuz 生成其密钥对,密钥对的保存路径使用缺省的 /home/caoyuz/.ssh/id_rsa, 要求输入 passphrase 的时候,直接回车。这样生成的证书以及公钥将存储在 /home/caoyuz/.ssh 目录,形成两个文件 id_rsa,id_rsa.pub。然后将 id_rsa.pub 文件的内容复制到每一台机器(包括本机 homer06)的 /home/caoyuz/.ssh/authorized_keys 文件的尾部,如果机器上不存在 /home/caoyuz/.ssh/authorized_keys 文件,可以自行创建一个。请注意 id_rsa.pub 文件的内容是长长的一行,复制时需注意,不要遗漏字符或混入了多余换行符。
接下来可以做一下 SSH 连接测试,从 homer06 分别向 homer06, homer07, homer08 发起 SSH 连接请求,确保不需要输入密码就能 SSH 连接成功。注意第一次 SSH 连接时会出现如下提示信息:
The authenticity of host [homer06] can't be established. The key fingerprint is: 74:32:91:f2:9c:dc:2e:80:48:73:d4:53:ab:e4:d3:1a Are you sure you want to continue connecting (yes/no)?
请输入 yes, 这样 OpenSSH 会把连接过来的这台主机的信息自动加到 /home/caoyuz/.ssh/know_hosts 文件中去,第二次再连接时,就不会有这样的提示信息了。