spark使用KryoRegistrator java代码示例
2015-09-09 11:06
543 查看
spark使用KryoRegistrator java代码示例
转载引用自:/article/5670116.html最近在使用spark开发过程中发现当数据量很大时,如果cache数据将消耗很多的内存。为了减少内存的消耗,测试了一下 Kryo serialization的使用
代码包含三个类,KryoTest、MyRegistrator、Qualify。
我们知道在Spark默认使用的是Java自带的序列化机制。如果想使用Kryo serialization,只需要添加KryoTest类中的红色部分,指定spark序列化类
另外还需要增加MyRegistrator类,注册需要用Kryo序列化的类
public class KryoTest { public static void main(String[] args) { SparkConf conf = new SparkConf(); conf.setMaster("local"); conf.setAppName("KryoTest"); conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"); conf.set("spark.kryo.registrator", "MyRegistrator"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> rdd = sc.textFile("/home/hdpusr/qualifying.txt"); JavaRDD<Qualify> map = rdd.map(new Function<String, Qualify>() { /* (non-Javadoc) * @see org.apache.spark.api.java.function.Function#call(java.lang.Object) */ public Qualify call(String v1) throws Exception { // TODO Auto-generated method stub String s[] = v1.split(","); Qualify q = new Qualify(); q.setA(Integer.parseInt(s[0])); q.setB(Long.parseLong(s[1])); q.setC(s[2]); return q; } }); map.persist(StorageLevel.MEMORY_AND_DISK_SER()); System.out.println(map.count()); } }
import org.apache.spark.serializer.KryoRegistrator; import com.esotericsoftware.kryo.Kryo; public class MyRegistrator implements KryoRegistrator{ /* (non-Javadoc) * @see org.apache.spark.serializer.KryoRegistrator#registerClasses(com.esotericsoftware.kryo.Kryo) */ public void registerClasses(Kryo arg0) { // TODO Auto-generated method stub arg0.register(Qualify.class); } }
import java.io.Serializable; public class Qualify implements Serializable{ int a; long b; String c; public int getA() { return a; } public void setA(int a) { this.a = a; } public long getB() { return b; } public void setB(long b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } }
下面我们看看使用Java serialization 与Kryo serialization的效果对比
Java serialization
Kryo serialization
从实际跑的数据可以看出还是能节省不少内存的。当内存不够用的时候建议使用Kryo serialization这种方式
标签: spark kryo registrator
相关文章推荐
- Eclipse打JAR包,插件FatJar安装与使用
- Eclipse下导入外部jar包的3种方式
- Java知识总结----队列的使用(八)
- java常见内存溢出(OOM)
- Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)
- java类加载器的秘密
- spring ioc参数注入报错
- Java并发编程:Lock和Synchronized
- Spring Task 应用的简单说明
- SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(上)
- Struts2的ModelDriven机制
- java数据类型
- Spring整合JMS(二)——三种消息监听器
- spring mvc controller类方法的示例
- JAVA文件锁之保证仅有一个实例运行
- Java 文件或者文件夹的复制
- Java线程同步中的wait()和notify()使用简单示例
- Java输入输出
- java springMVC jsp页面时间规范显示、页面无缓存、session读写以及后台增加跳转集锦
- 在Eclipse中设置中文JavaDOC