Spark使用小结(一) —入门

来源:互联网 发布:aws数据集 编辑:程序博客网 时间:2024/05/22 13:40

最近使用了Spark相关组件来完成了一个推荐引擎的相项目,广告CTR预测的。项目可以说告一段落,想写一些总结来说明下最近任务。关于Spark理论方面的相关资料可以说汗牛充栋,本人在此就不再重复原理性的东西,如果文中有的地方需要相关知识会将相关链接放在上面,供大家参考。本文主要讲一些实操方面的经验与教训,另外项目中一些没有解决的坑希望有大神能给予帮助。本文不能给您理论上多高深的指导,只是希望看到文章的你有一些粗浅的领悟有了一个后续搜索的方向。

项目环境

首先先介绍一下本次的项目背景情况,使用一个自己的算法来完成广告点击率的预测数据量两亿条左右(一个月的样本)。使用spark相关组件完成了系统的大部分功能。

spark的版本为1.4.1(有点老),使用的编程语言为scala 版本为2.10.6
集群6个节点,Hdp 2.7版本。

单机调试

大数据项目面临的第一挑战是数据量太大,运行时间较慢不易调试。不可能每次代码都提交集群来进行,尤其是数据清洗的过程。数据清洗不同于最后的算法工作,很多的算法在小数据量下是无法观察最终结果的。但是数据清洗是可以直接进行验证的,所以选取一定比例的小样本进行单机测试是十分高效和必要的。
单机IDE本人选择IDEA 14社区版,相对而言操作要简单。当然要习惯其他的编译器也没必要刻意更改,自己用的舒服即可。idea中使用maven来建立项目,能大大简化引用包的流程。相关可以在网上搜素相关文档,完成搭建。

编程语言选择

关于语言方面个人建议,有兴趣从事大数据开发并使用Spark 相关组件朋友尽量选用scala语言有如下几点好处:
1.文档齐全,兼容性好,Spark 编程的语言为Scala。API支持最好的也是Scala语言 。
2.代码简洁 相对JAVA语言的编程,相同功能的Scala大概只需要1/2的代码量。因为Java需要进行大量的类型校验,也非函数式编程,相对啰嗦。更少的代码量意味着更加简洁和更高效的开发效率。
3.完美兼容Java,因为Scala也需要在JVM进行解析。在程序中,Scala类中可以直接调用Java类的一些方法,非常方便。
相对而言,对有编程基础的学员。如Java、C语言基础的学员,进行Scala的学习难度也不是太大。边学边练,一周足以上手。当然对于工程师来说,编程语言从来不是一个多大的问题,无非是一个工具选择,只不过选取一个完成任务的工具即可。

Spark资源调度

spark的资源调度网上很多文章上都有体现,如这位大牛写的相关博客http://www.tuicool.com/articles/ZJFJ3i
其中有提到spark调度模式。用源码来进行说明,本文这里主要就是想提醒大家,尤其是初学者几个关键问题:
Spark是一个分布式的系统,意味着你的程序是要运行在多个机器上的。不能拿简单的单机系统来类比。其机器之间的内存是不能共享的,只有一些特殊的方法能够共享。任务分发到executors上,你在主程序上定义在内存上的变量就基本没用了。我在这可以做一个特别不负责任的简单的比喻,
程序中main函数下来的代码一般都在driver上运行,而遇到map等分布式命令的时候,则需要分发到其他的机器上,进行分布式计算最后结果统一回到driver。你在driver上定义的一切内存变量都不会被其他机器读到,而且这种模式只能在集群中才能测试出来,单机的local模式是无法看出问题所在的。大家在初学阶段一定要注意这个问题。但这个比喻实在是过于简单和粗糙,具体要任务的调度和数据的IO还是推荐大家去翻阅大牛的博客,有很多详细的介绍。但无论是看书还是编程,也要时刻记住分布式的问题,切不可使用纯单机的思维来理解。

关于spark的一些其他应用在下一篇博文会有体现。

这里写图片描述
给出本人的微信,欢迎大家一起讨论技术,同时更欢迎打赏。

0 0
原创粉丝点击