
2.4 HDFS的安装和配置
HDFS通过一个NameNode作为master来统筹管理多个作为slaves的DataNode,是Hadoop的核心功能组件。安装完Hadoop后,即完成了HDFS的安装。HDFS为分布式计算存储提供了底层支持,功能及用法类似于本地文件系统。
2.4.1 Hadoop的安装
HDFS是Hadoop的核心项目,安装程序已经包含在Hadoop核心程序包中,从一定意义上讲,HDFS的安装配置与Hadoop是一致的。
Hadoop集群安装主要有以下工作。
1.准备工作
(1)首先从官网下载一个Hadoop程序包。一般Hadoop分为两个压缩文件,一个是源代码,一个是编译好的程序包。用户可根据需要选择不同的版本下载安装。
(2)安装Linux服务器和必要的软件。Hadoop既可以支持单台服务器的伪分布式部署,也可以多台集群配置部署。必需的软件主要有Java、SSH等。
(3)对Linux进行必要的系统配置。如主机名、DNS、环境变量等。
2.安装Java并配置SSH无密码访问
通过配置SSH实现基于公钥方式的无密码登录,具体操作步骤为:创建一个新的hadoop账户,生成这个账户的SSH公钥,配置公钥授权文件及设置SSH服务登录方式等。
3.解压安装Hadoop安装包
将安装软件解压到集群内的所有机器上。
通常,安装路径要一致,一般用HADOOP_HOME指代安装的根路径,集群里的所有机器的HADOOP_HOME路径相同。
如果集群内机器的环境完全一样,可以在一台机器上配置好,然后将整个文件夹拷贝到其他机器的相同位置即可。
4.配置hadoop-env.sh文件
包含Hadoop启动的时候配置的环境变量,包括Hadoop自身配置、JDK等的设置。
5.配置core-site.xml、hdfs-site.xml、mapred-site.xml等文件
配置信息将在后面详细介绍。
6.格式化HDFS文件系统
这类似于Windows文件系统使用前需要格式化。
7.启动所有节点并测试
本章中,我们将下载使用Hadoop 2.6.0版本,在CentOS 6.5上分别搭建伪分布式环境(即在单独的一台服务器上安装运行所有的Hadoop功能组件)和集群环境作为实验平台。
(1)伪分布式部署。
①安装CentOS 6.5操作系统,如图2-14所示。

图2-14 安装CentOS操作系统
②检查Java安装情况,如图2-15所示。如未安装,可用rpm包或者yum等方式安装Java。这里,我们使用Java 1.7版本。

图2-15 Java安装包
③修改hosts文件,设置主机名。在hosts文件最后,加入一行主机名与IP地址,如图2-16所示。

图2-16 hosts文件
④使用useradd命令创建“hadoop”用户,登录并配置SSH无密码登录,如图2-17所示。

图2-17 配置SSH
进入.ssh目录,将id_rsa.pub复制,并且命名为“authorized_keys”,然后设置文件权限,如图2-18所示。

图2-18 设置文件权限
⑤将Hadoop安装包解压到要安装的路径中。这里,将Hadoop安装在/home/hadoop/用户目录下。
⑥配置环境变量。在/etc/profile文件中配置Java及Hadoop相关的环境变量,并使之生效。如图2-19所示。

图2-19 配置环境变量
⑦配置Hadoop安装文件中的环境变量。
配置etc/hadoop/hadoop-env.sh文件,如图2-20所示。

图2-20 etc/hadoop/hadoop-env.sh文件
配置etc/hadoop/core-site.xml文件,加入如图2-21所示的内容。

图2-21 配置etc/hadoop/core-site.xml文件
配置etc/hadoop/hdfs-site.xml文件,加入如图2-22所示的内容。

图2-22 配置etc/hadoop/hdfs-site.xml文件
配置etc/hadoop/slaves,加入DataNode节点,即当前主机名,如图2-23所示。

图2-23 配置etc/hadoop/slaves
⑧在服务器上创建目录/home/hadoop/hadoop/tmp、/home/hadoop/hadoop/dfs/name、/home/hadoop/hadoop/dfs/data,并赋予读写权限。
至此,基于单台服务器的Hadoop伪集群安装部署完成,启动运行即可。
(2)集群部署。
分布式集群部署与单机Hadoop类似,流程上稍微复杂一些。我们以安装包括1个NameNode和3个DataNode的Hadoop集群为例。配置见表2-3。
表2-3 Hadoop集群配置

①在各个节点安装CentOS 6.5操作系统,安装Java、SSH等软件,配置允许SSH通过防火墙或者直接关闭各个主机的防火墙;添加名为“hadoop”的Linux用户;修改“/etc/sysconfig/network”中的hostname设置。
②配置各个主机的IP,并修改“/etc/hosts”文件,将每个节点的主机名写入到hosts文件中进行解析,如图2-24所示。

图2-24 修改“/etc/hosts”文件
③配置SSH无密码登录。首先在各个节点的hadoop用户下创建密钥,然后将4个节点的公钥文件id_rsa.pub的内容放到authorized_keys文件里,并设置文件权限。最后测试节点之间是否能够通过SSH互相连通,如图2-25所示。

图2-25 SSH无密码登录配置
④将Hadoop安装包解压到要安装的路径中。这里,我们将Hadoop安装在用户目录“/home/hadoop/”下面。
⑤配置环境变量。在所有节点的“/etc/profile”文件中配置Java及Hadoop相关的环境变量,并使之生效,如图2-26所示。

图2-26 profile文件的配置
⑥在NameNode节点中,修改Hadoop安装目录中的配置文件。
配置etc/hadoop/hadoop-env.sh文件,增加Java接口设置,如图2-27所示。

图2-27 配置etc/hadoop/hadoop-env.sh文件
配置etc/hadoop/core-site.xml,加入如图2-28所示的内容。

图2-28 配置etc/hadoop/core-site.xml
配置etc/hadoop/hdfs-site.xml,加入如图2-29所示的内容。

图2-29 配置etc/hadoop/hdfs-site.xml
配置etc/hadoop/slaves,加入DataNode节点,如图2-30所示。

图2-30 配置etc/hadoop/slaves
⑦创建Hadoop数据目录:/home/hadoop/hadoop/tmp、/home/hadoop/hadoop/dfs/name、/home/hadoop/hadoop/dfs/data,并赋予读写权限。
⑧将目录“/home/hadoop/Hadoop”整体复制到其他三个节点,如图2-31所示。

图2-31 复制目录“/home/hadoop/Hadoop”
至此,Hadoop集群安装完成。
主要区别在于:
●SSH无密码登录配置。需要在每一台Hadoop的节点上都配置SSH无密码登录,使节点之间能够相互访问。
●系统配置文件。在每台服务器上进行系统配置及网络主机名配置。
●Hadoop配置。在Hadoop安装包的etc/hadoop/slaves中加入所有数据节点。其他配置,如文件副本数量等,可按实际情况设置。
2.4.2 HDFS的配置
Hadoop与HDFS相关的配置文件主要是core-site.xml、hdfs-site.xml、mapred-site.xml等三个配置文件,默认情况下,这些配置文件都是空的。
1. core-site.xml的配置
core-site.xml是Hadoop的核心配置项,是全局配置,包括HDFS和MapReduce常用的I/O设置等。其中,涉及HDFS的主要配置选项见表2-4。
表2-4 core-site.xml的主要配置选项

续表

分布式集群部署模式时,核心配置文件core-site.xml的参考配置格式如下:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/tmp</value> </property> <property> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> </property> </configuration>
2. hdfs-site.xml配置
hdfs-site.xml是HDFS的局部配置文件,主要配置选项见表2-5。
表2-5 hdfs-site.xml的主要配置选项

续表

3. mapred-site.xml配置
mapred-site.xml用于配置MapReduce使用的框架,与HDFS的关联主要是文件和I/O操作。这里简单介绍一下mapred-site.xml的相关配置项,见表2-6。
表2-6 mapred-site.xml的相关配置项

2.4.3 启动HDFS
配置完成后,需要先在NameNode中格式化HDFS系统,然后再启动。
1. HDFS的格式化
如图2-32所示,我们使用“hdfs namenode -format”命令格式化Hadoop 2.6.0的HDFS系统。

图2-32 HDFS的格式化
2. HDFS的启动
通过执行脚本start-dfs.sh或start-all.sh启动Hadoop文件系统,如图2-33所示。

图2-33 启动Hadoop
3.验证
可以使用Java自带的小工具jps查看进程,如图2-34所示;也可以用“hdfs dfsadmin-report”命令查看Hadoop集群的状态,如图2-35所示。

图2-34 jps命令

图2-35 查看集群状态
打开浏览器,输入“http://localhost:50070”,页面显示正常内容,说明Hadoop安装成功并在运行中,如图2-36所示。

图2-36 Hadoop Web的状态