通过一学期的代码分析,首先如期完成了小组的任务:对Spark的SQL部分进行代码分析与解读,在全部的十多篇博客中,主要完成了SparkSQL总体的设计、传统数据库SQL运行原理与SparkSQL运行架构、对其中的组件字典表Catalog以及词法解析器Parser的设计与实现进行了详细分析、以及Spark语法树的实现、后期通过对Analyzer与Optimizer的设计与实现进行分析,并由此简单说明了物理执行计划的生成与执行的简要原理。最后简单分析了HiveSQL的相关代码,并通过一个例子对本SQL部分进行了分析。
平时的学习中,不仅完成自己的博客任务,不懂的问题通过搜索相关知识进行学习后再写出自己的理解,同时也与小组成员一起进行分析与学习,共同解决一些面临的困难,也深刻认识到Spark的强大之处:通过一种阶梯式的本地化策略,在有效利用资源、节省网络I/O的同时提高了系统执行的效率。通过对SQL部分的分析也认识到Spark SQL的强大:
1、容易集成SparkSQL将SQL查询与Spark程序无缝对接,它允许用户使用SQL或熟悉的Dataframe API查询Spark程序内的结构化数据,可应用于Java、Scala、Python和R。
2、统一的数据访问方式可使用同样的方式连接任何数据源,Dataframe和SQL提供了访问各种数据源的常用方式,包括Hive、Avro、Parquet、ORC、JSON和JDBC,甚至可以通过这些数据源直接加载数据。
3、Hive集成能够在现有数据仓库上运行SQL或HiveSQL查询,SparkSQL支持HiveQL语法以及HiveSerDes(序列化和反序列化工具)和UDF(用户自定义函数),允许用户访问现有的Hive仓库。
4、标准的数据连接通过JDBC或ODBC进行数据库连接,服务器模式为商业智能工具提供行业标准的JDBC和ODBC数据连接。
最后,回归到本次软件工程应用与实践课程,在选题上,对Spark的基本框架有一个比较清晰的认识,对SparkSQL的运行架构及原理有了较为深刻的认识,并在此基础上,建立了阅读代码,分析代码,思考并解决问题的学习流程与学习兴趣,培养了相应的能力,收获很多。
上一期:应用举例



