sparksql源码开发(spark sql开发)
本文目录一览:
- 1、大数据入门需学习哪些基础知识
- 2、如何学习Spark API
- 3、hive中设置参数怎样设置走spark-sql
- 4、为什么sparkSQL
- 5、大数据开发用什么语言
- 6、Spark SQL 和 Shark 在架构上有哪些区别?将来会合并吗
大数据入门需学习哪些基础知识
前言,学大数据要先换电脑:
保证电脑4核8G内存64位操作系统,尽量有ssd做系统盘,否则卡到你丧失信心。硬盘越大越好。
1,语言要求
java刚入门的时候要求javase。
scala是学习spark要用的基本使用即可。
后期深入要求:
java NIO,netty,多线程,ClassLoader,jvm底层及调优等,rpc。
2,操作系统要求
linux 基本的shell脚本的使用。
crontab的使用,最多。
cpu,内存,网络,磁盘等瓶颈分析及状态查看的工具。
scp,ssh,hosts的配置使用。
telnet,ping等网络排查命令的使用
3,sql基本使用
sql是基础,hive,sparksql等都需要用到,况且大部分企业也还是以数据仓库为中心,少不了sql。
sql统计,排序,join,group等,然后就是sql语句调优,表设计等。
4,大数据基本了解
Zookeeper,hadoop,hbase,hive,sqoop,flume,kafka,spark,storm等这些框架的作用及基本环境的搭建,要熟练,要会运维,瓶颈分析。
5,mapreduce及相关框架hive,sqoop
深入了解mapreduce的核心思想。尤其是shuffle,join,文件输入格式,map数目,reduce数目,调优等。
6,hive和hbase等仓库
hive和hbase基本是大数据仓库的标配。要回用,懂调优,故障排查。
hbase看浪尖hbase系列文章。hive后期更新。
7,消息队列的使用
kafka基本概念,使用,瓶颈分析。看浪尖kafka系列文章。
8,实时处理系统
storm和spark Streaming
9,spark core和sparksql
spark用于离线分析的两个重要功能。
10,最终方向决策
a),运维。(精通整套系统及故障排查,会写运维脚本啥的。)
b),数据分析。(算法精通)
c),平台开发。(源码精通)
自学还是培训?
无基础的同学,培训之前先搞到视频通学一遍,防止盲目培训跟不上讲师节奏,浪费时间,精力,金钱。
有基础的尽量搞点视频学基础,然后跟群里大牛交流,前提是人家愿意,
想办法跟大牛做朋友才是王道。
如何学习Spark API
Spark采用一个统一的技术堆栈解决了云计算大数据的如流处理、图技术、机器学习、NoSQL查询等方面的所有核心问题,具有完善的生态系统,这直接奠定了其一统云计算大数据领域的霸主地位;
要想成为Spark高手,需要经历一下阶段:
第一阶段:熟练地掌握Scala语言
1, Spark框架是采用Scala语言编写的,精致而优雅。要想成为Spark高手,你就必须阅读Spark的源代码,就必须掌握Scala,;
2, 虽然说现在的Spark可以采用多语言Java、Python等进行应用程序开发,但是最快速的和支持最好的开发API依然并将永远是Scala方式的API,所以你必须掌握Scala来编写复杂的和高性能的Spark分布式程序;
3, 尤其要熟练掌握Scala的trait、apply、函数式编程、泛型、逆变与协变等;
第二阶段:精通Spark平台本身提供给开发者API
1, 掌握Spark中面向RDD的开发模式,掌握各种transformation和action函数的使用;
2, 掌握Spark中的宽依赖和窄依赖以及lineage机制;
3, 掌握RDD的计算流程,例如Stage的划分、Spark应用程序提交给集群的基本过程和Worker节点基础的工作原理等
第三阶段:深入Spark内核
此阶段主要是通过Spark框架的源码研读来深入Spark内核部分:
1, 通过源码掌握Spark的任务提交过程;
2, 通过源码掌握Spark集群的任务调度;
3, 尤其要精通DAGScheduler、TaskScheduler和Worker节点内部的工作的每一步的细节;
第四阶级:掌握基于Spark上的核心框架的使用
Spark作为云计算大数据时代的集大成者,在实时流处理、图技术、机器学习、NoSQL查询等方面具有显著的优势,我们使用Spark的时候大部分时间都是在使用其上的框架例如Shark、Spark Streaming等:
1, Spark Streaming是非常出色的实时流处理框架,要掌握其DStream、transformation和checkpoint等;
2, Spark的离线统计分析功能,Spark 1.0.0版本在Shark的基础上推出了Spark SQL,离线统计分析的功能的效率有显著的提升,需要重点掌握;
3, 对于Spark的机器学习和GraphX等要掌握其原理和用法;
第五阶级:做商业级别的Spark项目
通过一个完整的具有代表性的Spark项目来贯穿Spark的方方面面,包括项目的架构设计、用到的技术的剖析、开发实现、运维等,完整掌握其中的每一个阶段和细节,这样就可以让您以后可以从容面对绝大多数Spark项目。
第六阶级:提供Spark解决方案
1, 彻底掌握Spark框架源码的每一个细节;
hive中设置参数怎样设置走spark-sql
1、下载源码
2、下载Maven,并配置
此配置简单,就略过
3、使用maven进行打包:
打包命令:
mvn -Pyarn -Dhadoop.version=2.3.0-cdh5.0.0 -Phive -Phive-thriftserver -DskipTests clean package
上面的hadoop.version可以根据自己的需要设置相应的版本
为什么sparkSQL
Shark和sparkSQL 但是sparksql源码开发,随着Spark的发展sparksql源码开发,其中sparkSQL作为Spark生态的一员继续发展,而不再受限于hive,只是兼容hive;而hive on spark是一个hive的发展计划,该计划将spark作为hive的底层引擎之一,也就是说,hive将不再受限于一个引擎,可以采用map-reduce、Tez、spark等引擎。
Shark为sparksql源码开发了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化);同时还依赖Hive Metastore和Hive SerDe(用于兼容现有的各种Hive存储格式)。这一策略导致了两个问题,第一是执行计划优化完全依赖于Hive,不方便添加新的优化策略;二是因为MR是进程级并行,写代码的时候不是很注意线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支(至于为何相关修改没有合并到Hive主线,我也不太清楚)。
此外,除了兼容HQL、加速现有Hive数据的查询分析以外,Spark SQL还支持直接对原生RDD对象进行关系查询。同时,除了HQL以外,Spark SQL还内建了一个精简的SQL parser,以及一套Scala DSL。也就是说,如果只是使用Spark SQL内建的SQL方言或Scala DSL对原生RDD对象进行关系查询,用户在开发Spark应用时完全不需要依赖Hive的任何东西。
大数据开发用什么语言
首先Java,是现阶段使用较为居多,为什么呢?是由于玩Java转到大数据人数太多人的缘故,所以很多人都喜欢使用Java,也有的是由于公司为了维护和人才的使用考虑,会选择使用Java语言开发,也有的是因为平台会有Hadoop的MapReduce老程序与Spark任务混合使用,为了平台统一开发语言而选择Java,也有的公司为了对接外面项目而选择通用性比较强的Java语言开发。
Scala,也可以是说大数据Spark开发的主力语言了,因为当你学习Spark后,就一定会对Scala有进一步的研究与学习,因为为了学好Spark技术你需要研究源码、需要更简洁快速开发项目。从而Spark大数据开发语言Scala是最多。
Python,在机器学习、AI的崛起,也有很多人青睐的语言了;还有一波人喜欢,那就是大数据分析人员,在SQL与spark SQL 使用Python来进行脚本调度。
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
Spark SQL 和 Shark 在架构上有哪些区别?将来会合并吗
Shark为了实现Hive兼容sparksql源码开发,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑sparksql源码开发,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化);同时还依赖Hive Metastore和Hive SerDe(用于兼容现有的各种Hive存储格式)。这一策略导致了两个问题,第一是执行计划优化完全依赖于Hive,不方便添加新的优化策略;二是因为MR是进程级并行,写代码的时候不是很注意线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支。
Spark SQL解决了这两个问题。第一,Spark SQL在Hive兼容层面仅依赖HQL parser、Hive Metastore和Hive SerDe。也就是说,从HQL被解析成抽象语法树(AST)起,就全部由Spark SQL接管了。执行计划生成和优化都由Catalyst负责。借助Scala的模式匹配等函数式语言特性,利用Catalyst开发执行计划优化策略比Hive要简洁得多。去年Spark summit上Catalyst的作者Michael Armbrust对Catalyst做了一个简要介绍:2013 | Spark Summit(知乎竟然不能自定义链接的文字?)。第二,相对于Shark,由于进一步削减了对Hive的依赖,Spark SQL不再需要自行维护打了patch的Hive分支。Shark后续将全面采用Spark SQL作为引擎,不仅仅是查询优化方面。
此外,除了兼容HQL、加速现有Hive数据的查询分析以外,Spark SQL还支持直接对原生RDD对象进行关系查询。同时,除了HQL以外,Spark SQL还内建了一个精简的SQL parser,以及一套Scala DSL。也就是说,如果只是使用Spark SQL内建的SQL方言或Scala DSL对原生RDD对象进行关系查询,用户在开发Spark应用时完全不需要依赖Hive的任何东西。
能够对原生RDD对象进行关系查询,个人认为大大降低了用户门槛。一方面当然是因为熟悉SQL的人比熟悉Spark API的人多,另一方面是因为Spark SQL之下有Catalyst驱动的查询计划优化引擎。虽然在很多方面Spark的性能完爆Hadoop MapReduce好几条街,但Spark的运行时模型也比MapReduce复杂不少,使得Spark应用的性能调优比较tricky。虽然从代码量上来看,Spark应用往往是对等的MR应用的好几分之一,但裸用Spark API开发高效Spark应用还是需要花些心思的。这就体现出Spark SQL的优势了:即便用户写出的查询不那么高效,Catalyst也可以自动应用一系列常见优化策略。
。。