首页 > 大数据 > 数据分析 > 岂止于大,一文读懂大数据及其在推荐系统的应用
大数据是数据智能时代的“铁公基”,是一系列计算和存储的基础设施。推荐系统也是建立在大数据的基础之上的,大量的数据挖掘和模型训练都离不开大数据。
大数据这个名词起的很好,对于非技术人员来说也能get到大的含义:数据量大,算力强大。
但是这强大的能力是怎么来的?大数据生态体系架构是怎么分工的?
不具体做过的同学并不清楚。今天就继续站在产品经理的角度深入浅出地来讲述这些问题。其实不一定是产品经理,对大数据感兴趣的同学都可以看看。本文比较长,如果时间不够,建议先Mark下。
在大数据技术诞生之前,数据的存储和处理大半壁江山都是Oracle和MySql和等数据库软件的。这些传统数据库的文件系统是单机的,也就是说,数据只能在一台机器上跑。它们在处理成TB(1024GB)甚至上PB(1024TB)级别数据时就会特别吃力。
第一个解决了这个问题的公司是谷歌。谷歌解决这个问题的思路就是分布式。谷歌分别于2003-2004年发表了三篇重量级的论文,奠定了大数据的基础。
简单的说,谷歌通过论文公布了以下三个工具如何创造:
这个就是大数据技术的开始。从谷歌的这个原点开始,大数据经过多年发展,形成了今天的全貌。
可以用以下三个分类来去解构整个大数据生态:
大数据整个生态体系非常庞大,相关的产品不胜枚举,让人看着眼花缭乱,有种物种大爆发的感觉。但是也并非无迹可寻。 我们理解大数据生态,从这三个方面去理解就会轻松很多。本文也是严格按照这个方式来讲述。
鉴于大数据生态过于庞大复杂,为了使得文章更加浅显易懂,本文不对技术概念做过多的描述,而是直接到操作层面,以图示的方式讲解。因为要讲述的是数据系统,我这里建一张数据表USER,用这张数据表在各个系统中处理过程来给大家讲述大数据各个组件的工作原理和机制。
整个互联网技术生态圈中,谷歌是超级绩优生。每次发表论文,都会引起众多人员前来“抄作业”。Hadoop之父Doug Cutting和他的团队就是其中一个。他花了两年的业余时间,照着谷歌的论文实现了一个分布式数据系统,并用自己儿子的大象毛绒玩具的名字给这个系统命名为Hadoop。Hadoop的Logo也是个头大象。
后来到了2006年,Hadoop被引入Apache基金会,成为一个开源的顶级项目。随着Hadoop的不断发展,在Hadoop项目中,诞生了HBase,Hive,Pig,Zookeeper等子项目,并先后被Apache基金会将其独立升级成为顶级项目。
同时,Apache基金会也不断兼收并蓄其他大数据项目,基本把绝大多数优秀的大数据项目都收入麾下,大有天下武功出少林的味道。大数据各种开源组件中,Apache旗下的才是少林正宗。
闲话不多说,我们来讲Hadoop。
现在的Hadoop主要分三个部分:
这里先具象的解释下,什么是大数据的分布式长什么样?
我们在安装Hadoop的时候,要把同一个Hadoop的软件安装包,安装在三台以上不同的机器上。安装好后,我们就可以得到一个Hadoop 分布式集群。
如下图,我们将Hadoop的三个组件,安装在集群每一台机器上,这个集群有七台机器。每一台机器叫一个 节点。这七个节点中,要选出一个做老大,我们有什么事情先找这个老大,这个就是 主节点。因为主节点很重要,它要是挂了,整个集群就挂了。所以一般主节点配置两台,一台备份。其他五个节点叫做 从节点。在Hadoop中,主节点命名为Master,从节点为Slave。
下面将Hadoop的第一个组件HDFS。HDFS作为分布式的文件系统,它是以文本的方式来保存数据的,也就是说,数据一般会跟我们的TXT文件那样。一个文件会被按照设定,切分成不同的数据块,然后每个数据块会被复制成多份,然后分布式地存到不同的节点中。HDFS把集群节点分成两类:NameNode和DataNode。
下面以USER数据表为例,举例说明HDFS的运作过程。实际的系统中,因为NameNode负荷比较重,会设置一个SecondaryNameNode来协助NameNode的工作(注意是协助,而不是备份)。
上图中:
HDFS优点:数据容量大,是大数据最主要的数据存储方式。很多其他组件都是建立在HDFS的基础上,应用非常广泛。
HDFS的缺点:它是个文件系统,而不是数据库系统,不能像关系数据库系统那样建立索引等工具提升处理速度和定位到数据位置。因为数据记录的形式是一行一行的字符串,没办法定位,不支持对数据的直接修改。
MapReduce是专门负责分布式计算的,它是是一个组合词,可以分成两个部分:Map和Reduce。
简单的说,Map就是把要计算的数据分解成多个计算任务,而Reduce则是Map过程得到的结果进行汇总。假设现在我们要计算在USER表中,男女各有多少人。
MapReduce计算详细过程如下:
上图中:
通过这种方式,MapReduce获得了强大的运算能力。
MapReduce优点:计算能力强大,运算耗费成本低廉,在运算能力一般的机器上也能运行。
MapReduce缺点:它诞生的年代,内存还很贵,在计算的过程中,中间结果要不断存入磁盘中,以减少内存的压力,但是这样导致了MapReduce运算速度比较慢。另外就是代码不简洁,学习曲线比较陡,后面在HIVE部分会讲述。
YARN的全称是Yet Another Resource Negotiator,直译就是另一种资源协调者。
看名字就知道,他是Hadoop中其中一种资源调度器。它的最重要的组件是ResourceManager,通过这个组件,YARN可以为我们的MapReduce任务进行资源分配,分配的资源就是一个个的计算容器,每个计算的任务就在这个容器中跑。由于优秀,后来YARN进一步被发扬光大,成了Hadoop以外的很多大数据组件的资源调度框架。
在MapReduce的中,处理数据作业的程序是要通过JAVA来实现的,但是JAVA在写MapReduce的过程并不简洁。像我们前面提到的统计数据表中男女人数这个简单的操作,需要严格按照Input到Reducing这五步来实现,代码一般长达上百行。
但是统计这个数据结果,对于SQL来说,就是一句话的事:SELECT sex,COUNT(1) FROM USER GROUP BY sex。
为了不再写又长又烦的JAVA,Hive应运而生。Hive组件就主要做的事情是,将SQL代码转译成MapReduce,然后放入YARN构建的容器里面跑出结果。
这样,我们要统计USER表中的男女人数的时候,就不用写JAVA实现也能调动MapReduce了,这里我们画图说明一下:
另外,Hive除了转译SQL的功能外,它也可以用来建数据库和数据表。一个数据库拥有的能力它都有,而且还可以处理大量的数据,所以一般还会将Hive用来建数据仓库。数据仓库的主要功能,就是把历史数据都存进去,可以反复地统计计算使用。数据仓库最主要的特征就是数据量特别大。
由于它是构建于HADOOP的基础上,Hive可计算的容量大,运算能力强,但是速度不快。Hive也不能直接修改数据。对Hive进行数据的修改操作非常费时。
最后,介绍一下Hive和MySql的区别:
Spark是分布式计算引擎,是大数据生态体系中的一个速度快,功能强大的一个组件。Spark整个框架非常庞大,提供能非常丰富的离线计算和流式计算能力。
本小节先介绍Spark的离线计算功能。
得益于摩尔定律下的硬件基础设施的升级,内存变得越来越便宜,与MapReduce主要把中间结果不断写入磁盘不同,Spark主要把数据放在内存中计算。这样Spark在速度上比起MapReduce有上千倍的提升。
当内存不足的时候,Spark也会需要将中间结果存入磁盘。但是在这种情况下,Spark在速度上比起MapReduce也有上百倍的提升。因为Spark提供了RDD,DataFrame,DataSet这样的数据表工具,并为这些数据表提供了一系列高效计算的算子,有效提升了速度。多个算子叠加就成了一个DAG(Directed Acyclic Graph),所以Spark也被成为DAG计算引擎。
下面介绍Spark的计算流程。
因为RDD,DataFrame,DataSet都是类似关系数据库的数据表,流程机制都差不多,这里选用DataFrame来解释。当Spark处理USER表的数据时,会经过以下过程:
上图中:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70015517/viewspace-2877225/ ,如需转载,请注明出处,否则将追究法律责任。