之所以忽然提笔,是因为这段时间正好在业余时间系统地学习Spark,整个学习思路让我想起了大学期间学习《模拟电子电路》这门课的一些方法,个人觉得可以作为一个学习模板来和大家一起交流分享(本文只谈如何系统高效地学习一项技能或者一门课程,抱有突击学习目的的请绕道)。
无论是学习Spark技术还是学习《模拟电子电路》课程,总结起来,大体都经历了这么几个阶段:
1. 初识(10%):系统地过一遍整个内容,《模电》就是大体听一遍老师的课程,Spark就到处看看相关的资料,在测试环境写一点测试代码。这个过程不需要特别仔细,也不需要多么深入的理解,只需要有个基本的概念了解即可。通常初识阶段是没有办法建立起知识的体系结构的。
2. 搭建知识体系(20%):初步了解基本概念之后,需要再过一遍所有内容,这次同样不需要关注细节,但是需要重点关注章节体系以及章节核心点:
- 这门课程有哪些章节,比如Spark整体可以划分为Spark内核原理、Spark运帷优化、SparkSQL等几大部分。其中Spark内核原理可以划分为RDD介绍、DAG介绍、Spark任务调度、Spark存储管理系统、Spark资源管理系统等几个模块,Spark运维优化分为Spark部署、Web UI等
- 进一步,需要针对每个模块列出核心点,不需要多,每个章节只需要列出三四个核心点即可,比如Spark资源管理模块需要关注静态资源管理策略以及动态资源管理策略
这样处理之后,厚厚的Spark书籍/《模电》就可以变成薄薄的几页纸,一页纸对应一个具体模块,记录该模块的核心点。犹记得当年考试前别的同学在拿着一本厚厚的模电书翻来翻去的时候,我就只需要拿着几页纸复习(而且单科成绩全系前茅)。
第二步是整个方法论中的重中之重,建立知识体系结构,构建知识树谱对知识的深入理解至关重要。只有拥有了全局的视野,你才知道现在自己学习了哪些,还有哪些没学。就像盖别墅,你需要首先画图纸,有个全局的设计,没有人会今天想起来东边盖个花园,明天在西边搞个游泳池。很多同学在学习一门技能的时候总是这里看点资料,那里学点优化方法,缺乏全局的视野,缺乏系统性,学到的东西永远支离破碎。而此时的你,已经可以滔滔不绝、由浅及深地概括一本书了。下面两图是笔者学习Spark内核时为自己列的一个提纲以及优化章节的部分核心点:
3. 深入探索(20%):知识体系建立起来之后,需要更加深入。此时可以丢掉课本,只需要对照着每个章节的核心点一个一个重点击破,比如现在要深入学习Spark资源调度模块中的动态资源调度,那就利用所有可以利用到的资源(google、官方博客、spark文档、youtubo、jira、源码等)检索动态资源调度的相关信息,深入理解其工作原理。这样一个一个击破之后整个知识体系就更加丰满。这个阶段需要严苛的工匠精神,需要你搜集各种资料去了解,去思考why。至此,在理论层面你已经是所谓的”专家”了。这个阶段有两点建议:
(1) 经典内容检索:这个阶段拼的是各位的检索能力和阅读理解能力,在此强烈推荐技术人多关注国外技术大牛的博客以及官方博客、文档,比如Spark可以关注的材料主要有:
- 官方文档:http://spark.apache.org/docs/latest/index.html
- 官方博客:https://databricks.com/blog
- Youtube视频(比较多):https://www.youtube.com/watch?v=cs3_3LdCny8
- 国内大神:https://github.com/JerryLead/SparkInternals/tree/master/markdown
(2)画图整理:网络上关于Spark的内容有很多很多,经典的内容更不少,一般遇到经典内容之后都会一口气读完,再加入书签。然,久而久之,很多内容都会慢慢模糊,当你再想去查的时候已经不知道是哪个博客的内容了,相信很多人会有这样的苦恼。针对这样的问题,需要将一些自己体会非常深刻的内容记录下来,建议使用画图工具,俗话说一图胜千言,比如学习SparkSQL时为了理解SQL的整个解析过程,笔者就简单地将一个简单的SQL的执行计划通过几张图表示出来:
4. 实践探索(30%): 第三步完成之后,相信你已经可以就这项技能和别人谈笑风生了,但也就仅此而已。一旦别人问你一个线上问题,相信你就会从滔滔不绝变得支支吾吾,因为你缺少实践。当然,只有在知识体系构建完成后的实践才是真正意义上的实践。有理论依据作为支撑,实践才有更多意义。实践是一个遇坑填坑的过程,没有遇到坑也不能称为实践。因为只有遇到问题,你才会完整地将监控、日志信息利用起来追踪整个系统工作流程,你才会真真切切地去想如何通过修改配置、修改源码来进一步改造它。
这个阶段,主要考察你解决问题的能力,一般来说通常就三板斧:监控、日志和源码。监控分为硬件监控以及业务监控,两者都需要看懂并会分析。日志也有很多,比如业务日志、GC日志等,需要能力根据异常猜测问题原因并进行验证。如果前者都失效,就只能分析源码。问题分析是第一步,更重要的,你还要提出一个高效地解决方案,这个可能是领导/面试官更看重的
实践探索不可能一撮而就,需要不断的踩坑填坑,所以需要一颗大心脏。
5. 分享交流(20%): 上面四步都是你自己对知识的理解,你还需要看看同行是如何理解的。实践结束之后一定记得需要以博客的形式系统完整的将这个模块完完整整、成体系地、由浅及深地进行复盘整理、分享交流!这个阶段可以让你认识更多圈子里的朋友,一起交流探讨才能不寂寞
学习有无数种方法,适合自己的才是最好的。本文只是笔者对学习方法的一点思考,分享出来一方面是为了更好地完善自己,另一方面也是希望能够给大家提供参考。当然,学习从来不是一件轻松的事情,但也从来不是一件艰难的事情。共勉。
本文转载自:http://hbasefly.com