一起学习《 High Performance Spark 》
本人想在spark性能优化上深耕一下,最近在学习《 High Performance Spark 》这本书,感觉收获颇大,所以和大家分享一下。下面是对书中的内容的简单记录和一些学习理解。
Chapter 2. How Spark Works
1、并行计算
Spark与分布式存储系统(例如HDFS、Cassandra或S3)和集群管理器一起使用,集群管理器用于存储用Spark处理的数据,集群管理器用于协调Spark应用程序在集群中的分布。 Spark目前支持三种类型的集群管理器:独立集群管理器、Apache Mesos和Hadoop YARN(见图2-1)。独立集群管理器包含在Spark中,但是使用独立集群管理器需要在集群的每个节点上安装Spark。
Spark Core是Spark生态系统中的主要数据处理框架,拥有Scala、Java、Python和R.的api。Spark是围绕称为弹性分布式数据集(RDDs)的数据抽象构建的。RDDs是延迟计算的 、静态类型的分布式集合的表示。RDDs有许多预定义的粗粒度转换(应用于整个数据集的函数),例如用于操作分布式数据集的map、join和reduce,以及用于在分布式存储系统和Spark jvm之间读写数据的I/O功能。
Spark有两个机器学习包:MLand、MLlib。MLlib是一个用Spark编写的机器学习和统计算法包。Spark Ml仍处于早期阶段,并且只在Spark 1.2之后才存在。Spark ml提供了比MLlib更高级的API,其目标是允许用户更容易地创建实用的机器学习管道。Spark MLlib主要构建在RDDs之上,并使用来自Spark Core的函数,而ML是构建在Spark SQL之上。
2、RDDs--重要
Spark允许用户为集群计算系统上的驱动程序(或主节点)编写一个程序,该程序可以并行地对数据执行操作。Spark将大型数据集表示为存储在执行器(或从节点)中的RDDs不可变的分布式对象集合。组成RDDs的对象称为分区,可以(但不需要)在分布式系统的不同节点上计算。Spark群集管理器根据Spark应用程序设置的配置参数处理在分布式系统中启动和分配Spark执行器。Spark执行引擎本身在执行器中分配数据进行计算。(见图2 - 4)。Spark并不会在驱动程序指定的时候对每个转换进行评估,而是惰性地评估RDD,只有在最终的RDD数据需要计算时才计算RDD转换(通常是通过将数据写入存储器或收集一个聚合到驱动程序)。Spark可以在Spark应用程序的整个生命周期中,将加载的RDD保存在执行程序节点的内存中,以便在重复计算中更快地访问。由于RDD是在Spar