文档章节

spark2.0新特性

曾晓森
 曾晓森
发布于 2016/09/18 12:20
字数 896
阅读 264
收藏 1

使用:

离线计算:数据源大多来自hdfs(hive),所以sql使用的非常多,几乎每个离线计算作业都会用到hivecontext或sqlcontext

实时计算:streaming模块

图计算在企业里用的很少,需求少

数据挖掘包mllib的使用比图计算略多,但里面的算法不是很好用,目前需求少

新特性:

1,用sparksession实现hivecontext和sqlcontext统一

2,whole-stage code generation,大幅提高计算性能,因为把物理计划变成硬编码,每秒处理的sql中的数据量增加十倍,即对物理执行的多次调用转化为代码for循环,蕾丝hardcode方式,减少执行的函数调用次数,当数据记录多时,这个调用次数时很大的。

3,合并dataframe和datasets,1.6的dataset包含了dataframe的功能,这样两者存在很大冗余,所以2.0将两者统一,保留dataset api,把dataframe表示为dataset[Row],即dataset的子集。dataframe是sql查询结果rdd的抽象类,相当于java里的resultset。

4,结构化流计算,sparkstreaming是把流计算看成一个一个的离线计算来完成流计算,提供一套dstream的流api,相比其他的流计算,sparkstreaming的优点是容错行和吞吐量上有优势,在2.0以前的版本,用户在使用时,如果有流计算,又有离线计算,就需要两套api去编写程序,一套是rddapi,一套是dstream api,而且dstream api在易用性上远不如sql或dataframe。为了真正将流计算和离线计算在编程api上统一,同时也让streaming作业能够享受dataframe/dataset上所带来的优势:性能提升和API易用,于是提出了structed streaming,最后我们只需要基于dataframe/dataset可以开发离线计算和流计算的程序,很容易使得spark在api跟业界所说的dataflow来统一离线计算和流计算效果一样。比如在做batch聚合时我们可以写成下面代码:

logs = ctx.read.format("json").open("s3://logs")

logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").save("jdbc:mysql//...")

那么对于流计算时,我们仅仅是调用了dataframe/dataset的不同函数代码,如下:

logs = ctx.read.format("json").stream("s3://logs")

logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").stream("jdbc:mysql//...")

5,sql优化,增加了以前很多不支持的sql语句

6,采用vectorized Parquet decoder读取parquet上数据,以前是一行一行的读取,然后处理,现在改为一次读取4096行记录,不需要没处理一行纪录去调用一次parquet获取记录的方法,而是改为一批去调用一次(spark-12854) 。加上parquet本身是列存储,这个优化使得parquet读取速度提高三倍

采用radix sort提高sort的性能(spark-14724)。在某些情况下排序性能可以提高10~20倍

使用vectorizedhashmap来代替java的hashmap加速groupby的执行

将hive中的window函数用native spark window实现,因为native spark window在内存管理上有优势

避免复杂语句中的逻辑相同部分在执行时重复计算

压缩算法默认使用lz4

mllib里的计算用dataframe-based api代替以前的rdd计算逻辑

提供更多的r语言算法

使用scala-2.11编译运行

在和旧版本的兼容方面,将hive语句解析以及语法移动到core里,在没有hive原数据库和hive依赖包时,我们可以像以前版本使用标准sql一样去使用hivesql语句。

 

 

 

 

 

© 著作权归作者所有

曾晓森
粉丝 0
博文 1
码字总数 896
作品 0
北京
程序员
私信 提问
Spark 2.0

目前主流Hadoop分布式提供商都已经把Spark加入他们的核心产品组成了,Spark作为针对MapReduce的替代品获得了很多关注。(MapReduce是Hadoop原生大数据分析数据处理引擎)。这种势头在去年底得到...

莫问viva
2016/08/12
108
0
CDH5.12.0 如何升级到Spark2.0 版本

CDH5.12.0 如何升级到Spark2.0 版本 标签(空格分隔): 大数据平台构建 一: CDH5.12.0 的spark2.0 的概述: http://archive.cloudera.com/spark2/csd/ http://archive.cloudera.com/spark2...

flyfish225
2018/05/18
0
0
北风网Spark2.0视频054.用户访问session分析-top10活跃session之分的项目代码谁有呀?求

北风网Spark2.0视频054.用户访问session分析-top10活跃session之分 北风网Spark2.0视频054.用户访问session分析-top10活跃session之分的项目代码谁有呀?求 没空看视频呀...

天池番薯
2017/08/10
39
0
java写Spark程序之PairFaltMapFunction

PairFaltMapFunction 类似java8的flatmap方法,会返回一个value为集合的map. 在这里需要注意的是实现PairFaltMapFunction Java版本 spark2.0以下 JavaPairRDD<String, Integer> wordPairRDD......

那年的暖风
2018/10/19
19
0
2016 | 大数据平台类产品资讯汇总

InfoSphere Streams 平台支持流数据的实时处理,支持不断更新持续查询的结果,可在移动的数据流中检测洞察。 InfoSphere Streams——实时大数据分析平台 Streams V4.2新特性:支持使用 Pyth...

勿忘初心321
2016/11/25
23
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部