微信号:SparkDaily

介绍:每日播报Spark相关技术及资讯,我们坚信Spark才是未来的通用大数据处理框架.

Databricks连城:Spark SQL 1.2的提升和新特性

2015-02-02 09:34 Spark技术日报

谈及Spark SQL 1.2的提升和新特性,连城主要总结了4个方面——External data source API(外部数据源API)、列式内存存储加强(Enhanced in-memory columnar storage)、Parquet支持加强(Enhanced Parquet support)和Hive支持加强(Enhanced Hive support)。


External data source API


连城表示,因为在处理很多外部数据源中出现的扩展问题,Spark在1.2版本发布了External data source API。通过External data source API,Spark SQL可以将不同数据源的数据抽象为关系表格,并实现多数据源互操作。




目前,在External data source API上已经实现了JSON、Avro、CSV等简单格式的外部数据源支持,Parquet和ORC等更加适合数据仓库的高级文件格式的支持也正在开发 中,Spark SQL 1.2中已经搭载了一套新的Parquet数据源实现。除此之外,利用External data source API还可以实现Spark与HBase、JDBC等外部系统的高效对接。


连城表示,在1.2版本之前,开发者已经可以通过扩展RDD的方式支持各种外部数据源。因此,对比更原生的支持一些外部数据源,External data source API的意义更在于针对相应数据源进行的特殊优化,主要包括Column pruning(列剪枝)和Predicate pushdown两个方面:


Column pruning。在列剪枝中,Column pruning可以完全忽视无需处理的字段,从而显著地减少IO。



Predicate pushdown。将SQL查询中的部分过滤条件下推到更加靠近数据源的位置,利用Parquet、ORC等智能格式写入时记录的统计信息(比如最大值、最小值等)来跳过必 然不存在目标数据的数据段,从而节省磁盘IO。




使用External data source API之前




使用External data source API之后




搭载了如Parquet和ORC这样的智能格式


连城表示,在Spark 1.2版本中,External data source API只提供了查询支持,尚未提供数据写入支持。在后续版本中还将提供带分片剪枝的分片支持和数据写入支持。今后也期望将Spark SQL的Hive支持迁移到data source API上。


Enhanced in-memory columnar storage


连城表示,不管Shark,还是Spark,内存缓存表的支持都是非常重要的一个特性。他表示,虽然在1.1和之前版本中的列式内存表的性能已然不错,但是还会出现一些问题:第一,大数据量下缓存超大体积表时(虽然不推荐,但不缺现实用例),会出现OOM等问题;第二,在列式存储中,像Parquet、ORC这种收集统计信息然后通过这些信息做partition skipping等操作在之前版本中并没有完全实现。这些问题在1.2版本中都得到了解决,本节,连城主要介绍了语义统一、缓存实体化、基于查询计划的缓存共享、Cache大表时的OOM问题、表格统计(Table statistics)等方面。


缓存实体化。SQLContext.cacheTable(“tbl”)默认使用eager模式,缓存实体化将自动进行,不会再等到表被使用或触发时,避免手动做“SELECT COUNT(*) FROM src;”。同时,新增了“CACHE [LAZY] TABLE tbl [AS SELECT …]”这样的DML。


语义统一。早期时候,SchemaRDD.cache()和SQLContext.cacheTable(“tbl”)这两个语义是不同的。其中,SQLContext.cacheTable会去建立一些列式存储格式相关优化,而SchemaRDD.cache()却以一行一个对象的模式进行。在1.2版本中,这两个操作已被统一,同时各种cache操作都将得到一个统一的内存表。


基于查询计划的缓存共享。两个得到相同结果的cache语句将共享同一份缓存数据。


避免Cache大表时的OOM问题。优化内存表的建立和访问,减少开销,进一步提升性能;在缓存大表时,引入batched column buffer builder,将每一列切成多个batch,从而避免了OOM。




表格统计。Table statistics,类似Parquet、ORC使用的技术,在1.2版本中主要实现了Predicate pushdown(实现更快的表格扫描),同时配合内存表的统计数据,可以对大小表join自动进行广播优化。


最后,连城还详细介绍了一些关于加强Parquet和Hive支持的实现,以及Spark未来的一些工作。

 
Spark技术日报 更多文章 借助 Redis ,让 Spark 提速 45 倍! Spark的调度策略详解 Spark 实战,第 6 部分: 基于 Spark ML 的文本分类 科普 | 从大数据到Hadoop,Spark,Storm Spark Streaming的还原药水——Checkpoint
猜您喜欢 CSS3 transform介绍 | 如何设计炫酷的动画效果 怎样的程序员最抢手? PHP的非阻塞或并行请求实现方式 最全面的 Android 编码规范指南 微信自研生产级paxos类库PhxPaxos实现原理介绍