在大数据时代,最合适的框架居然是Hadoop!(文末附赠学习资料)
三种框架基本解析
Spark框架:
Spark是一个针对超大数据集合的低延迟的集群分式计算系统,比比MapReducer快40倍左右。
Spark兼容Hadoop的APi,能够读写Hadoop的HDFS HBASE 顺序文件等。
Spark的架构图:
Spark的编程模型:
弹性的分布数据集(RDD) :分布式对象集合能够跨集群在内存中保存。多个并行操作,失败自动恢复。
使用内存集群计算, 内存访问要比磁盘快得多。有Scala Java Python API,能够从Scala和Python访问。
下面是一个简单的对日志log计数的代码:
/*** SimpleJob.scala ***/
import spark.SparkContext
import SparkContext._
object SimpleJob {
def main(args: Array[String]) {
val logFile = "/var/log/syslog" // Should be some file on your system
val sc = new SparkContext("local", "Simple Job", "$YOUR_SPARK_HOME",
List("target/scala-2.9.3/simple-project_2.9.3-1.0.jar"))
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
Storm框架:
Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令程序不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Storm的部署管理非常简单,而且,在同类的流式计算工具,Storm的性能也是非常出众的。
Storm主要分为两种组件Nimbus和supervisor.这两种组件都是快速失败的,没有状态。任务状态和心跳信息等都保存在Zookeeper上的,提交的代码资源都在本地机器的硬盘上。
Storm的数据交互图:
从上图可以看出两个模块Nimbus和supervisor之间没有直接交互。状态都是保存在zookeeper上。Worker之间通过zeromq传送数据。
Storm现在已经发展到0.8.2版本了,它比较广泛应用于实时分析,在线机器学习,持续计算、分布式远程调用等领域。
Hadoop框架:
Hadoop框架是由分布式文件系统和分布式计算框架MapReduce组成的。其中,分布式文件系统主要用于大规模数据的分布式存储,而MapReduce 则构建在分布式文件系统之上,对存储在分布式文件系统中的数据进行分布式计算。
Hadoop体系架构:
Hadoop 提供一个分布式文件系统(HDFS)及分布式数据库(HBase)用来将数据存储或部署到各个计算节点上。所以,你可以大致认 为:Hadoop=HDFS(文件系统,数据存储技术相关)+HBase(数据库)+MapReduce(数据处理)。
借助Hadoop 框架及云计算核心技术MapReduce 来实现数据的计算和存储,并且将HDFS 分布式文件系统和HBase 分布式数据库很好的融入到云计算框架中,从而实现云计算的分布式、并行计算和存储,并且得以实现很好的处理大规模数据的能力。
从上图我们可以发现:
1、 Hadoop HDFS是Google GFS存储系统的开源实现,主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBase、 HyperTable)的底层分布式文件系统。HDFS采用master/slave架构。一个HDFS集群是有由一个Namenode和一定数目的 Datanode组成。Namenode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问。Datanode在集群中一般是 一个节点一个,负责管理节点上它们附带的存储。在内部,一个文件其实分成一个或多个block,这些block存储在Datanode集合里。如下图所示 (HDFS体系结构图):
2、 Hadoop MapReduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上TB级别的数据集。
3.一个MapReduce作业(job)通常会把输入的数据集切分为若干独立的数据块,由 Map任务(task)以完全并行的方式处理它们。框架会对Map的输出先进行排序,然后把结果输入给Reduce任务。通常作业的输入和输出都会被存储 在文件系统中。整个框架负责任务的调度和监控,以及重新执行已经失败的任务。如下图所示(Hadoop MapReduce处理流程图):
Hive是基于Hadoop的一个数据仓库工具,处理能力强而且成本低廉。
三种架构哪种更适合大数据时代呢?
什么是大数据
大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。
大数据技术管理
大数据管理的技术也层出不穷。在众多技术中,有6种数据管理技术普遍被关注,即分布式存储与计算、内存数据库技术、列式数据库技术、云数据库、非关系型的数据库、移动数据库技术。其中分布式存储与计算受关注度最高。
大数据的使用
大数据有三层内涵:一是数据量巨大、来源多样和类型多样的数据集;二是新型的数据处理和分析技术;三是运用数据分析形成价值。大数据对科学研究、经济建设、社会发展和文化生活等各个领域正在产生革命性的影响。大数据应用的关键,也是其必要条件,就在于"IT"与"经营"的融合,当然,这里的经营的内涵可以非常广泛,小至一个零售门店的经营,大至一个城市的经营。
总结:
基于上述大数据的特征,通过传统IT技术存储和处理大数据成本高昂。一个企业要大力发展大数据应用首先需要解决两个问题:一是低成本、快速地对海量、多类别的数据进行抽取和存储;二是使用新的技术对数据进行分析和挖掘,为企业创造价值。因此,大数据的存储和处理与云计算技术密不可分,在当前的技术条件下,基于廉价硬件的分布式系统(如Hadoop等)被认为是最适合处理大数据的技术平台。
而Hadoop本来就是一个分布式的基础架构,能够让用户方便高效地利用运算资源和处理海量数据,目前已在很多大型互联网企业得到了广泛应用,如亚马逊、Facebook和Yahoo等。