转载

新版本来袭:Apache Spark 1.5新特性介绍

Apache Spark 社区 201599 日发布了 1.5 版本,该版本由 230+ 开发人员和 80+ 机构参与,修复了 1400 多个补丁,该版本可以通过 http://spark.apache.org/downloads.html 进行下载。 Spark1.5 中最主要的修改内容是为了提升 Spark 性能、可用性和操作稳定性,特别在该版本中引入了 Project Tungsten (钨丝项目) ,该项目通过对几个底层框架构建的优化进一步 Spark 性能。另外在该版本中添加了 Streaming 组件、机器学习算法和新的 SparkR 接口等。具体内容如下:

性能提升与 Project Tungsten (钨丝项目)

1.5 这个开发周期内最大的变化就是 Tungsten 项目的第一阶段已经完成,并且在 Spark1.5 版本中正式加入了主要功能。该功能是由 Spark 自己来管理内存而不是使用 JVM ,这样可以避免 JVM GC 带来的性能损失。内存中的 Java 对象被存储成 Spark 自己的二进制格式,计算直接发生在二进制格式上,省去了序列化和反序列化时间。同时这种格式也更加紧凑,节省内存空间,而且能更好的估计数据量大小和内存使用情况。

以下图表给出了性能提升直观的印象,在默认配置情况下,对比测试了 spark1.4Spark1.5 在处理小规模和大规模数据量性能表现:
新版本来袭:Apache Spark 1.5新特性介绍

External Data Source 方面, Parquet 的支持有了很大的加强。 Parquet 的版本升级到 1.7 ;更快的 metadata discoveryschema merging ;同时能够读取其他工具或者库生成的非标准合法的 parquet 文件;以及更快更鲁棒的动态分区插入。

可用性和互操作性

Spark1.5 增加了在 UI 界面中查看 SQLDataFrame 查询计划,能够根据不同的操作和运行时的内存使用显示不同的查询计划,以下图为通过 UI 界面显示查询计划:

新版本来袭:Apache Spark 1.5新特性介绍

另外 Spark1.5 加入了其他的易用组件,在 Hive 模块最大的变化是支持连接 Hive 1.2 版本的 metastore ,同时支持 metastore partition pruning (通过 spark.sql.hive.metastorePartitionPruning=true 开启,默认为 false )。因为很多公司的 Hive 集群都升级到了 1.2 以上,那么这个改进对于需要访问 Hive 元数据的 Spark 集群来说非常重要。 Spark 1.5 支持可以连接 Hive 0.13, 0.14, 1.0/0.14.1, 1.1, 1.2metastore

机器学习 MLlib

MLlib 最大的变化就是从一个机器学习的 library 开始转向构建一个机器学习工作流的系统,这些变化发生在 ML 包里面。 MLlib 模块下现在有两个包: MLlibMLML 把整个机器学习的过程抽象成 Pipeline ,一个 Pipeline 是由多个 Stage 组成,每个 StageTransformer 或者 Estimator

以前机器学习工程师要花费大量时间在 training model 之前的 feature 的抽取、转换等准备工作。 ML 提供了多个 Transformer ,极大提高了这些工作的效率。在 1.5 版本之后,已经有了 25+feature transformer ,其中 CountVectorizer, Discrete Cosine Transformation, MinMaxScaler, NGram, PCA, RFormula, StopWordsRemover, and VectorSlicer 这些 feature transformer 都是 1.5 版本新添加的,做机器学习的朋友可以看看哪些满足你的需求。

这里面的一个亮点就是 RFormula 的支持,目标是使用户可以把原来用 R 写的机器学习程序(目前只支持 GLM 算法)不用修改直接搬到 Spark 平台上来执行。不过目前只支持集中简单的 R 公式 ( 包括 '.', '~', '+''-') ,社区在接下来的版本中会增强这项功能。

另外越来越多的算法也作为 Estimator 搬到了 ML 下面,在 1.5 版本中新搬过来的有 Naive Bayes, K-means, Isotonic Regression 等。大家不要以为只是简单的在 ML 下面提供一个调用相应算法的 API ,这里面变换还是挺多的。例如 Naive Bayes 原来的模型分别用 Array[Double>Array[Array[Double]] 来存储 pitheta ,而在 ML 下面新的 API 里面使用的是 VectorMatrix 来存储。从这也可以看出,新的 ML 框架下所有的数据源都是基于 DataFrame ,所有的模型也尽量都基于 Spark 的数据类型表示。在 ML 里面的 public API 下基本上看不到对 RDD 的直接操作了,这也与 Tungsten 项目的设计目标是一致的。

除了这些既有的算法在 ML API 下的实现, ML 里面也增加了几个新算法:

l MultilayerPerceptronClassifier(MLPC) 这是一个基于前馈神经网络的分类器,它是一种在输入层与输出层之间含有一层或多层隐含结点的具有正向传播机制的神经网络模型,中间的节点使用 sigmoid (logistic) 函数,输出层的节点使用 softmax 函数。输出层的节点的数目表示分类器有几类。 MLPC 学习过程中使用 BP 算法,优化问题抽象成 logistic loss function 并使用 L-BFGS 进行优化。

l MLlib 包里面增加了一个频繁项挖掘算法 PrefixSpanAssociationRules 能够把 FreqItemset 生成关联式规则。

l MLlib 的统计包里面实现了 KolmogorovSmirnov 检验,用以检验两个经验分布是否不同或一个经验分布与另一个理想分布是否不同。

l 另外还有一些现有算法的增强: LDA 算法,决策树和 ensemble 算法, GMM 算法。

l ML 里面的多个分类模型现在都支持预测结果的概率而不像过去只支持预测结果,像 LogisticRegressionModel, NaiveBayesModel, DecisionTreeClassificationModel, RandomForestClassificationModel, GBTClassificationModel 等,分别使用 predictRaw, predictProbability, predict 分别可以得到原始预测、概率预测和最后的分类预测。同时这些分类模型也支持通过设置 thresholds 指定各个类的阈值。

l RandomForestClassificationModelRandomForestRegressionModel 模型都支持输出 feature importance

l GMM EM 算法实现了当 feature 维度或者 cluster 数目比较大的时候的分布式矩阵求逆计算。实验表明当 feature 维度 >30cluster 数目 >10 的时候,这个优化性能提升明显。

l 对于 LinearRegressionModelLogisticRegressionModel 实现了 LinearRegressionTrainingSummaryLogisticRegressionTrainingSummary 用来记录模型训练过程中的一些统计指标。

1.5 版本的 Python API 也在不断加强,越来越多的算法和功能的 Python API 基本上与 Scala API 对等了。此外在 tuningevaluator 上也有增强。

其它

1.5 开始, Standalone, YARNMesos 三种部署方式全部支持了动态资源分配。

SparkR 支持运行在 YARN 集群上,同时 DataFrame 的函数也提供了一些 R 风格的别名,可以降低熟悉 R 的用户的迁移成本。

正文到此结束
Loading...