Apache Spark 1.5发布,新特性一览

Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。Apache Spark社区刚刚发布了1.5版本,明略数据高级工程师梁堰波解析了该版本中的众多新特性,同时梁堰波也是QCon上海《基于大数据的机器学习技术》专题的讲师,他将分享《基于机器学习的银行卡消费数据预测与推荐》的专题演讲。

\\

DataFrame执行后端优化(Tungsten第一阶段)

\\

DataFrame可以说是整个Spark项目最核心的部分,在Spark 1.5这个开发周期内最大的变化就是Tungsten项目的第一阶段已经完成。主要的变化是由Spark自己来管理内存而不是使用JVM,这样可以避免JVM GC带来的性能损失。内存中的Java对象被存储成Spark自己的二进制格式,计算直接发生在二进制格式上,省去了序列化和反序列化时间。同时这种格式也更加紧凑,节省内存空间,而且能更好的估计数据量大小和内存使用情况。如果大家对这部分的代码感兴趣,可以在源代码里面搜索那些Unsafe开头的类即可。在1.4版本只提供UnsafeShuffleManager等少数功能,剩下的大部分都是1.5版本新加入的功能。

\\

其它优化还包括默认使用code generation,cache-aware算法对join、aggregation、shuffle、sorting的增强,window function性能的提高等。

\\

那么性能到底能提升多少呢?可以参考DataBricks给出的这个例子。这是一个16 million行的记录,有1 million的组合键的aggregation查询分别使用Spark 1.4和1.5版本的性能对比,在这个测试中都是使用的默认配置。

\\

35748d195e3e9fd89695010e28d75f85.png

\\

那么如果我们想自己测试下Tungsten第一阶段的性能改如何测试呢?Spark 1.4以前的版本中spark.sql.codegen, spark.sql.unsafe.enabled等几个参数在1.5版本里面合并成spark.sql.tungsten.enabled并默认为true,只需要修改这一个参数就可以配置是否开启tungsten优化(默认是开启的)。

\\

DataFrame/SQL/Hive

\\

在DataFrame API方面,实现了新的聚合函数接口AggregateFunction2以及7个相应的build-in的聚合函数,同时基于新接口实现了相应的UDAF接口。新的聚合函数接口把一个聚合函数拆解为三个动作:initialize、update、merge,然后用户只需要定义其中的逻辑既可以实现不同的聚合函数功能。Spark的这个新的聚合函数实现方法和Impala里面非常类似。

\\

Spark内置的expression function得到了很大的增强,实现了100多个这样的常用函数,例如string、math、unix_timestamp、from_unixtime、to_date等。同时在处理NaN值的一些特性也在增强,例如 NaN = Nan 返回true;NaN大于任何其他值等约定都越来越符合SQL界的规则了。
\用户可以在执行join操作的时候指定把左边的表或者右边的表broadcast出去,因为基于cardinality的估计并不是每次都是很准的,如果用户对数据了解可以直接指定哪个表更小从而被broadcast出去。
\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.2的metastore。

\\

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

\\

由于Parquet升级到1.7,原来的一个重要bug被修复,所以Spark SQL的Filter Pushdown默认改为开启状态(spark.sql.parquet.filterPushdown=true),能够帮助查询过滤掉不必要的IO。

\\

Spark 1.5可以通过指定spark.sql.parquet.output.committer.class参数选择不同的output committer类,默认是org.apache.parquet.hadoop.ParquetOutputCommitter,用户可以继承这个类实现自己的output committer。由于HDFS和S3这两种文件存储系统的区别,如果需要向S3里面写入数据,可以使用DirectParquetOutputCommitter,能够有效提高写效率,从而加快Job执行速度。

\\

另外还有一些改动,包括:StructType支持排序功能,TimestampType的精度减小到1us,Spark现在的checkpoint是基于HDFS的,从1.5版本开始支持基于memory和local disk的checkpoint。这种类型的checkpoint性能更快,虽然不如基于HDFS的可靠,但是对于迭代型机器学习运算还是很有帮助的。

\\

机器学习MLlib

\\

MLlib最大的变化就是从一个机器学习的library开始转向构建一个机器学习工作流的系统,这些变化发生在ML包里面。MLlib模块下现在有两个包:MLlib和ML。ML把整个机器学习的过程抽象成Pipeline,一个Pipeline是由多个Stage组成,每个Stage是Transformer或者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]]来存储pi和theta,而在ML下面新的API里面使用的是Vector和Matrix来存储。从这也可以看出,新的ML框架下所有的数据源都是基于DataFrame,所有的模型也尽量都基于Spark的数据类型表示。在ML里面的public API下基本上看不到对RDD的直接操作了,这也与Tungsten项目的设计目标是一致的。

\\

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

\\
  • \\t

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

    \\t\\t
  • \\t

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

    \\t\\t
  • \\t

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

    \\t\

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

\\
  • \\t

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

    \\t\\t
  • \\t

    RandomForestClassificationModel和RandomForestRegressionModel模型都支持输出feature importance

    \\t\\t
  • \\t

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

    \\t\\t
  • \\t

    对于LinearRegressionModel和LogisticRegressionModel实现了LinearRegressionTrainingSummary和LogisticRegressionTrainingSummary用来记录模型训练过程中的一些统计指标。

    \\t\

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

\\

其他

\\

从Spark 1.5开始,Standalone、YARN和Mesos三种部署方式全部支持了动态资源分配。SparkR支持运行在YARN集群上,同时DataFrame的函数也提供了一些R风格的别名,可以降低熟悉R的用户的迁移成本。
\在Streaming和Graphx方面也有非常大的改进,在这里不在一一赘述,详细可以参考发布说明。

\\

感谢郭蕾对本文的审校。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js正则表达exec和match的区别(转)

转自:http://blog.csdn.net/fushou/article/details/6934608 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多,很少有研究,拿来即用。 最近开发遇到一些需要使用正则表达式&#…

微软推出免费在线系统诊断工具--不用手动下载

在运行框中输入以下地址:\\live.sysinternals.com,所有工具都在Tools下,Files目录有可供下载的压缩包。。Microsoft Corp. has launched a beta service that lets Windows users launch the Sysinternals library of free diagnostic and tr…

开源软件

邮件服务器: Postfixftp服务器: vsftpd统计: nginx access log awstats 统计: google统计 google分析 腾讯分析 分布式锁及配置管理:Zookeeper php框架:thinkphp运维监控: cacti数据同步&#…

cad.net 获取所有已经安装的cad版本信息

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\Hardcopy 转载于:https://www.cnblogs.com/JJBox/p/11381254.html

Restangular的使用

2019独角兽企业重金招聘Python工程师标准>>> // First way of creating a Restangular object. Just saying the base URL var baseAccounts Restangular.all(accounts); // This will query /accounts and return a promise. baseAccounts.getList().then(functio…

浅析数据质量检查

What are the four broad categories of data quality checks? Provide an implementation technique for each. 数据质量检查的四大类是什么?为每类提供一种实现技术。 答:数据质量检查是ETL工作中非常重要的一步,主要关注一下四个方面。 1…

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法

在用dw.GetSqlSelect()获得到的Sql语句出现PBSELECT( VERSION的解决办法: 把数据窗口的数据源转换到syntax模式下就行了 ! 转载于:https://www.cnblogs.com/Tonyyang/archive/2008/06/03/1212689.html

刚发现的2011年最给力的春联

上联:房价涨.地价涨.油价涨.电价涨.水价涨.粮价涨.肉价涨.蛋价涨.菜价涨.药价涨.这也涨.那也涨.怎一个涨字了得.涨了还涨。 下联:上学难.参军难.就业难.买房难.租房难.择偶难.结婚难.育儿难.就医难.养老难.男也难.女也难.看世间难字当头.难上加难 横批:活…

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题

SQL Server的镜像是基于物理块变化的复制 镜像Failover之后数据的预热问题 基于物理块变化的复制,没有并行也是很快的。 逻辑复制的日志是按事务结束的时间排序的,而物理复制是与事务无关的,只要发生了改变,就可以立即传送到备库&…

VSS不需要验证自动登录的问题

新项目要开始了,搭建好开发环境以及项目框架后,遇到第一个问题就是我自己的机子打开VS不需要登陆VSS就直接打开了解决方案,而其他的同事则没有遇到这样的情况,于是搜索了下原因,发现是设置问题: 1,在VSS管理器中》工具》选项》允许网络用户名自动登录 这个选项去掉 …

说说“开源杀死商业开发工具”

今天在Solidot看到一条很有意思的短文,标题是“开源杀死商业开发工具”,其文如下: UNA,源自拉丁形容词“together”,是一种协作式的实时源代码开发环境,允许两个或更多的开发者同时编辑相同的代码。支持大部…

ubuntu22.04 安装vscode

安装 Visual Studio Code(VSCode)在 Ubuntu 22.04 系统上是一个简单的过程。以下是步骤指南: 更新系统软件包列表: 打开终端,并执行以下命令来更新您的系统软件包列表: sudo apt update安装依赖包&#xff…

(转)一篇令所有游戏圈的兄弟汗颜的文章

一篇让我看了一个小时的文章,看到了自己的粗浅,有些问题也许只有加入游戏行业了才更有体会1、无休止的抄袭回想起上个世纪末,华人游戏圈还处于原始阶段,那时候随便竖几条枪占个山头就敢说自己是做游戏的,拿出来的东西勉…

mybatis学习教程中级(十)mybatis和ehcache缓存框架整合(重点)

1、前言 前面讲解了mybatis的一级、二级缓存。一级然并卵(spring整合后),二级还是有用的。我们现在来看看用ehcache来维护管理二级缓存。不要问我为什么,因为都这么用!!!java是框架语言&#x…

八、开发者工具和指南(四) Orchard dependencies and libraries

本文列举了Orchard项目中的依赖,和Orchard使用它们的简介.依赖的副本在源码库的lib目录中,包含了它们各自的licenses,也能在CREDITS.txt文件中看到它们的归属. Akismet 这是Orchard中的默认的垃圾保护服务. ANTLR v3 这是语言识别工具,提供了构造识别器的框架,解释程序,编译器和…

如何使用三态工作流 - [MOSS 2007应用日记]

MOSS 2007的一个很重要的功能就是提供了工作流,让我们可以结合工作流来实现各种需求,系统提供了几种默认的工作流供大家使用,“三态工作流”就是默认的一种。 现在通过一个模拟实验来看看怎么使用“三态工作流”:在行政部子网站下…

微信小程序遍历wx:for,wx:for-item,wx:key

微信小程序中wx:for遍历默认元素为item,但是如果我们设计多层遍历的时候我们就需要自定义item的字段名以及key的键名 wx:for"{{item.goodsList}}" wx:for-item"ite" wx:for-key"idx" wx:key"{{idx}}" 这样子元素就被设置成…

Linux下samba服务的错误处理

错误显示:解决方法:在/etc/samba/smb.conf 文件里有一行自己修改过hosts allow 192.168.x.x x.x.x.x在这里加上自己的充当客户端主机的ip地址即可转载于:https://blog.51cto.com/luochen2015/1693712

[POJ2420 A Star not a Tree?]

[关键字]:随机化搜索 模拟退火 [题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离。 // [分析]:同样是随机化的方法,只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后…

推荐:iReaper - MSDN中文Webcast下载程序

看MS的webcast还真是麻烦,我混了这么久,都没搞清楚,这东西在MS那里怎么看的.老是想看,但不知道怎么进去看.但用这个小软件下载看,就很方便.http://myron.cnblogs.com/ 转载于:https://www.cnblogs.com/shiningrise/archive/2008/06/15/1222270.html