赞
踩
Scala是一门现代的多范式编程语言 ,运行于IAVA平台(JVM,JAVA虚拟机)并兼容现有的JAVA程序。
① Scala具备强大的并发性,支持函数式编程,可以更好地支持分布式系统。
② Scala语法简洁,能提供优雅的API。
③ Scala兼容Java,运行速度快,且能融合到Hadoop生态圈中。
4. Scala的特性
1.面向对象
2.函数式编程
3.静态类型
4.可拓展
Spark 是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。
第一阶段:Spark最初由美国加州伯克利大学( UC Berkelcy)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序
第二阶段:2013年Spark加入Apache孵化器项日后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一( Hadoop磁盘MR离线式、Spark基于内存实时数据分析框架、Storm数据流分析框架 )
第三阶段:
①快速
一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10多倍。
②易用性
Spark支持使用Scala、Python、Java及R语言快速编写应用。同时Spark提供超过80个高阶算子,使得编写并行应用程序变得容易,并且可以在Scala、Python或R的交互模式下使用Spark。
③通用性
Spark可以与SQL、Streaming及复杂的分析良好结合。Spark还有一系列的高级工具,包括Spark SQL、MLlib(机器学习库)、GraphX(图计算)和Spark Streaming(流计算),并且支持在一个应用中同时使用这些组件。
④随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在EC2(亚马逊弹性计算云)、Hadoop YARN或者Apache Mesos上运行Spark。并且可以从HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系统读取数据。
⑤代码简洁
尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。
① 在数据科学应用中 ,数据工程师可以利用Spark进行数据分析与建模
② 在数据处理应用中,大数据工程师将Spark技术应用于广告、报表、推荐系统等业务中
③ Spark拥有完整而强大的技术栈,如今已吸引了国内外各大公司的研发与使用,淘宝技术团队使用Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等问题,应用于商品推荐、社区发现等功能。
在具体讲解Spark运行架构之前,需要先了解以下7个重要的概念。
① RDD:是弹性分布式数据集的英文缩写,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
② DAG:是有向无环图的英文缩写,反映RDD之间的依赖关系。
③ Executor:是运行在工作节点上的一个进程,负责运行任务,并为应用程序存储数据。
④ 应用:用户编写的Spark应用程序。
⑤ 任务:运行在Executor上的工作单元。
⑥ 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作。
⑦ 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”
① 每个application都有自己专属的Executor进程,并且该进程在application运行期间一直驻留,executor进程以多线程的方式运行Task
② Spark运行过程与资源管理无关,子要能够获取Executor进程并保持通信即可
③ Task采用了数据本地性和推测执行等优化机制,实现“计算向数据靠拢”
RDD(Resilient Distributed Datasets弹性分布式数据集),可以简单的把RDD理解成一个提供了许多操作接口的数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或磁盘中)。
优点:惰性调用,管道化,避免同步等待,不需要保存中间结果,每次操变得简单
① 高效的容错性
现有容错机制:数据复制或者记录日志RDD具有天生的容错性:血缘关系,重新计算丢失分区,无需回滚系统,重算过程在不同节点之间并行,只记录粗粒度的操作
② 中间结果持久化到内存,数据在内存中的多个RDD操作直接按进行传递,避免了不必要的读写磁盘开销
③ 存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化
父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖,否则就是宽依赖。
创建RDD对象;
SparkContext负责计算RDD之间的依赖关系,构建DAG;
DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。