spark
cyony
遇见更好的自己
展开
-
Spark自定义RDD重分区
在某些计算场景中,我们可能需要将两个有关联的数据输入的部分数据,也就是说RDD中的部分数据,需要聚合在同一个partition进行匹配计算,这个时候,我们就需要根据实际的业务需求,自定义RDD重分区。下面结合代码,看看具体怎么实现重分区,spark内部提供了一个分区抽象类Partitioner:package org.apache.spark/** * An object that d...原创 2017-06-26 14:45:54 · 2671 阅读 · 0 评论 -
Spark数据结构优化
要减少内存的消耗,除了使用高效的序列化库以外,还有一个很重要的事情,就是优化数据结构。从而避免Java语法特性中所导致的额外内存的开销,比如基于Java数据结构,以及包装类型。原创 2017-08-09 15:57:33 · 450 阅读 · 0 评论 -
Java虚拟机垃圾回收调优
GC对性能的影响在于,如果内存中数据量比较大的话,那么可能会造成GC频繁的发生,另外如果要回收的数据量特别大,那么会导致GC的速度也比较慢。gc线程工作时,会让程序中的task线程暂停工作,那么整个应用程序的性能就会大打折扣。原创 2017-08-10 09:52:55 · 600 阅读 · 0 评论 -
Spark之shuffle性能优化
一 开启consolidation机制 spark.shuffle.consolidateFiles,这个参数默认为false,设置为true后,shuffle的性能将得到极大的提升。在没有开启开启consolidation机制的时候,shuffle write的性能是比较低下的,而且会直接影响shuffle read的性能。因为在shuffle map端创建的文件太多了,导致shuffl...原创 2017-08-30 14:47:19 · 599 阅读 · 0 评论 -
Spark核心RDD:combineByKey函数详解
为什么单独讲解combineByKey?因为combineByKey是Spark中一个比较核心的高级函数,其他一些高阶键值对函数底层都是用它实现的。诸如 groupByKey,reduceByKey等等如下给出combineByKey的定义,其他的细节暂时忽略(1.6.0版的函数名更新为combineByKeyWithClassTag)[java] view转载 2017-10-11 15:11:23 · 282 阅读 · 0 评论 -
Spark Streaming 流计算状态管理
spark流计算的数据是以窗口的形式,源源不断的流过来的。如果每个窗口之间的数据都有联系的话,那么就需要对前一个窗口的数据做状态管理。spark有提供了两种模型来达到这样的功能,一个是updateStateByKey,另一个是mapWithState ,后者属于Spark1.6之后的版本特性,性能是前者的数十倍。 updateStateByKey 通过源码查看发现,这个模型的核...原创 2018-03-22 15:27:15 · 3725 阅读 · 0 评论 -
parquet研究及与spark的联合使用
这段时间因为项目,对parquet做了一系列研究,从写入跟踪到合并及spark使用等等场景。 选择parquet来对流数据进行序列化,用于后续离线分析的理由有以下几点: 1、流数据一般格式比较杂乱,可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。 2、网络流量数据量非常的庞大,即使过滤部分,还是非常吓人,parquet压缩编码可以降低磁盘存储空间。由于同一列的...原创 2018-03-19 11:23:26 · 2381 阅读 · 1 评论 -
Spark DataFrame transformation操作报错问题
在Spark2.0之后版本中,当对DataFrame对象进行transformation操作的时候,编译阶段不会报错,但是运行阶段就会抛出异常,提示这样的错误信息:<console>:26: error: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc...原创 2018-03-23 17:22:16 · 559 阅读 · 0 评论 -
SparkStreaming2.2+kafka的偏移量管理
在从kafka接受流式数据的时候,spark提供了两种方式,Dstream和DirectStream,在spark2.2中已经不在提供第一种方式,具体区别这儿就不再描述了,第二种方式spark是用的kafka低阶api,每个RDD对应一个topic的分区,这种情况,需要借助于外部存储来管理offset,或者简单点,自己手动利用kafka来管理offset,否则在程序重启时找不到offset从最新的...原创 2018-08-22 11:16:41 · 2314 阅读 · 1 评论