Spark学习入门(让人看了想吐的话题)
这是个老生常谈的话题,大家是不是看到这个文章标题就快吐了,本来想着手写一些有技术深度的东西,但是看到太多童鞋卡在入门的门槛上,所以还是打算总结一下入门经验。这种标题真的真的在哪里都可以看得到,度娘一搜就是几火车皮,打开一看都是千篇一律的“workcount”、“quickstart”,但是这些对于初学者来说还差的太多,这些东东真的只是spark的冰山一角,摸着这些石头过河的话,弯路太多、暗礁涌动,一个不留神就掉河里了。希望我这篇文章能让大家看到些不一样的地方。文章分五个部分,包括官网、blog(特指某sdn)、书籍、源码、视频五个角度,多视角分享一下对于初学者而言在选择学习方法时改如何取舍。
奇葩的技术blog
之所以说奇葩,是因为大家都是相互抄啊抄,这个在某sdn特别流行,知乎上已经有关于这个的吐槽了,国内的技术论坛跟国外还差几条街,Stack Overflow上关于各种疑难杂症的回答都非常专业,但是国内鲜有这样的大型平台。如果大家要通过某sdn的技术博客学习spark,那坑真是太多,大家能碰到及时更新并且分析深入、全面且合理的博主的概率真是太低。首先在信息大爆炸时代,人人都是信息源,博客太多太多,这是信息太多带给学习者的困扰。其次在移动互联网时代,大家的学习时间也都被碎片化了,估计大家大部分时间都被手机占据,很少有人愿意花时间坐在电脑前认真的看技术论坛上的博客了,所以微信的技术公众号才能大行其道。但是,现在的技术公众号也是太多太多,所以大家要平时留意优秀的技术博客,积累优秀公众号就跟学习一门技术一样,是一个积累的过程,不是别人给你推荐几个就一定是好的。但是不要关注一些大型平台的官方公众号,虚的东西太多,没什么干货。至于个人觉得不错的spark学习相关的公众号在这里就不推荐了,你懂的。。。。
官网的编程手册
不得不说,spark的官网编程手册,还是特别的好的,更新及时,覆盖面广,但是缺点也很明显,那就是官网的编程手册,其实并不适合初学者。为什么这么说,首先,它只给出了代码片段,而初学者需要的是一个可以运行起来的工程。初学者往往对spark没有任何的初始印象,他们需要的是一个有输入有输出的直观的工程,通过这个工程,输出变成了输出,他们也就知道spark是干些什么的了。诚然,spark最近版本的编程手册给出了编写spark应用需要的依赖,但问题是很多初学者连maven都没有用过,他们更不知道这些依赖应该如何使用,也不知道这些依赖和代码片段应该如何组合才能构建出一个开发环境来。有些童鞋会说,通过spark-shell可以达到这个目的啊,不需要添加依赖,所见即所得,即写即用,但问题时,一开始就一直使用spark-shell学习的话,其实不知道现网真正的spark应用都不是通过这种方式提交的,这就在一定程度上误导了初学者,他们把spark-shell用的很熟,以为这就是spark的常规使用方式了。官网编程手册的第二个问题是,它给出了api的使用方法,却没有给出这些api的使用场景,诚然,不能要求编程手册给出应用场景来,但这也正是编程手册不适合初学者的原因,因为如果不了解这些api的使用场景,那么即使手动生成几个数据,把这些api测试一遍,学习者不会对这些api有什么印象,更无法激起他们深入学些这些api底层实现的兴趣,他们也不会去注意这些api之间的微妙差异,更无法通过api看到spark的全貌来。我到目前为止,在实际项目中没有使用过的api理解也不是很深刻,只是了解一些他们理论上的实现和差异。举个例子,我们都知道spark的transformation操作是lazy模式,要靠action去启动,但是如果我的一个应用场景就是没有transform,那我应该靠那个action来完成这样一个并行化的处理流程呢?感兴趣的可以思考一下这个问题,其实spark提供了api的,但是大家在学习编程手册时往往不会去注意到这个问题。官网编程手册的第三个问题,就是测试数据来源都太简单,绝大多数都通过一个api生成几个简单的数值类型或者字符串类型,数据量也很少,但是问题是,我们在实际项目中,spark的输入数据千差万别,有些来自文件比如本地文件或者HDFS文件,有些来自其他的DBMS比如mysql等,有些来自网络比如kafka或者flume,有些甚至是spark自己产生的,而如果只是通过api生成数据的方式来描述编程过程,其实不利于初学者了解spark的真是使用方法。这也就是为什么很多童鞋说看官网的api手册看的懂,但是实际项目就比较懵逼的原因了。
书籍
看书确实是一个不错的入门途径,随着spark的火热,现在国内国外的spark书籍也是越来越多,但是往往存在几个问题。第一,版本老旧。这是没办法的事情,spark更新太快,写本书特别是技术书籍,一般都是以半年为单位,半年后书籍出版时,spark都不知道迭代了多少个小版本了,甚至都可能有大版本的跟新,所以大家选择书籍时,可以先通过各种渠道打听一下某本书是基于spark哪个版本写的。但是也不是说老的版本不能看,如果有没有跨大的版本,还是有一定参考意义的。这里给大家普及一下spark的版本号的知识:
spark书籍的第二个问题是,大家要清楚这本书是怎么分类的,怎么讲呢?从横向来看,spark有非常多的用途,比如可以用于ETL、实时处理、数据分析、数据挖掘、机器学习,那么spark书籍也需要从这个角度去分类。那么从纵向来看,有spark原理讲解的、实战的、源码分析的,这又是另外一个分类视角了。个人认为最好的途径是:如果有非常实际的横向需求,比如要做数据分析,那么就从数据分析相关的spark书籍入手,不要一开始就去看原理性的东西,因为你从实际需求入手的话,过段时间你就会非常想了解底层原理了,在这种内在需求的推动下,这时再去看原理相关的书籍效果就会非常好。如果没有实际的横向需求,那就只能从原理性的书籍入手了。看书的另外一个误区就是很多人觉得看一遍就行了,其实很多技术书籍需要反复的看反复的体会,不要觉得自己看书要看好几遍才能理解是自己笨,从而自欺欺人不去复习。
源码
其实很不推荐初学者一开始就去看源码,这往往是一个性价比比较低的入门方法,我知道一个刚刚毕业几个月的童鞋,花了几个月看spark源码,给spark源码添加了80%的中文注释,但是当我问他一些spark使用和非常常用的优化时,他却一个都回答不上来。大家觉得这样一种状态,去面试,能拿到好的offer吗?我换工作时去参加面试,并没有被问到什么spark源码的东西,可以说基本没人问,因为面试官非常清楚一个事实,那就是谁都能把spark源码看个一知半解,但是这样的人并不能代表他能用spark开发出高效的分布式应用来,而这种能力的培养,必须是有实际的项目实践经验才行。国内目前95%的公司对spark的使用都停留在应用层面,只要能使用开源spark写出高效的应用即可,对源码的阅读只可能是一个加分项,因为他们希望你通过源码阅读加深优化spark分布式应用的方法的理解和加快问题定位,并没有希望你能通过spark源码阅读能对spark进行二次开发。spark源码的阅读确实很有必要,但绝对不是在刚刚开始学习的时候,这点大家切鸡切鸡!我在2013年初次接触spark时,公司是对spark有二次开发需求的,那时就很盲目的阅读了很多spark core部分的源码,但是对spark api的使用却非常非常初级,很不利于对spark整体体系或者大数据整体架构的理解。走了这样的弯路,希望初学者能吸取这样的教训。
视频
为了体验一把初学者,我特意买了tensorflow的视频,但是发现实在是看不下去,分析了一下原因,主要是第一,我已经有了多年的工作经验,很多基础的东西其实不需要听,但是培训机构为了考虑初学者以及课程完整性,会加入非常多的基础知识,比如语言基础,环境搭建等。建议有一定基础的朋友,这些东西可以直接跳过,听他讲根本没有自己实际操作来的快。第二,视频一般都会宣称自己有实战项目,但是这其实是一个挺搞笑的事情,实战实战,是听出来的吗?实战一定要自己动手操作,自己解决项目中遇到的问题,这才是实战,视频中最多也就是应用场景介绍而已。一句话,没有老板催的东西,都不叫实战。即使你按照视频中的案例操作一遍,遇到实际项目还是懵逼状态。spark的api是固定的,但是应用场景千变万化,只有实际项目才能从本质上提升一个人的spark能力。看视频真心不如看书和实操,很多初学者甚至已经入门的童鞋,觉得看视频很轻松,但是这就跟减肥机构骗女人吃减肥药去减肥一样,这些女人一般比较懒,想通过捷径去减肥,殊不知靠减肥药其实没有效果,对很多女人来说都是心理安慰而已,真正的减肥要考坚持锻炼和有效的食物热量控制,是个艰苦卓绝的过程。这跟学习一门技术是一个道理。
怎么办?
讲了这么多,怎么没有给出解决方案来?原因就是,学习spark没有固定套路可走,任何一种方法都是优点和缺点并存,而且每个人的基础是不同的,要给出一套通用的解决方案其实是一种不负责任的行为,我上边讲这么多只是为了提醒大家。大家唯一要做的事,就是不要在犹豫不决了,spark是绝对是未来大数据的基础,火的一塌糊涂,多少人因为spark发家致富了。手头有什么就拿起什么来,有视频就看视频,有书就看书,开始搭环境写代码,一个字“开干!”,各种方法都尝试一下,过上一段时间,新航道官网你从各个方面学习的点滴spark知识就会连成一片,从而达到融会贯通的效果。我见过很多人成功转行大数据,静下心来自己订制学习计划、准备面试、入职、项目实战、进阶、再学习、再实战、再进阶,自己给自己形成一个良性循环!
更多精彩内容,请关注spark技术学院,bat一线工程师和你互动,一起学习spark,一起迎接大数据时代!
文章来源:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/80650310