"IT有得聊”是机械工业出版社旗下IT专业资讯和服务平台,致力于帮助读者在广义的IT领域里,掌握更专业、实用的知识与技能,快速提升职场竞争力。
Spark学习的痛点
对初学者(特别是自学者)学习来说,Spark学习有以下两大痛点。
1.头绪太多,不知道从哪学
从Spark的技术栈可以看到,涉及的技术从操作系统到外部组件、Spark框架、交互工具、编程语言,涉及多个层次,每个层次又包括多个技术和知识点,对初学者来说,可能只是对其中的部分技术有一些模糊的认识,并不会形成图1中那么全面、清晰的层次。
图1.Spark Streaming数据源和输出
这样,就会导致学习的时候,到底是从哪开始?比如确定了先学习Linux,那么Linux的发行版又选择哪个好?Linux的命令又需要学习哪些?如果要想学得全面,仅《鸟哥的Linux私房菜》系列书可能就够学1、2年的,那么又要学到哪个程度?又比如Scala语言,仅简化版的《快学Scala》就有300多页,10多章,又该从哪开始?学习哪些?学到什么程度?Spark框架除了Spark Core以外,还有GraphX、Streaming、Spark SQL和SparkR等,它们是否都要一个一个的学?还是只选其中几个学?如果学,那又该选择哪几个最好呢?
所以,在Spark初学者的道路上,处处都存在着选择,如何在纷繁复杂的路径中,选择一条较优的路径,对初学者来说,通常是很困难的事情。
2.处处掣肘,起步艰难
Spark初学者在起步阶段会遇到各种各样的问题,例如,Linux的各种权限问题、命令使用问题、Spark环境构建的各种配置问题、Scala学习中的各种语法问题、Spark编程中的各种异常等,都是横亘在初学者面前的一座座大山。初学者往往费尽精力,解决了一个问题,结果又冒出了更多的问题,这种心力交瘁,看不到尽头的感觉在起步阶段十分常见。
Spark快速学习路线图
Spark学习没有捷径,任何宣称不需要下功夫就能轻松掌握Spark的说法,都是不靠谱、不负责任的。这里提到的快速学习路线,是让付出更有效,少踩坑,少做无用功,但不管怎样,都需要下功夫,不断实践。
1.Spark快速学习路线图
Spark学习要区分以下两种情况。
● 必须要学习的内容。对于这部分内容,从一开始就要把基础打好,必须牢固掌握。
● 可以后续再学的内容。对于这部分内容,只需要清楚其概念,心中有数就可以了,待到需要时,能迅速找到资料,确定学习方法,再快速自学。
基于上面的划分,列出Spark快速学习的路线图,如图2所示。
图2. Spark学习路线图
● 图1中列出的内容属于必学部分;
● 左侧列为要学习的知识模块,箭头方向表示学习顺序。
● 右侧为每个知识模块对应的知识点和要求,或者说是学习完该模块后,要达到的目标。
2.注意事项(重要)
图2中的内容相对Spark技术栈中所列的技术做了大幅简化,这并不是说没有列出的内容不需要学习或不重要,而是说,学习时可以先按照上图进行系统学习,可以由易到难,快速构建一个最简的Spark知识体系。
这个最简Spark知识体系是学习后续Spark其他知识点模块的基础。一旦构建了这个知识体系,其他的Spark知识点,就可以根据需要参考本书,做针对性的学习。如果不使用上面的路线图,打乱顺序,多点出击,或者全盘包揽的话,实践证明效果往往很不理想。
Spark学习中的关键点
下面列出Spark学习中需要注意的点或原则,它们可以使得后续的学习更加高效。
● 看到结果比明白原理更重要;
● 动手比看书更重要;
● 暂时理解不了的原理,或者找不到原因的问题,可以先放下,继续往后学;
● RDD、DataFrame和Dataset是Spark基础中最重要的3类数据结构;
● RDD永远不会过时,它只是逐渐退居幕后;
● DataFrame和Dataset正在成为Spark与外界打交道的统一接口;
● 结构化大数据处理在Spark中应用越来越多,Spark SQL越来越重要;
● 各种数据格式转换、数据源的连接非常重要;
● SparkR、流数据处理、GraphX和MLlib可以在后续需要的时候再去学习。
Spark技术栈
按照使用层次列出Spark的技术栈,分为4层,自底向上依次为:操作系统、外部组件、Spark框架、编程语言,如图3所示。
图3.Spark技术栈
1.底层基石——操作系统
Spark程序运行在Linux操作系统上,常用的Linux发行版是Ubuntu和CentOS。安装Linux操作系统时所涉及的技术包括:虚拟机安装与使用、Linux的安装、功能定制等;系统安装后,涉及的技术可以分为以下3类。
● Shell命令:Linux基本配置、文件操作、用户管理、权限设置、网络配置、服务的开启、关闭、自动运行、文本编辑器使用等命令;
● 脚本编程:Linux下主流的脚本语言主要是Bash等,技术涉及:变量的使用、基本数据类型、关键词、控制结构、函数定义与使用、调试技巧等;
● 操作系统接口:Spark应用和 Spark 框架的开发,更多的是和JDK以及开发语言的接口打交道,直接同操作系统接口的交互并不多。操作系统的接口对于理解JVM机制以及Spark应用和Spark框架的性能调优时会用到。
2.周围友援——外部组件
Spark 负责大数据分析处理,而数据从哪来、处理后的数据应该往哪去,则需要其他的外部组件来负责。图1-5列出了各类外部组件的主流选型,如非结构化数据存储HDFS、结构化数据存储Hbase,消息处理、数据接入工具Kafka、数据采集工具Flume、分布式程序一致性组件Zookeeper。实际开发中,Spark会同这些组件频繁交互,因此,需要掌握这些组件的基本运行原理、安装方法、基本配置、常用命令、API接口和日志查看方法等基础技术。
3.中坚核心——Spark框架
Spark框架就是 Spark 自身,它是 Spark 大数据开发的核心。Spark 框架由Spark Core、Spark SQL、GraphX、流数据处理、SparkR、MLlib/ML和 Spark 交互工具组成。后面会详述各组成部分的功能。
4.上层接口——编程语言
Spark 支持的编程语言包括Java、Scala、Python、R和SQL。上述编程语言中 Spark 对Scala的支持最好,因为 Spark 框架自身就是用Scala开发的。Spark还支持SQL,SQL和其他4种语言不一样,它可以独立出现在spark-sql(Spark 交互工具的一种)中,也可以嵌入在编程语言中。