关于《Spark快速大数据分析》这本书

关于《Spark快速大数据分析》这本书_第1张图片
Spark快速大数据分析
写在前面

我根据个人粗浅的认知,把大数据相关的工作笼统地分为“开发层”“应用层”两个大类。
所谓开发层,是指真正的大数据工程师的工作。比如说,线上业务每天会产生很多数据,保存在了一个Mongo库。这些数据是原始的、文本的、杂乱的。大数据工程师负责去清洗、转换,并最终以一种结构化或半结构化的方式存储下来,如hive表等。
所谓应用层,则是指后续的数据分析人员、建模人员等基于上述已经比较规整的数据做一些应用分析,比如建立模型、分析业务、生成BI报表等。大部分时候,应用层人员可能仅使用hive-sql这种简单的工具即可完成任务,但当数据量较大或数据提取逻辑较复杂时,使用Spark则可能更高效。
我本人是一个模型工程师,也就是属于所谓的“应用层”。因此本文是从这个角度去理解和总结《Spark快速大数据分析》这本书的。
毫无疑问的是,应用层的人所需要的大数据相关技能,要比开发层简单的多,我本人对于大数据的理解,也比专业的大数据工程师粗浅的多。

关于这本书

我看的是第一版,出版时间为2015年9月,现在时间为2020年2月。Spark是快速发展和迭代的,因此可以说,这本书有点过时了。从具体的内容上说,这本书出版时,还没有Spark.DataFrame,而只有RDD、PairRDD、SchemaRDD(SchemaRDD后来发展成为Spark.DataFrame)。而作为应用层人员,面对的数据都是大数据开发人员准备好的结构化的,因此最常使用的数据格式肯定是Spark.DataFrame而不是更原始的RDD。因此我的总结是,这本书对于大数据初级应用人员来说,实际价值不大。(但对于大数据开发人员而言可能还是很好的一本书)。

要点总结

尽管如此,这本书还是提供了诸多有用的知识,可能是关于Spark整体架构的理解,也可能是琐碎的应用技巧。现无序总结如下。
(1)RDD的基本单位类似于文本中的行,针对RDD的filter、map等基本操作可以理解为是操作在了每一行上。
(2)关于DAG和惰性计算:一段典型的Spark代码的功能,无非是“读入数据形成RDD(or DataFrame) 或 创建RDD(or DataFrame) → 一系列的转换操作 → 保存结果”,Spark本身会首先解析代码(但不执行),解析后形成一个DAG。等到有保存、collect等操作时,Spark会根据DAG开始真正计算
(3)关于persist:假想一段Spark代码被解析成了如下的DAG,其中a是来源于分布式文件系统的原始数据,i是要保存回分布式文件系统的结果。根据(2),i的保存操作触发Spark的真正计算。为了得到i,需要首先得到g和h,为了得到g,需要得到d和e,为了得到d,需要首先得到c。最终能够回溯到读取操作上。但是,Spark本身不自动缓存中间会被重复使用的结果。比如首先屡出了一条线abcdgi,另一条线是abcegi,Spark会无脑的把两条线都计算一遍,造成浪费。persist的功能就是解决这个问题。在Spark代码中,通过转换得到c后,添加一个语句:c.persist(),该语句的功能是把中间结果c持久化到内存中。这样就不必重复计算了。总结一句话,只要一个中间结果会被使用两次及以上,就对其进行持久化缓存处理

关于《Spark快速大数据分析》这本书_第2张图片
一个假想的SparkDAG

(4)关于文件的读取与保存:Spark可以与 分布式文件系统(HDFS等)或更高层面的 分布式数据库(Hive、HBase等)进行交互。前者的典型方法就是sc.textFile()、sc.saveAsTextFile()、sc.sequenceFile()、sc.saveAsSequenceFile()等,后者的典型交互方式则来源于 SparkSQL,通常是通过执行一段SQL代码来获取原始的输入数据。
(5)关于spark-submit:应了解其各个参数的含义,并能够较合理的进行应用。此处不表,回头单独总结。
(6)SchemaRDD就是后来的Spark.DataFrame。
(7)入门级最常用最该学习的是SparkSQL工具及Spark.DataFrame的常用操作。

你可能感兴趣的:(关于《Spark快速大数据分析》这本书)