Hadoop实战
下面将一步一步演示如何部署一个5节点的集群,并测试一下MapReduce分布式处理的强大功能。
1、应用场景
接下来我们将实际部署一个5节点的集群,并采用MapReduce计算出2个namelist文件中各个名字出现的次数,程序架构设计如下所示。
其中NameNode主节点和DataNode从节点的分布情况如下:
NameNode主节点 | DataNode从节点 |
192.168.3.230 | 192.168.3.231 192.168.3.232 192.168.3.233 192.168.3.234 |
2、准备集群环境
1)配置ssh无密码登录机器
在 Hadoop 分布式环境中,NameNode主节点需要通过 SSH 来启动和停止DataNode从节点上的各类进程。我们需要保证环境中的各台机器均可以通过SSH 登录访问,并且 Name Node 用 SSH 登录 Data Node 时,不需要输入密码,这样 Name Node 才能在后台自如地控制其它结点。可以将各台机器上的 SSH 配置为使用无密码公钥认证方式来实现。
现在流行的各类 Linux 发行版一般都安装了 SSH 协议的开源实现 OpenSSH, 并且已经启动了 SSH 服务, 即这些机器缺省应该就是支持 SSH 登录的。如果你的机器缺省不支持 SSH, 请下载安装 OpenSSH,以下是配置 SSH 的无密码公钥认证的过程。
首先,在NameNode主节点机器上执行命令,具体如下面的代码所示:
[root@localhost hadoop-0.20.203.0]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa Generating public/private dsa key pair. Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: 09:1b:94:6a:98:35:3c:0b:d6:3f:b1:a5:30:4b:ce:14 root@localhost.localdomain [root@localhost hadoop-0.20.203.0]# |
然后,在NameNode主节点机器上将生成的公钥文件放到/tmp目录下,具体操作如下所示:
[root@localhost hadoop-0.20.203.0]# cp ~/.ssh/id_dsa.pub /tmp [root@localhost hadoop-0.20.203.0]# |
其次,将这个NameNode主节点的公钥文件放到4台DataNode从节点机器的/tmp目录下。
最后,我们在NameNode主节点和DataNode从节点机器上同时执行下面的命令:
[root@localhost tmp]# cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys [root@localhost tmp]# |
以上都做完了以后,我们就可以用SSH无密码的方式来登录这5台的机器了,可以用如下的方法进行一下简单测试:
[root@localhost tmp]# ssh 192.168.3.230 [root@localhost tmp]# ssh 192.168.3.231 [root@localhost tmp]# ssh 192.168.3.232 [root@localhost tmp]# ssh 192.168.3.233 [root@localhost tmp]# ssh 192.168.3.234 |
2)安装必须的软件
Hadoop的NameNode主节点,是通过Java程序来跟各DataNode从节点进行通信,并控制它们的,所以我们除了要安装Hadoop的二进制版本之外,我们还需要安装一个JDK来确保Hadoop运行环境的稳定。
首先,我们需要下载Hadoop和Java的安装程序。推荐大家去官网下载,具体怎么样下载不是本文的重点,请大家自行解决。
其次,下载之后我们在NameNode主节点上解压并安装JDK和Hadoop软件,具体操作如下代码所示:
[root@localhost opt]# ll total 152068 -rw-r--r-- 1 root root 60569605 Aug 15 10:13 hadoop-0.20.203.0rc1.tar.gz -rw-r--r-- 1 root root 94971634 Aug 15 10:28 jdk-7-linux-x64.tar.gz [root@localhost opt]# |
[root@localhost opt]# tar zxf jdk-7-linux-x64.tar.gz [root@localhost opt]# tar zxf hadoop-0.20.203.0rc1.tar.gz [root@localhost opt]# ll total 152084 drwxr-xr-x 12 root root 4096 May 4 14:30 hadoop-0.20.203.0 -rw-r--r-- 1 root root 60569605 Aug 15 10:13 hadoop-0.20.203.0rc1.tar.gz drwxr-xr-x 10 500 500 4096 Jun 27 16:51 jdk1.7.0 -rw-r--r-- 1 root root 94971634 Aug 15 10:28 jdk-7-linux-x64.tar.gz [root@localhost opt]# |
之后, 我们在NameNode主节点和DataNode从节点上将java加入到PATH中,只需要在/etc/profile中添加export PATH=/opt/jdk1.7.0/bin:$PATH即可,/opt/jdk1.7.0/bin是Java程序集的路径。
最后,在NameNode主节点和DataNode从节点的机器上,执行”su –“ 刷新一下用户的环境变量,具体如下:
[root@test1 ~]# su - [root@test1 ~]# |
以上工作都完后,说明我们的准备工作都已经完成了,接下来我们将进行到实际的配置集群的阶段了。