Spark入门基础教程

  目前按照大数据处理类型来分大致可以分为:批量数据处理、交互式数据查询、实时数据流处理,这三种数据处理方式对应的业务场景也都不一样;
  关注大数据处理的应该都知道Hadoop,而Hadoop的核心为HDFSMapReduce,HDFS分布式文件系统在Hadop中是用来存储数据的;MapReduce为Hadoop处理数据的核心,接触过函数式编程的都知道函数式语言中也存在着Map、Reduce函数其实这两者的思想是一致的;也正是因为Hadoop数据处理核心为MapReduce奠定了它注定不是适用场景广泛的大数据框架;
  可以这么说Hadoop适用于Map、Reduce存在的任何场景,具体场景比如:WordCount、排序、PageRank、用户行为分析、数据统计等,而这些场景都算是批量数据处理,而Hadoop并不适用于交互式数据查询、实时数据流处理;
  这时候就出现了各种数据处理模型下的专用框架如:Storm、Impala、GraphLab等;
  1、Storm:针对实时数据流处理的分布式框架;
  2、Impala:适用于交互式大数据查询的分布式框架;
  3、GraphLab:基于图模型的机器学习框架;

MapReduce简单模型


            1、MapReduce简单模型
  
  这时候如果一个团队或一个公司中同时都有设计到大数据批量处理、交互式查询、实时数据流处理这三个场景;这时候就会有一些问题:
  1、学习成本很高,每个框架都是不同的实现语言、不同的团队开发的;
  2、各个场景组合起来代价必然会很大;
  3、各个框架中共享的中间数据共享与移动成本高;
  

Spark

  就在这时候UC Berkeley AMP推出了全新的大数据处理框架:Spark提供了全面、统一适用与不同场景的大数据处理需求(批量数据处理、交互式数据查询、实时数据流处理、机器学习);Spark不仅性能远胜于Hadoop而却还兼容Hadoop生态系统,Spark可以运行在Hadoop HDFS之上提供争强 功能,可以说Spark替代了Hadoop MapReduce,但Spark依然兼容Hadoop中的YARN与Apache Mesos组件,现有Hadoop用户可以很容易就迁移到Spark;
  Spark提出了RDD(Resilient Distributed Datasets)这么一个全新的概念,RDD弹性分布式数据集是并行、容错的分布式数据结构;RDD可以持久化到硬盘或内存当中,为一个分区的数据集,分区的多少决定了并行计算的粒度;并且提供了一系列的操作RDD中的数据:
  1、创建操作(Creation Operation):RDD由SparkContext通过内存数据或外部文件系统创建;
  2、转换操作(Transformation Operation):将RDD通过转换操作变为另一个RDD,Spark提供了map、flatMap、filter等一系列的转换操作;
  3、控制操作(Control Operation):将RDD持久化到内存或硬盘当中,如cache将filterRDD缓存到内存;
  4、行动操作:(Action Operation):Spark采用了惰性计算,对于任何行动操作都会产生Spark Job运行产生最终结果;提供了join、groupBy、count等操作,Spark中存在两种操作产生的结果为Scala集合或者标量与RDD保存到文件或数据库;

Spark结构


             1、Spark结构图

  Spark RDD:Spark RDD提供了一系列的操作接口,为不变的数据存储结构并存储与内存中使用DAG进行任务规划使更好的处理MapReduce类似的批处理;
  Shark/Spark SQL:分布式SQL引擎,兼容Hive性能远比Hive高很多;
  Spark Streaming:将数据流分解为一系列批处理作业使用Spark调度框架更好的支持数据流操作,支持的数据输入源有:Kafka、Flume等;
  GraphX:兼容Pregel、GraphLab接口为基于Spark的图计算框架;
  MLlib:为Spark的机器学习算法库,支持常用的算法有:分类算法、推荐算法、聚类算法等等;

  性能卓越、支持多种大数据处理模型、支持多种编程语言接口:Java、Scala、Python,许多大公司如IBM等大力支持推广Spark的发展;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fa44ab7c0a5a388460e9b645f91aa95b.html