spark 使用kryo
来源:互联网 发布:c语言面试题 csdn下载 编辑:程序博客网 时间:2024/05/18 18:53
kryo vs nokryo
背景
我今天突发奇想,说测一下kryo如果没有注册会咋样,结果发现没有注册的Kryo性能低于直接使用java.io.Serializable
读取速度
源数据: 42903237条记录 907M
存储成本
spark task : 122
在这个测试类一共有122个task,用kryo在全程都没出现空间不足,如果没使用注册,不到20个task就出现了内存不足,在完全不使用kryo的情况下大概会在50个task的时候出现
如何使用kryo
- 需要序列化的类继承
java.io.Serializable
- 注册类继承
KryoRegistrator
并且注册那些需要序列化的类 - 在
sparkConf
中设置spark.serializer
和spark.kryo.registrator
测试数据源:
1 \N 男 \N2 \N 女 \N3 \N 女 \N4 \N 男 \N5 \N 保密 \N
对应的case class
:
/** * Created by todd.chen on 5/23/16. * email : todd.chen@ximalaya.com */case class UserInfo(id:Long,name:String,gender:String,thirdParty:String) extends java.io.Serializable
性能测试代码
package com.ctao.test.kryoimport org.apache.spark.storage.StorageLevelimport org.apache.spark.{SparkConf, SparkContext}/** * Created by todd.chen on 5/23/16. * email : todd.chen@ximalaya.com */object KryoTest { def main(args: Array[String]) { val start = System.currentTimeMillis() val conf = new SparkConf().setMaster("local[*]").setAppName("kryoTest") .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") .set("spark.kryo.registrator", "com.ctao.test.kryo.MyRegisterKryo") val sc = new SparkContext(conf) val userInfo = sc.textFile("/Users/cjuexuan/data/user_info").map(line ⇒ line.split("\t")).map(user ⇒ UserInfo(user(0).toLong, user(1), user(2), user(3))) userInfo.persist(StorageLevel.MEMORY_AND_DISK_SER) println(userInfo.count()) println(System.currentTimeMillis() - start) sc.stop() }}
package com.ctao.test.kryoimport com.esotericsoftware.kryo.Kryoimport org.apache.spark.serializer.KryoRegistrator/** * Created by todd.chen on 5/23/16. * email : todd.chen@ximalaya.com */class MyRegisterKryo extends KryoRegistrator { override def registerClasses(kryo: Kryo): Unit = { kryo.register(classOf[UserInfo]) }}
日志整理类:
import org.apache.spark.{SparkConf, SparkContext}/** * Created by todd.chen on 5/23/16. * email : todd.chen@ximalaya.com */object FilterLog { def main(args: Array[String]) { val input = args(0) val conf = new SparkConf().setMaster("local[*]").setAppName("filterLog") val sc = new SparkContext(conf) sc.textFile(input) .map(_.split(" ")) .filter(_.length > 3) .filter(x ⇒ x(3) == "MemoryStore:" || x(3) == "BlockManagerInfo:").map(_.mkString(" ")) .collect().foreach(println) sc.stop() }}
参考资料:浅谈Spark Kryo serialization
0 0
- spark 使用kryo
- [Spark优化]在Spark中使用Kryo序列化
- 使用Kryo
- spark性能调优之使用Kryo序列化
- Spark---性能调优之使用Kryo序列化
- 使用kryo序列化
- Spark性能调优之——在实际项目中使用Kryo序列化
- Spark性能调优:使用Kryo序列化库、RDD的压缩
- Spark的Kryo序列化注册
- Kryo
- 在Spark中自定义Kryo序列化输入输出API
- 在Spark中自定义Kryo序列化输入输出API
- Spark Q&A : Kryo serialization failed: Buffer overflow
- Java 序列化--- Kryo使用简单例子
- spark解决 org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
- spark解决org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
- 使用kryo作为spring data redis的序列化器
- 使用kryo进行序列化各种异常分析解决
- ural 1152 搜索或状压
- Java aidl分析
- nyoj 1242 Interference Signal 河南省ACM2015年省赛G题
- C++ 流操作(531 --)
- mysql优化20条
- spark 使用kryo
- 定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的“基础工程”)。扩展+、-、*、/运算符的功能,使之能与double型数据进行运算。设Complex c; double d; c+d和
- maven搭建ssm分模块框架+dubbo (myeclipse版) (三)
- 面试总结一
- apache 常用的两种工作模式和区别
- Android_Async_Http(1)—get请求和带参数请求
- c++作业6
- 开篇
- 首次使用Android Studio遇到的问题