Hadoop集群的安装和配置,主要分为两个部分:一部分是主机环境配置,主要是指Hadoop集群所依赖的操作系统及其相关软件的安装配置,包括操作系统安装、JDK安装配置、主机规划与IP地址映射配置、无密码认证会话配置;另一部分是Hadoop基本配置,主要是指Hadoop集群的各种基本组件的配置,包括HDFS的配置、MapReduce配置。
下面根据上面总结的两个部分进行详细配置实践。在配置之前,先准备一下我们使用的软件,如下所示:
hadoop集群IP:
172.16.0.90 hadoop-1 master ; 172.16.0.91 hadoop-2 slave; 172.16.0.92 hadoop-3 slave ;172.16.0.93 hadoop-4 slave;
JDK安装配置
直接安装即可,执行如下命令:
cd ~/installation chmod +x jdk-6u31-linux-x64.bin ./jdk-6u31-linux-x64.bin cd ~/installation chmod +x jdk-6u31-linux-x64.bin ./jdk-6u31-linux-x64.binJDK配置,需要修改环境变量文件vim etc/profile , 在vim etc/profile文件的最后面增加如下配置行,如下所示:
export Java_HOME=/home/jdk1.6.0_31 export JRE_HOME=/home/jdk1.6.0_31/jre export PATH=$PATH:/home/jdk1.6.0_31/bin export CLASSPATH=./:/home/jdk1.6.0_31/lib:/home/jdk1.6.0_31/jre/lib
最后,使配置生效,并验证:
[root@hadoop-1 ~]# java -version java version "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b04) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
在每台机器上的配置,都按照上面的步骤进行配置。
主机规划与IP地址映射配置
集群中分为主结点(Master Node)和从结点(Slave Node)两种结点。我们选择一个主结点,两个从结点进行配置。
主结点IP为172.16.0.90,修改主结点的/etc/hosts(sudo vi /etc/hosts),内容配置如下所示(不需要改动IPV6的配置内容):
127.0.0.1 localhost 172.16.0.90 hadoop-1 172.16.0.91 hadoop-2 172.16.0.92 hadoop-3 172.16.0.93 hadoop-4
还要修改主机名,对应的配置文件为/etc/hostname,修改该配置文件(sudo vi /etc/hostname),内容如下所示:
hadoop-1这里,因为在集群启动以后,hadoop-1需要登录到任意一个从结点上,执行相应的授权操作,所以,hadoop-1的/etc/hosts中要配置上集群中全部从结点的主机名到对应IP地址的映射。
从结点分别为hadoop-2(172.16.0.91)、hadoop-3(172.16.0.92)、hadoop-4(172.16.0.93)。
从结点的配置方式相同。
总结说明
为什么建议使用主机名称,而不直接使用IP地址?
第一,比较直观。通过看主机名称,你就能够知道集群中哪台机器是什么角色。
第二,扩展性好。因为通过/etc/hosts对主机名和IP地址进行了映射,即使IP变了,主机名可以保持不变。在Hadoop安装的时候,需要配置 master和slaves两个文件,如果这两个文件都使用IP的话,试想,一个具有200个结点的集群,因为一次企业的网络规划重新分配网段,导致IP 全部变更,那么这些配置都要进行修改,工作量很大。但是,如果使用主机名的话,Hadoop的配置不需要任何改变,而对于主机名到IP地址的映射配置交给系统管理员去做好了。
无密码认证会话配置
1、基本配置
首先检查,你的ssh是否安装并启动,如果没有则进行安装:
sudo apt-get install openssh-server
在hadoop-1主结点上,生成密钥对:
ssh-keygen -t rsa一路回车下去即可,即可生成公钥(~/.ssh/id_rsa.pub)和私钥(~/.ssh/id_rsa)文件。
添加认证公钥,并设置权限:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys
验证配置,执行如下命令:
hadoop-1 如果不需要输入密码,即可登录hadoop-1(登录本机),说明配置正确。
接着,我们要进行认证公钥的分发传播。
(1)远程拷贝master的公钥到slave-01结点上
执行如下命令:
scp ~/.ssh/id_rsa.pub root@hadoop-2:/home/hadoop/.ssh/id_rsa.pub.master 这时,因为结点之间(master到slave-01)要进行数据交换,需要输入slave-01结点的登录密码(hadoop用户),才能执行文件的远程拷贝。这里输入密码是正常的,不要与结点之间通过ssh进行无密码公钥认证混淆。
注意:分发公钥时,主要修改目标master公钥文件副本名称,以防覆盖掉从结点上已经存在并且正在使用的公钥文件。
在slave-01结点上,将master生成的密钥加入到认证密钥文件:
cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys(2)远程拷贝master的公钥到slave-02结点上
类似地,执行如下命令:
scp ~/.ssh/id_rsa.pub hadoop@slave-02:/home/hadoop/.ssh/id_rsa.pub.master
在slave-02结点上,将master生成的密钥加入到认证密钥文件,同样执行命令:
cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_keys chmod 644 ~/.ssh/authorized_keys这时,可以验证从master结点分别登录到slave-01和slave-02结点:
ssh slave-01 ssh slave-02如果不需要输入密码,则配置成功。
2、总结说明
(1)为什么要将master上的公钥分发到集群中各从结点slaves上?
密钥是用来进行安全认证的。在两个结点之间进行认证,主要有两种方式:
一是通过输入密码进行认证,你必须知道对方主机的登录用户名和口令,才能登录到对方主机上进行合法的授权操作;
二是不需要密码就能够认证,这就需要用到密钥,当一个主机A访问另一个主机B时,如果对方主机B的认证密钥配置了A的公钥,那么A访问B是就能够通过配置的A的公钥进行认证,而不需要进行输入密码认证。
Hadoop集群master分发公钥到slaves结点,并且,在各个slaves结点上配置了公钥认证,这时,当master通过ssh登录到 slaves结点上以后,可以执行相应的授权操作,例如,当master要停止整个HDFS集群(namenode、datanode)时,可以在 master上就能直接登录到各个slaves结点上,直接关闭datanode,从而关闭整个集群。这样的话,你就不需要分别登录每个datanode 上,去执行相应的关闭��作。