大数据这个概念本身就太大而且太宽,如果一定要严格定义是非常困难的一件事,不过Hadoop生态圈或者由其延伸的泛生态系统,基本上都是为了处理大量数据诞生的——一般而言,这种数据依赖单机很难完成。
这个圈子里的工具,就像是我们厨房里的各种厨具——各自都有不同的用处,但也有一部分功能重合,比如盆和豌都可以用来喝汤,削皮刀和菜刀都可以用来去皮。
但是,盆用来喝汤未免奇怪,削皮刀切菜也是万万不能。即使你强行要创造一些奇异的组合,即使最终完成工作,却不一定是最快、最好的选择。
大数据,如何存储下来?
对传统的单机文件系统来说,横跨不同机器几乎是不可能完成的任务。而通过HDFS(Hadoop Distributed FileSystem),你可以通过横跨上千甚至上万台机器来完成大量数据得存储,同时这些数据全部都能归属在同一个文件系统之下。你可以通过引用一个文件路径获取存储在许多台机器上的数据文件。作为一个使用者,你完全不用去计较文件具体存储的位置,这个文件系统会为你搞定一切。
我们当然不是为了搜集数据而进行存储,我们还要用数据做一些事情。虽然我们通过HDFS存下了横跨上千台机器的数据,我们依然面临一个问题——这些数据过于庞大,如果只交给一台机器处理,我们可能得等上几周甚至更长。这些可能以T甚至于P来计量单位的数据,只靠一台机器真的能跑到地老天荒。
对于很多公司,这是无法接受的事情——我们都知道有各种热度排行,加入一台机器处理这个数据、计算热度、进行发布,可能一周之后出来结果,但大家早已经不关心了。
所以使用大量机器进行处理是必然的选择。在大量机器处理过程中,必须处理一些事务:任务分配、紧急情况处理、信息互通等等,这时候必须引入MapReduce / Tez / Spark 。这其中,前者可以成为计算引擎的第一代产品,后两者则是经过优化后的下一代。MapReduce采用了非常简单的计算模型设计,可以说只用了两个计算的处理过程,但是这个工具已经足够应付大部分的大数据工作了。
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集,具有以下特点。
Spark简介
1.运行速度快:Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
2.易用性好:Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。
3.通用性强:Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理。
4.随处运行:Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算