如何高效的学习Apache Spark?
网友解答: Spark定义a.是一个通用的大规模数据快速处理引擎。b.Spark就是一个大数据分布式处理框架。3.Spark在性能和方案的统一性都具有显著的优势。Spark使用Spark
Spark定义
a.是一个通用的大规模数据快速处理引擎。
b.Spark就是一个大数据分布式处理框架。
3.Spark在性能和方案的统一性都具有显著的优势。
Spark使用SparkSQL、Spark Streaming、MLlib、Graph几乎完美地解决了大数据中的Batch Processing、Stream Processing、Ad-hocQuery(即席查询)等三大核心问题。如何学习Spark配置spark环境:先安装linux,java,Scala,spark等软件,配置环境变量,搭建集群。建议你先熟悉一下linux系统。学习scala语言 ,函数式编程,这些有点难度。我是学java过来的,感觉很不适应,语法感觉很怪,需要冷静下来好好学习,trait ,object 伴生对象,柯里化等概念还是需要好好理解的,他也有很多好处,比如apply()方法,很方便的新建一个对象那个,用得多了,就觉得很好用,我现在就觉得很好用,学过java好理解一些,本质一样,表达方式不同而已。建议您学习一下java。spark学习,最好学习spark的方式就是看官方文档,跟着官方文档过一遍手,基本就理解的差不多啦,接下来用idea集成编程完成的程序,调试测试等,基本就可以上手啦!接下深入理解就看源码,深入Spark内核,通过源码掌握Spark的任务提交过程,掌握Spark集群的任务调度,尤其要精通DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节。基于Spark上的核心框架的使用,学习SparkSQL(关系型操作)、Spark Streaming(实时处理)、MLlib(机器学习)、GraphX(图处理)这些。
我们使用spark一般都使用Yarn框架,所以我觉得还需要学些Hadoop学习。有hdfs和mr(现在是YARN)组成,有兴趣可以看https://www.toutiao.com/i6506428976062267907/这篇文章
场景
Spark是一个分布式内存型计算框架,吸收MR的优点,以RDD数据来表示模型,提供多种算子,例如map|filter|flatMap|sample|groupByKey|reduceByKey|union|join等,并将中间数据放到内存中,使得迭代运算效率更高,更适合于实时计算|交互式计算或者要求计算量大、效率要求高等场景。与Yarn的结合,使得Spark可以与MR运行与同一个集群中,共享存储资源与计算资源,不断完善的SparkSQL,可以与Hive兼容,大大增强了Spark的应用范围及优越性。
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
总的来说Spark的适用面比较广泛且比较通用。
Spark的特点a.快速基于内存计算速度是MR的100倍,基于磁盘计算的速度是MR的10倍
快的原因是:Spark有一个DAG(有向无环图)执行引擎,支持循环数据流和内存计算。
b.易用
提供多语言的API,能快速实现应用,相比MR有简洁的代码,安装部署简单
c.通用
提供一个强大的技术栈,包括查询语言SparkSQL、实时流处理工具Spark Streaming、机器学习工具MLlib、图计算工具GraphX, Spark的目的在于构建一个结构上一体化功能上多元化的高效数据流水线技术栈。
d.集成Hadoop
Spark可以运行在YARN上,可以读取Hadoop的任何数据
下面是Spark生态系统Spark Core:它包含Spark的基本功能(任务调度、内存管理、故障恢复以及存储系统的交互),包含RDD|Stage|DAG|它的核心思想就是将数据缓存在内存中,并用Lineage机制容错。
a.RDD:
Resilient Distributed DataSets,是分布式只读的且已分区的集合对象。
这些集合是弹性的,如果数据集的一部分丢失,则可以对它们进行重建。
具有自动容错|位置感知调度|可伸缩性的特点。
对于记录数据的更新,RDD也只支持粗粒度的转换(记录如何从其他RDD转换而来即Lineage,以便恢复丢失的分区)
数据集容错的两种方式:数据检查点(成本高,服务器之间的传输的问题)和记录数据的更新。
Spark大数据处理框架1.Spark速度快的原因
a.统一的RDD抽象和操作:Spark基于RDD抽象,使得Spark的框架轻而易举地使用Spark Core中的所有内容, 并且各个框架可以在内存中无缝地集成和完成系统任务。
b.Spark是基于统一的技术堆栈。
2.基于内存的迭代式计算
MR在每次执行时都要从磁盘读数据,计算完毕之后都要把数据存放在磁盘上。
Spark是基于内存的,每次运算都是在内存中计算的。
3.DAG
a.是另外一个快的重要原因
b.基于RDD,Spark具备了非常精致的作业调度系统
c.DAG中的依赖有宽依赖和窄依赖之分,DAG可以根据依赖对pipeline等进行优化操作
d.基于RDD和DAG并行计算整个Job.
4.出色的容错机制
a.基于DAG图,lineage是轻量级且高效的
b.操作之间相互具备lineage的关系,每个操作只关系其父操作,各个分片的数据之间互不影响,
出现错误时只要恢复单个split的特定部分
觉得spark挺好用的,但是有一些场景还是不适用
欢迎各位大神来指点