如何学习 Spark?
链接:https://www.zhihu.com/question/31427697/answer/54973818
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这个问题我应该可以回答,零基础学习spark,因为项目需要,硬着头皮上了,先占坑。
这几天刚好被这货折腾得死去活来的,晚上来答一发。
背景:某文科出长的三流985的cs专业本科,现大三,即将升大四,成绩刚好够保研,已放弃,准备找工作。大一,大二因为活跃于校内各社团,成绩并不是很好,并且,尤其重要的是代码能力很渣。
大三才开始真正接触编程。
交代背景只是想让看到这个答案的朋友具有更好的借鉴意义。
接触 Spark 是因为老师的一个和企业合作的项目需要用到,真正开始接触 Spark到现在也不过一个多月,不过确实学习到了非常多的东西。
1、首先,搭环境一定是必须的啦,答主当时搭环境,前前后后就折腾了一个星期,linux,linux不懂,各种奇怪的命令,当时折腾linux命令的时候心中一万只草泥马奔腾而过,权限的各种奇奇怪怪的问题,跟着网上的教程来做还会出错更是伤心。但是经历这个初始的环境折腾之后,你最基础的linux命令至少会了,环境搭建过程中的各种配置文件坑爹问题,经历你的各种搜索之后,你也可以大概知道各种配置文件的作用,这有助于你后面程序出错的时候查找错误。
2、环境搭建好之后,因为项目的关系,你开始要编程了,但是Spark啥也不懂怎么办啊。
没关系,先搭好开发环境。搭好后得看你的项目需求了。根据你的项目需求来思考学习方向。
3、我的项目需求大概是,从mongoDB读取数据,进行简单的计算之后丢回mongoDB里去。
3.1 先搜索Spark如何连接mongoDB,根据我当时的情况,我记得使用某度搜索,关键词 Spark和mongoDB基本是没啥有用的东西的,所以,这个时候,题主需要学会科学上网,这种比较新的东西,靠某度是没啥用的,该飞越的时候还是要飞越的,mongo-hadoop-core。
3.2 连接好了之后,不懂 Scala怎么办,这个根本不是问题,首先,Spark基本是RDD之间的转化操作,就map,split等几个东西而已,剩下的只要大概懂最基本的语法就可以了(默认题主懂C语言),我们暂时不需要scala高级功能。你要是考我语法特性啥的,答主只能说,臣妾做不到啊。
3.3 项目新出了一个坑爹要求啊,要求将计算好的数据同时送到MySQL啊,简直坑爹有木有,有木有。抱怨归抱怨,程序还是要好好做的。当时国内某度依然搜索不到任何资料,又飞越了长城,发现Spark的新版本有个新功能,insertIntoJDBC,结果这货也是个坑啊,哎,发现它不会自己关闭,插入数据较多的之后,MySQL连接池不够用啊,而且这货根据最新版Spark官方文档,已经被废弃了,因此自己写了一个使用scala连接到MySQL的类(和java连接MySQL差不多)。
4、是的,你没猜错,我又遇到坑问题了。这个问题已经折腾两三天了,暂时还没解决,希望各位前辈,能够指点一点。
坑问题描述:
开发机环境,一个master,一个salve,程序不管是local模式还是standalone模式都运行正常。
服务器环境,一个master,两个slave,程序在local模式下运行正确,standalone模式抛出java.lang.IllegalStateException open错误。目前有较大的可能性,是在连接mongodb进行查询操作的时候,前面一个操作完之后直接关闭了连接,而后一个操作还没操作完造成的错误。具体问题描述请看这里mongodb - Spark on standalone cluster throws java.lang.illegalStateException
上面这个问题已经解决了,是因为mongo-hadoop-core版本支持的问题。而最关键的是我没有清理编译器的缓存,这也导致了,即使一开始我知道是connector版本可能有问题,也没有解决,这也导致了我多花费了好几天来搞了这个问题,但是,这次的经历让我对如何查找错误,如何解决问题,有了更深刻的体会。
强烈建议题主找一个实际项目做!
强烈建议题主找一个实际项目做!
强烈建议题主找一个实际项目做!
实在没办法,自己想一个需求,比如写个程序,随便找个地抓取一堆数据,然后用Spark来分析数据。知乎有很多如何抓取数据的好问题和好回答,题主可以自行搜索。
最后,提醒题主一句话,Spark并不是一颗银弹。
估计有人会奇怪,答主说自己编程能力弱还敢搞这个东西,首先我这么有信心的原因是我大二暑假去一个小公司实习,该公司需要有人做iOS,然后直接丢给我,答主当时,mac啥的,objective-c啥的也不懂,但是没关系,随便买两本书,大概看一下语法,做了书本几个相关的简单例子就可以实际操作了,最后还是做成功了,虽然代码有点乱。但是正是这次的完整的项目经历,给了我学习的极大信息。
然后,最最重要的一点是,Spark是一个让人会又恨又爱的东西,为什么呢?因为你会遇到更种坑问题,但也正是因为如此,解决这种坑问题会给你极大的满足感,能激发你持续进步。