
3.2 安装Hadoop前的准备工作
在Hadoop集群中,大部分的机器都是作为Datanode工作的。Datanode的硬件规格推荐采用表3-1的配置:
表3-1 Datanode的硬件配置

Namenode提供整个HDFS文件系统的目录管理、块管理等所有服务,因此需要更多的内存,与集群中的数据块数量相对应,并且需要优化RAM的内存通道带宽,采用双通道或三通道以上内存。硬件规格可以采用表3-2的配置:
表3-2 Namenode的硬件配置

Secondary namenode在小型集群中可以和Namenode共用一台机器,较大的集群可以采用与Namenode相同的硬件。考虑到关键节点的容错性,建议读者购买加固的服务器来运行Namenodes和Jobtrackers,配有冗余电源和企业级RAID磁盘。最好是有一个备用机,当namenode或jobtracker其中之一突然发生故障时可以替代使用。
Hadoop集群往往需要运行几十、几百或上千个节点,构建匹配其工作负载的硬件,可以为一个运营团队节省可观的成本,因此,需要精心的策划和慎重的选择。读者需要注意的是,HDFS目前还不是一个HA(高可用性)系统,这是因为NameNode是HDFS集群中的单点失败。如果NameNode下线了,那整个HDFS文件系统就不可用。虽然我们可以在另一个单独的机器上部署第二个NameNode,但是这第二个NameNode无法做到实时的冗余性,它只是提供了一个有延时的副本。根据我们的实际经验,DataNode不需要使用RAID存储,这是因为文件数据已经在多服务器之间复制了。我们建议NameNode所在的机器应该是:
1.具有很多内存的,性能良好的服务器;内存越多,文件系统越大,块的大小可以越小;
2.尽量使用ECC RAM;
3.不要在NameNode所在的机器上安装DataNode、JobTracker或TaskTracker服务。
上面是整个硬件的一些考虑。对于软件,特别是操作系统部分,可选的Linux很多。表3-3是我们在本书中的一个选择,供读者参考。
表3-3 软件配置

HDP2.4是HortonWorks提供的Hadoop发行版,提供大数据云存储、大数据处理和分析等服务。Apache Ambari是对Hadoop进行监控、管理和生命周期管理的基于网页的开源项目。Ambari解决Hadoop生态系统部署,这是因为hadoop组件间有依赖,包括配置、版本、启动顺序、权限配置等。
3.2.1 Linux主机配置
为了方便集群中各个主机之间的通信,我们需要设置各主机IP地址。我们以两台机器为例来安装和配置Hadoop,如表3-4所示。
表3-4 主机配置

修改完成后,输入命令IP addr查看IP是否修改成功。为了方便集群中各个主机使用机器名称进行通信,我们设置主机名如下:
hostname master #修改主机名为master cat /etc/sysconfig/network #打开网络配置文件
如果输出结果中有“HOSTNAME=master”,则修改成功。按照上面的方法修另外一个centos系统的主机名为slave01。
3.2.2 配置Java环境
Hadoop需要Java的支持,下面我们给集群中的各主机配置Java环境。
1.第一步:检查系统是否有已安装好的jdk。具体操作如下:
rpm -qa|grep jdk #查看已安装的jdk
如果系统已安装jdk,则需先卸载对应的jdk,命令如下:
rpm -e --nodeps jdk-1.7.0_25-fcs.x86_64 #卸载对应的jdk
具体如下所示:

2.第二步:下载JDK
访问Java官方网站,如图3-4所示,找对图中框线的部分,下载即可。

图3-4 下载JDK
3.第三步:安装JDK
进入jdk所在目录,输入以下命令安装jdk:
yum install jdk-7u45-linux-x64.rpm
按照提示,按回车键,即可完成安装。
第四步:配置Java环境
vim /etc/profile
在文件最末尾加上如下信息:
export JAVA_HOME=/usr/java/jdk1.7.0_45 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
第五步:测试Java是否安装成功
输入“java –version”,如果看到屏幕上显示如下信息:

则证明安装成功。然后按照上面的方法在其他机器上安装JDK。
3.2.3 安装NTP和python
1.给集群中各主机安装NTP
NTP用来在服务器上保持时间同步。由于集群中的主机时间必须要同步,所以我们必须安装NTP并启动NTP服务,输入命令:
yum install ntp –y service ntp start #开启ntpd服务 ntpdate asia.pool.ntp.org chkconfig ntpd on #设置ntpd服务为默认启动
2.安装python
由于ambari是基于python编写的,所以我们必须给集群中各主机安装python 2.6或更高的版本。CentOS 6.5默认已安装python,我们输入以下命令查看版本是否满足要求(python2.6 or later):
python --version #查看python版本(python2.6 or later)
Python版本信息如图3-5所示:

图3-5 Python版本信息
3.2.4 安装和配置openssl
由于master与slave之间是通过SSH通信的,而SSH是依赖于SSL的,所以,下面我们给集群中各主机安装或升级openssl版本的方法。
1.第一步:检查openssl版本
输入: rpm -qa | grep openssl 结果: openssl-1.0.1e-15.el6.x86_64
2.第二步:升级openssl
上一步中如果输出的是:openssl-1.0.1e-15.x86_64 (1.0.1 build 15) ,则我们需要通过下面的命令行来升级openssl。
yum upgrade openssl
3.第三步:检查openssl是否为最新版本(1.0.1 build 16)
rpm -qa | grep openssl
结果应是:openssl-1.0.1e-16.el6.x86_64。
3.2.5 启动和停止特定服务
1.第一步:开启apache
我们还需要开启集群中各主机的apache http服务,输入如下命令:
service httpd restart
2.第二步:关闭防火墙、SELinux,并统一时区
由于Hadoop有一套自身的安全机制,所以我们需要关闭集群中所有服务器的防火墙及SELinux,并统一时区。
关闭防火墙:
chkconfig --level 35 iptables off #终止防火墙 service iptables stop #关闭防火墙服务
关闭SELinux:
vi /etc/sysconfig/selinux SELINUX=disabled #修改后需要重启生效。 setenforce 0 #执行后不需要重启。
最后需要统一时间,设置Linux系统为同一个时区。
3.2.6 配置SSH无密码访问
以下操作只需在master上进行。运行本书附录上给出的auth-ssh.sh脚本即可:
./auth-ssh.sh
然后测试是否互通。在master上,输入“ssh slave01”。如果出现如下所示的信息,则表示master可以免密码登录slave01成功:

同样,在slave01上,输入“ssh master”,如果出现如下所示的信息,表示slave01可以免密码登录master成功:
