前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我学习的Spark都在学些什么

我学习的Spark都在学些什么

作者头像
刀刀老高
发布2018-04-10 18:09:43
1.9K0
发布2018-04-10 18:09:43
举报
文章被收录于专栏:奇点大数据奇点大数据

最近工作中,接触到最有用的“玩具”就是Spark了,在cpu密集型业务驱动下,提升CPU处理效率,高效的利用内存是最优先的事务,所以有个好的计算工具太重要了,这也是促使我去寻找各种分布式计算工具的动力。

初次接触Spark是在参与公司的一个日志系统项目了解的, 当时就觉得Spark是个内存计算,支持hive sql 的利器,而且调用api非常简单、好用。当时使用的是Spark1.3 的版本,虽然功能还不太完善但是已经初见威力。后来闲下来就打算深入研究一下Spark,这个研究持续近1年时间,其间参考了大量的网络和书籍,发现很多内容是我想搞清楚但是文档写的不深入,有的内容是我不需要知道,但是作者把技术细节讲的面面俱到,导致学习的周期很长。我一直主张的理念是学习从来不是靠量取胜的,所以我把自己对学习Spark的收获整理成一篇大家想看的Spark入门。

我要学Spark吗?

大多数人最开始是先被Spark铺天盖地的新闻给洗脑的,比hadoop快、有机器学习库、好多大公司在用... .... 于是上手就把Spark部署上, 跑一遍example,然后就“精通”了。其实不然,当你遇到硬件资源无法充分利用,出现OOM ,需要优化Spark RDD的时候就会发现,其实你的example远远还不够。我的建议是第一步搞清楚你的业务是否真的需要Spark,还是因为Spark名声鹊起你希望刷存在感在业务中插入一个你并不了解的程序。这个很重要,这个目标决定了你后面坚持学习Spark的时间,如果你的SparkSQL+HDFS完全可以用一台MySQL代替,是否真的有必要用SPARK?

我理解的Spark是个快速计算的框架,当你的单机计算能力不足,有充足的带宽和内存资源的时候,可以采用Spark来解决你能够并行处理的业务的。你的业务真的能并行吗?能拆分吗?如果不能真的不用给自己找麻烦,你有更多的选择。

在决定了用Spark在生产环境时,首先需要选择合适的版本来使用,你的业务需要哪些特性?SQL吗?流式计算吗?图计算吗?后期维护升级的时候是不是要改调用方法?(市面上很多入门参考资料的MLlib库在新版本已经变成ml库,更新了版本之后你要做大量的测试,耗时不省力) 。

我该用哪个语言来进行Spark编程?

Spark 原生由Scala语言编写,支持Java、Python、Scala、R API,学习Spark的时候选择你最熟悉的语言来执行Spark,因为你学习的是框架,清楚Spark的调用过程, 语言本身并不重要(当然Java、R有很多高级特性需要自己编写更多的代码),如果你对于每种语言都很陌生, 推荐你使用Scala,使用一段时间后会让你对函数式编程有更深入的了解。

我参考什么资料?

Spark 自带了“Quick Start” 和 “Programing Guides” 这是入门、入门、入门最好的方式,先用你熟悉的编程语言无脑的跑一遍,对Spark CoreRDD和 Spark SQL有个感性的认识,这时候对RDD的原理什么的不了解也没关系,跳过这些,用Spark-shell运行它们,看它是怎么调用的,返回了什么信息,你还要知道Spark 支持SQL ,而且有个Streaming 流式处理框架和MLlib机器学习库,以及图计算功能,那么你所跑的demo都是Core RDD的功能,底层的核心功能,后面大部分是可以用高级功能替代的。到这里你应该还对Spark能做什么不清楚?不用担心,推荐 edx 的Introduction to Apache Spark,地址 https://www.edx.org/course/introduction-apache-spark-uc-berkeleyx-cs105x

课程介绍了Spark 发展史和用途,Spark SQL 的使用,而且难度较低,讲解主要用Python语言解释的很多概念,建议用你自己熟悉的开发语言完成作业,预计每个Lab4小时左右,会对你入门Spark很有帮助。如果这时候你觉得信心满分可以补充《Spark快速大数据分析》,入门最经典的书籍。

你说的这些我都会,我是要用Spark干大事!

很多人学会了Spark不会用,就是在这个阶段了,哪怕你把Core RDD API都背下来也写不出好用的程序,这时候你需要看example ,注意在程序安装目录下的example程序官方已经打包成了jar包,包括测试数据你可以直接跑的 ,你需要会使用mvn sbt 打包,看Spark-submit的代码,如何执行你的jar包,pyspark 又是如何调用的。Spark文档默认认为你已经熟练提交了各种应用程序和IDE,这时候是你提升最快的时候, 脑袋里冒出来那些想法尽量采用Spark实现一遍。那这时候能写出功能强大的程序了吗? 这个Spark是弥补不了的,还要靠你多年的编程功底,那我们学习了Core RDD API有什么用呢?这是为了避免你自己造轮子,用Core RDD API 执行效率要比你自己写的高,你用的API越合理,你的程序效率越高,如果你想深入Spark就需要加深你的编程能力。scala编程可以参考《scala in Action》, API的各种demo 网上例子也很多,比如 Zhen He( La Trobe University )的《 Spark related topics》,其他编程语言网上的经典教程非常多,这里不啰嗦了。

这样足够了吗?

其实并没有,你只是在单机上利用了自己的cpu和内存,python 有数不清的库,实现的比你用Spark实现的更方便,而且效率更高。你需要从架构角度考虑怎样集群化部署Spark 跑在standalone模式还是yarn模式,选择的原则还是根据需要来决定,这种情况下你要考虑spark 的工作原理,怎样增加并行度?怎样减少action?设置成一个什么样的内存才合理?这些要依据业务来确定参数,所以要你深入了解Spark的原理,好在Spark还提供了web页面可以观测到程序执行的情况,OOM了,你在web页面可以看到哪里设置不合理,你要清楚的知道JVM相关的知识,这方面可以参考 Matei Zaharia(注1)的论文《 An Architecture for Fast and General Data Processing on Large Clusters》 4万字,阐述了Spark的架构和设计思想。直到你能够清晰的区分RDD、stage 、job、task、driver 这些概念为止,你把Spark用到生产环境才不会挖坑。

我还能干点什么?

如果完成了上面我说的这些,你可能找不到更多的深入的资料,这时候会有两个方向一个是想要知道更多的技术细节,为什么某个RDD的调用要这样用,需要你去关注Spark Core RDD的源代码,学会编译调试Spark代码是这个阶段的主要任务,scala的基本功要求非常高。通过代码理解Spark的逻辑。另一个方向是机器学习应用方向,机器学习方面理论支持推荐《白话大数据与机器学习》,利用书中的原理配合Spark MLlib实现常见的机器学习算法。

最后,希望我的Spark学习过程对大家有帮助。

注1:Matei Zaharia 是Spark的创造者,也是Databricks的CTO

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
灰盒安全测试
腾讯知识图谱(Tencent Knowledge Graph,TKG)是一个集成图数据库、图计算引擎和图可视化分析的一站式平台。支持抽取和融合异构数据,支持千亿级节点关系的存储和计算,支持规则匹配、机器学习、图嵌入等图数据挖掘算法,拥有丰富的图数据渲染和展现的可视化方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档