![大数据:从基础理论到最佳实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/123/26944123/b_26944123.jpg)
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所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0045_0001.jpg?sign=1739280021-jOUKZDhWRRxivuS7c2CcYIFq5js6TfCi-0-0dc36fab7a94b08b40573734fa7a445f)
图2-14 安装CentOS操作系统
②检查Java安装情况,如图2-15所示。如未安装,可用rpm包或者yum等方式安装Java。这里,我们使用Java 1.7版本。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0046_0001.jpg?sign=1739280021-YmGKotFFQkKIrxtpnPxehXmGTqnhrugF-0-b4d173cec9ee26152f6e0807578967a0)
图2-15 Java安装包
③修改hosts文件,设置主机名。在hosts文件最后,加入一行主机名与IP地址,如图2-16所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0046_0002.jpg?sign=1739280021-i14gmwiVBQaFI8xtYayD1sLpb9Kl8poF-0-620b3a8c0564f1c148ee3ca09770e8dc)
图2-16 hosts文件
④使用useradd命令创建“hadoop”用户,登录并配置SSH无密码登录,如图2-17所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0046_0003.jpg?sign=1739280021-N0COQiVtU1ljtrk6YzFD0VzwLXKkHIcI-0-22ac9c03e5afd282c4610cf4c2eb24df)
图2-17 配置SSH
进入.ssh目录,将id_rsa.pub复制,并且命名为“authorized_keys”,然后设置文件权限,如图2-18所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0046_0004.jpg?sign=1739280021-d6K7QDaFWdiWqQJj0ABfwN9uv4aybam6-0-9fb6a41e911535bf0f7b420afacea03d)
图2-18 设置文件权限
⑤将Hadoop安装包解压到要安装的路径中。这里,将Hadoop安装在/home/hadoop/用户目录下。
⑥配置环境变量。在/etc/profile文件中配置Java及Hadoop相关的环境变量,并使之生效。如图2-19所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0047_0001.jpg?sign=1739280021-Hpfgfww94IJAg3RXZYHNOSBVwlF1KaF3-0-113157d8d8a4787272075252fef568ea)
图2-19 配置环境变量
⑦配置Hadoop安装文件中的环境变量。
配置etc/hadoop/hadoop-env.sh文件,如图2-20所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0047_0002.jpg?sign=1739280021-SxrhEGabjgS0gK2s624IxANW6BkqVeUf-0-080208a8ae23a8efbe5997ba7773dd48)
图2-20 etc/hadoop/hadoop-env.sh文件
配置etc/hadoop/core-site.xml文件,加入如图2-21所示的内容。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0047_0003.jpg?sign=1739280021-Cd6rVcNmWgIUSr7pLTDLObCoJQSdVNuO-0-7e656bae38b7c4d777e0a01bd0e25e66)
图2-21 配置etc/hadoop/core-site.xml文件
配置etc/hadoop/hdfs-site.xml文件,加入如图2-22所示的内容。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0047_0004.jpg?sign=1739280021-Knok0jIpcwSqdSFgl0waGxPRkjKKsc7m-0-b50804297afa1843131665defeb210c8)
图2-22 配置etc/hadoop/hdfs-site.xml文件
配置etc/hadoop/slaves,加入DataNode节点,即当前主机名,如图2-23所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0048_0001.jpg?sign=1739280021-nbOo8fNlLnds001engQiIrhGHYWDw1QD-0-ac4c68f29e8dc4267a3f7188efbde6cd)
图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集群配置
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0048_0002.jpg?sign=1739280021-vCI39224J8m8RwSR0u5fXc47Et9nXvfr-0-370ea3148661f41f403b04642028238c)
①在各个节点安装CentOS 6.5操作系统,安装Java、SSH等软件,配置允许SSH通过防火墙或者直接关闭各个主机的防火墙;添加名为“hadoop”的Linux用户;修改“/etc/sysconfig/network”中的hostname设置。
②配置各个主机的IP,并修改“/etc/hosts”文件,将每个节点的主机名写入到hosts文件中进行解析,如图2-24所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0048_0003.jpg?sign=1739280021-4hoc5x8WL9W0yncDXbtiGMQaoByY5DM1-0-0b203c40533adcda982c97a394e22298)
图2-24 修改“/etc/hosts”文件
③配置SSH无密码登录。首先在各个节点的hadoop用户下创建密钥,然后将4个节点的公钥文件id_rsa.pub的内容放到authorized_keys文件里,并设置文件权限。最后测试节点之间是否能够通过SSH互相连通,如图2-25所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0049_0001.jpg?sign=1739280021-qY5Vdsvy7x3LbCEIUOVj9SOTU1IXmmVI-0-a0b56351c37ec0a59facbbf3bf6ab527)
图2-25 SSH无密码登录配置
④将Hadoop安装包解压到要安装的路径中。这里,我们将Hadoop安装在用户目录“/home/hadoop/”下面。
⑤配置环境变量。在所有节点的“/etc/profile”文件中配置Java及Hadoop相关的环境变量,并使之生效,如图2-26所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0049_0002.jpg?sign=1739280021-KMMglr5quEaK2p135WcxQByJMCX4dKBP-0-f62ae7853d5030316a361d71f578f08b)
图2-26 profile文件的配置
⑥在NameNode节点中,修改Hadoop安装目录中的配置文件。
配置etc/hadoop/hadoop-env.sh文件,增加Java接口设置,如图2-27所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0049_0003.jpg?sign=1739280021-NB6F7dhBHb1uEIfpDgkHQWz3ilIXwz6t-0-982bb6816ba7a5bbee7b54977727ecd8)
图2-27 配置etc/hadoop/hadoop-env.sh文件
配置etc/hadoop/core-site.xml,加入如图2-28所示的内容。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0049_0004.jpg?sign=1739280021-iqD1q2Wug8c1qPTaOXdrMQPFNjH9f4Ji-0-78e378a0fa331613426c35590672a04a)
图2-28 配置etc/hadoop/core-site.xml
配置etc/hadoop/hdfs-site.xml,加入如图2-29所示的内容。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0050_0001.jpg?sign=1739280021-GqB5EkzZ0A5axXTfXOP4i6yoyLMpvLiT-0-6e869f31cf665e2cf36f6b1ee6f9e630)
图2-29 配置etc/hadoop/hdfs-site.xml
配置etc/hadoop/slaves,加入DataNode节点,如图2-30所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0050_0002.jpg?sign=1739280021-Tn9EuBVK8uk1iIkFApYOA4YbrD6pdo01-0-a5281aa3263240a44779c1a036ef573b)
图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所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0050_0003.jpg?sign=1739280021-cXjkA94VDQwG9dzVM6ADnYTz1XrwcJcv-0-cc27451b348ed001f04aa75721216f1d)
图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的主要配置选项
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0051_0001.jpg?sign=1739280021-hCNKeF7Uip5ns9Y3GJVmCLk8uQm4fTFk-0-7b9478520df6213de5f9509f47fe224e)
续表
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0052_0001.jpg?sign=1739280021-KPZvNycWB4n9Cgl1H3cn790UzI9XUwjO-0-094c96aa645f0ecf9d5212fdcd0398e9)
分布式集群部署模式时,核心配置文件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的主要配置选项
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0053_0001.jpg?sign=1739280021-ZqtZAszYT96bLyo7UmQS11MTDkeLSPVX-0-b8647956b633919a43852cfab67ceb3c)
续表
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0054_0001.jpg?sign=1739280021-FHya3MFazj62AF6zi6wkxR91b1ufcqii-0-a62884d0837bb8fc6a20e5d43dabe388)
3. mapred-site.xml配置
mapred-site.xml用于配置MapReduce使用的框架,与HDFS的关联主要是文件和I/O操作。这里简单介绍一下mapred-site.xml的相关配置项,见表2-6。
表2-6 mapred-site.xml的相关配置项
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0054_0002.jpg?sign=1739280021-uTuFCoX9lYz1mKaNs3KpAA0JkIz2gqmc-0-b1cdec38789aaf33bb30363572101636)
2.4.3 启动HDFS
配置完成后,需要先在NameNode中格式化HDFS系统,然后再启动。
1. HDFS的格式化
如图2-32所示,我们使用“hdfs namenode -format”命令格式化Hadoop 2.6.0的HDFS系统。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0055_0001.jpg?sign=1739280021-fkZznnaO1gmCEM04vapRUnBtLm0eVWPu-0-45810d81e023bb9d8807e9897b8cb051)
图2-32 HDFS的格式化
2. HDFS的启动
通过执行脚本start-dfs.sh或start-all.sh启动Hadoop文件系统,如图2-33所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0055_0002.jpg?sign=1739280021-GsV4GclL9eGIjcqAgzFCEeNJgYG7sgTh-0-f56540a67aabf2f91f61eda157213d1a)
图2-33 启动Hadoop
3.验证
可以使用Java自带的小工具jps查看进程,如图2-34所示;也可以用“hdfs dfsadmin-report”命令查看Hadoop集群的状态,如图2-35所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0056_0001.jpg?sign=1739280021-xs8hk7ZF5o7St5aY5yQGnBLdcdRHi3NH-0-e3e887677f010fda36fba30bd4381561)
图2-34 jps命令
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0056_0002.jpg?sign=1739280021-RZ9IBBCord8dVJDaGHRvEmKea8SMeRpb-0-2521378b606495486983ea1406fe5cb1)
图2-35 查看集群状态
打开浏览器,输入“http://localhost:50070”,页面显示正常内容,说明Hadoop安装成功并在运行中,如图2-36所示。
![](https://epubservercos.yuewen.com/1068C1/15367255604226906/epubprivate/OEBPS/Images/figure_0056_0003.jpg?sign=1739280021-bEfxJqB26HSTcuMHZ8xHrXgpWJpoGK9r-0-a3c6f26afc0be8d72072148900994853)
图2-36 Hadoop Web的状态