初窥Spark SQL Catalyst

初窥Spark SQL Catalyst
在这篇文章中,我根据Spark SQL的论文,介绍了Spark SQL的一个关键模块:DataFrame API。我们现在已经知道,DataFrame和RDDs之间的关系应当是:DataFrame可以转化为RDDs,而RDDs也可以被映射为DataFrame。同时我们也知道,DataFrame API实质上是一套DSL,而最终在Spark计算框架中被执行的,应当是DataFrame最终转化后的RDDs。显而易见,人肉编写的DF所对应的DSL,存在着巨大的优化空间。这也就是本次文章所有讲述的Spark SQL的后半部分内容——Catalyst. *这里额外补一句,根据目前最新的代码,Spark已经把DataFrame这个东西去掉了,取而代之的则是Dataset,为了保持兼容,原来的DataFrame被定义为了Dataset[Row]的别名。关于这个Dataset我先观察观察,如果有必要的话,再单独拎出来说说,目前您可以假装认为它和DataFrame没有啥区别。   Catalyst O

进化的Spark, 从DataFrame说起

进化的Spark, 从DataFrame说起
书接上回,Spark可以说就是RDDs的化身,我们已经看到RDDs的设计方案对于大数据的计算具有诸多优势,但是随着Spark项目的推进,大家也逐渐地发现,在实际的生产领域,Spark RDDs API的编程方式并不是唯一的选择,很多的计算,都很像目前关系型数据库中的关联查询,而所谓的“信息”,其实很大部分都是产生自数据与数据之间的关联,而对于这样的数据模型,RDDs模型的表达能力还是相对有限的。 Spark 1.3.0的发布带来了全新的DataFrame API以及Spark SQL,我们继续追根溯源,找到关于DataFrame与Spark SQL的核心设计稿 - Spark sql: Relational data processing in spark[1]。 从这篇文章的角度来讲,DataFrame API和Spark SQL是配套的,从下图我们就可以看出来新增的这个模块与原有Spark框架的关系: 它们只是以不同的角度来诠释Spark在关系型数据的处理能力,可以看到,整个S

从RDDs到Spark

从RDDs到Spark
Spark是近年来非常火爆的分布式计算框架,可以说它紧跟Hadoop的脚步,并且在很多方面实现了超越。在Spark官方的宣传中我们也可以看到,Hadoop能做到的事情,Spark也可以做,而且通常可以做得更好。事实上,越来越多的业内公司都开始试水Spark,因为其核心卖点内存计算加速以及简洁优雅的编程接口不光可以为某些分布式批处理应用提速,还可以降低分布式计算应用的编写门槛。由于我不是数据工程师,所以我并不太关心分布式应用的编写环节(例如如何利用Spark进行数据挖掘、机器学习……),我更关心Spark这个计算框架以及这个分布式系统的体系结构。现在有很多书都在写Spark源码,但是很遗憾的是,在我看来,这些源码分析做得很“工程”,要知道很少有人会因为某某软件开源,就去死磕它的代码,人们往往需要带着目的去研究他们的代码,从而补足书面文献中所缺少的部分,其次才是看他们的实现是否够“优雅”,够“软件”。 希望本文能做做成一个系列,记录我学习Spark的点滴,同时也将我的学习思路分享给大家。 研究一个软...

Spark源码阅读环境搭建[Windows版]

Spark源码阅读环境搭建[Windows版]
近期要开始阅读Spark的源码了,董的博客里的这篇文章已经把大致的环境搭建思路说得很清楚了。不过由于我没有专用的Linux工作机,在VM里开IDE阅读代码不仅对我8GB内存的小本是种摧残,对我的精神更是种折磨,于是开始琢磨怎么在Windows下配置这个环境。 其实那篇博文已经比较老了(注意到那个发布时间是2014年),不仅Spark有了飞越,Scala同样也是,版本问题似乎已经不再那么至关重要(版本依然重要)下面列出我的配置流水: 安装JDK 1.8,配置CLASS_PATH、系统Path 安装Scala 2.10.6(2.10.x的最新版),安装的时候没什么特殊情况的话,会自动加入Path 安装Git for Windows,这个记得安装的时候不要选Bash,要选Command Prompt 安装SBT,这个似乎不是必要的,因为IDEA自带这个,不过如果希望自己动动命令行手动构建的话,可以装个玩玩,记得加入Path,然后命令行执行sbt命令来进行初始化(有可能需要VPN,有些库被