Spark大数据编程实用教程
上QQ阅读APP看书,第一时间看更新

2.2 构建Spark大数据运行环境

本节将构建一个最简的Spark大数据运行环境,它由最简的HDFS、Yarn和Spark三个部分组成。其中 HDFS 用来存储海量数据,Yarn 是集群管理器,Spark 包含一个集群管理器和Spark程序的开发库和运行库。

每个系统都是最简配置,这样便于大家以最快的时间上手,同时每个系统又都是全分布式的,因此和实际生产环境完全一致。

Spark大数据运行环境的部署图如图2-2所示,共分6层,其中1~5层是现成的,第6层是本节需要完成的,所有的工作都在 scala_dev 这一个虚拟机节点上完成,后续可以根据需要扩展新的虚拟机节点。Spark 大数据运行环境将按照 HDFS、Yarn、Spark 的顺序依次来构建。

图2-2 Spark大数据运行环境部署图

2.2.1 构建HDFS

1.HDFS是什么

HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),是一个分布式文件系统,用来存储海量的大数据文件。在 Spark 进行大数据处理时,它的数据来源、处理结果等往往都存储在HDFS之上,因此,在构建Spark集群之前,先要构建HDFS。

文件系统用来实现文件在计算机中的存储和管理,Windows下常见的文件系统是NTFS,Linux下常见的文件系统有 Ext3、Ext4、XFS 等。在使用硬盘前,有一个格式化的步骤,这个步骤就是在硬盘上建立文件系统;

文件系统向上面对的是文件,就是在计算机中看到的文件夹和文件,向下管理的是具体的存储对象:如果存储对象位于本地,例如硬盘,则称此文件系统是本地文件系统,像 NTFS、Ext3 等都是本地文件系统;如果存储对象不在本地,而是位于网络之中,则称此文件系统是分布式文件系统,像HDFS、Lustre、CEPH都是典型的分布式文件系统。

HDFS 利用软件和网络将多台计算机的存储空间聚合起来,构成一个统一而又巨大的存储空间,并且通过软件来确保文件的可靠性。HDFS单个集群的节点规模可达千个以上,存储数据量为PB级,包括亚马逊、阿里、腾讯等知名厂商都在使用,性能和可靠性都有保证。

2.HDFS的系统架构

Hadoop版本从1.0到2.0到现在3.0,中间经历了多次迭代,HDFS作为Hadoop中的一个重要组件,其系统架构也在不断进化,但总的来说并没有脱离最初的主从式架构。HDFS的架构图具体如图2-3所示。

图2-3 HDFS架构图

HDFS架构中有三种角色:NameNode、DataNode和Client。

●DataNode。DataNode 是存储节点,它负责存储 HDFS 文件的真实内容,假如有一个input01.dat文件,HDFS会将它按照固定大小分割成若干Block,每个Block会复制若干份(默认是 3 份),存储为文件,每个文件就称为一个副本(Replica),同一个Block的副本会存储在不同的 DataNode 上。如图 2-3 所示,DataNode 中的小方块表示副本,其中的编号为Block编号,编号相同表示是同一个Block的副本;

●NameNode。NameNode 是管理节点,它负责管理元数据和 DataNode。元数据又分为名字空间(NameSpace)和文件存储信息两大类,例如,input01.dat 的路径信息/usr/input01.dat、文件名、创建时间、拥有者、权限等,都属于名字空间,简而言之,在浏览文件系统时,看到的文件、目录有关的信息都是名字空间。文件存储信息是指副本的存储信息位于哪些DataNode上,通过该信息可以在具体的DataNode上找到对应的内容;

●Client。Client 用来访问 HDFS,它对应命令 hdfs,可以上传文件到 HDFS,也可以在HDFS上创建、删除目录、下载文件等,同时还可以设置属性、管理 HDFS 等。总之,用户同HDFS的交互都通过Client来完成。

HDFS最新架构与图2-3有以下3点不同。

●NameNode被拆分成多个NameNode对外提供服务,每个NameNode管理一个互不相干的名字空间(目录),这种机制叫作Federation(联邦);

●NameNode支持热备,从而实现NameNode的高可用;

● 除副本容错外,增加了基于编码的容错方式,在相同可靠性的情况下,可大幅节省存储空间。

3.HDFS的部署图

最简 HDFS 的部署图如图 2-4 所示,自底向上分为 6 层,真正需要构建的是第 6 层的HDFS,包括1个NameNode、1个DataNode01和1个Client01。因为HDFS中3种角色各只有一个,因此说是最简单的HDFS。

图2-4 HDFS部署图

如图 2-4 所示,NameNode、DataNode01 和 Client01 都在同一个虚拟机 scala_dev 之上。这样做的好处是:不需要跨虚拟机,实现起来相对简单;同时又实现了HDFS的分布式构建,后续增加新的虚拟机和DataNode也非常方便。

4.HDFS的构建

本节“HDFS 的构建”属于实践内容,因为后续章节都会用到 HDFS,所以本实践必须完成。请参考本书配套资料《Spark 大数据编程实践教程》中的“实践 1:构建分布式HDFS”完成本节任务。

2.2.2 构建Yarn

1.Yarn简介

Yarn是Hadoop的集群管理器,Spark程序或MapReduce程序都可以运行在Yarn上,后续会介绍如何将Spark程序提交到Yarn上运行。

生产环境中,一个集群往往不会只跑 Spark 一种应用,还会有其他的应用,如MapReduce程序等,这些应用都可以通过 Yarn 实现统一管理。本节将介绍如何构建 Yarn,以及如何在Yarn上运行MapReduce程序。

2.Yarn架构和部署图

Yarn 有两种角色:ResourceManager(资源管理器)和 NodeManager(节点管理器)。ResourceManager只有1个,NodeManager 可以有多个。ResourceManager 管理NodeManager,NodeManager在每个节点上都要安装,负责管理它所在节点的硬件资源(CPU和内存)。

本书的Yarn部署图如图2-5所示,共分为6层,其中第1~5层是现成的,第6层是本节需要构建的,包括 ResourceManager、NodeManager 两种角色,它们都部署在虚拟机scala_dev上,后续可根据需要扩展NodeManager节点。

Yarn 和 HDFS 一样,都包含在 Hadoop 软件包中,因此,构建 Yarn 不需要下载新的Package,只需要在Hadoop中配置Yarn相关的文件即可。

图2-5 Yarn部署图

3.Yarn的构建

本节“Yarn 的构建”属于实践内容,因为后续章节会用到 Yarn,所以本实践必须完成。请参考本书配套资料《Spark大数据编程实践教程》中的“实践2:构建Yarn”完成本节任务。

2.2.3 构建Spark集群

本节“构建 Spark 集群”属于实践内容,因为后续章节会用到 Spark 集群,所以本实践必须完成。请参考本书配套资料《Spark 大数据编程实践教程》中的“实践 3:构建Spark集群”完成本节任务。