Spark1.6新特性简介及个人的理解

新的Spark1.6版本发布了,之前使用Spark1.4版本的SparkSQL,这次发布后主要关注了1.6版本的SparkSQL特性
参阅了官方的Release Note和jira issue detail以及之前在使用1.4.0中的经验,
跟大家分享一下Spark1.6部分新加的几个特性。

1. Dataset API
目前Spark有两大类API:RDD API(Spark Core),DataFrame API(Spark SQL)
RDD API非常灵活,但是某些情况下执行计划很难被优化。
DataFrame API便于优化,但是操作UDF(Uer Define Function)就比较麻烦(之前在使用时发现想通过DataFrame API去描述SQL语句的业务时,确实有些复杂)。
Dataset API诞生在这样的背景下,需要兼顾以上两者的优点,既能使用户能够简洁清晰的描述UDF,又能够便于底层catalyst对执行计划的优化,
顺便提一下,SPARK-9999的jira case上对Dataset API的目标版本是2.0.0,估计那个时候Dataset API会更加的丰富

2. Session Management
集群可以被共享给多个拥有不同配置及临时表的用户,在1个SparkContext中可以有多个SparkSQL的session
之前在使用1.4的时候发现很多SQL下到底层最后都是顺序执行,而且SQL到SQLContext的调度是自己写线程池去处理的,
加入Session管理会给使用提供更大的方便,尤其在处理多并发时。

3. Per-operator Metrics for SQL Execution
Spark的metrics已经详细到task及stage上,在上面可以看到很多任务运行的指标,如任务耗时,处理的数据量,等等,
之前通过Metrics提供的信息发现了任务运行时间长的原因
新的特性是在SparkSQL运行时,为每个操作单位提供内存使用量和溢出 (这里应该是指在磁盘和内存上交换的)数据大小的统计显示,
这对于开发者了解资源,发现问题,做出调整很有帮助

4. SQL Queries on Files
SQL可以直接在符合数据规则的文件上进行查询,不再像以前需要先将文件注册成临时表

5. Reading non-standard JSON files
Spark在处理JSON时使用的Jackson包,这次将Jackson包的以下选项开放给使用者 
ALLOW_COMMENTS
ALLOW_UNQUOTED_FIELD_NAMES
ALLOW_SINGLE_QUOTES
ALLOW_NUMERIC_LEADING_ZEROS
ALLOW_NON_NUMERIC_NUMBERS
除非特殊情况,个人还是更倾向于使用标准json

6. Advanced Layout of Cached Data
在对内存表进行扫描时,存储分区和排序方案,同时在DataFrame中添加了根据指定列进行分发和本地排序的API

7. All primitive in json can be infer to Strings
通过设置primitivesAsString为true,可以将JSON中的所有原语在Dataframe中指定为字符串类型,即JSON中的数据在Dataframe中统一为字符串

参考资料:

官方Release Note
http://spark.apache.org/releases/spark-release-1-6-0.html

猜你喜欢

转载自zhao-rock.iteye.com/blog/2269763
今日推荐