序列化总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.spark-iocean
conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer");
conf.registerKryoClasses(new Class[] { Record.class, AvroClickDecoder.class });
KafkaUtils.createStream(jsc,String.class, Record.class, StringDecoder.class, clazz,kafkaParams, topicsMap, StorageLevel.MEMORY_AND_DISK_SER_2());
---------------------------------------------------------------------
2. /tovin/p/3833985.html
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.set("spark.kryo.registrator", "MyRegistrator");
-----------------------------------------------------------
3./archives/1143
spark.serializer
默认值是org.apache.spark.serializer.JavaSerializer。用于序列化网络传输或者以序列化形式缓存起来的各种对象的类。默认的Serializer可以对所有的Java对象进行序列化,但是它的速度十分慢!所以如果速度是影响程序运行的关键,你可以将该值设定为org.apache.spark.serializer.KryoSerializer。在一些情况下,KryoSerializer的性能可以达到JavaSerializer的10倍以上,但是相对于JavaSerializer而言,主要的问题是它不能支持所有的Java对象。当然,用户可以直接继承org.apache.spark.serializer来实现自己的Serializer。
spark.kryo.registrator
默认值为空。如果你使用了KryoSerializer,就要为Kryo设置这个类去注册你自定义的类,该类必须继承自KryoRegistrator,实现其中的registerClasses(kryo: Kryo)即可。
kafka.serializer
========================================================================
kryo与java对比:/blog/1913934
==============================================================================
kryo序列化:
秦小娟
----单纯的kryo序列化
Kryo kryo = new Kryo();
kryo.setReferences(false);
kryo.setRegistrationRequired(false);
kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());
//kryo需要注册
kryo.register(Simple.class);
Output output = new Output(new FileOutputStream("file.bin"));
for (int i = 0; i < 1000000; i++) {
Map
map.put("zhang0", i);
map.put("zhang1", i);
kryo.writeObject(output, new Simple("zhang"+i,(i+1),map));
}
output.flush();
output.close();
-----------------
如果是和spark一块用的话:
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.set("spark.kryo.registrator", "MyRegistrator");
或者:
conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer");
conf.registerKryoClasses(new Class[] { Record.class, AvroClickDecoder.class });
、、、、、、、、、、、、AvroSerializer与kafka自己序列化区别
广播变量,如何提前加载到内存数据
=============================================
=============================
serialization是将对象序列化
编码(Encode)/序列化(serialization),将对象序列化为字节数组,用于网络传输、数据持久化或者其它用途。
解码(Decode)/反序列化(deserialization)把从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷贝),以方便后续的业务逻辑操作。
进行远程跨进程服务调用时(例如RPC调用),需要使用特定的编解码技术,对需要进行网络传输的对象做编码或者解码,以便完成远程调用。
======================================================================
java序列化:
/art/201202/317181.htm
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
如果仅仅只是让某个类实现Serializable接口,而没有其它任何处理的话,则就是使用默认序列化机制。使用默认机制,在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化,同样地,这些其它对象引用的另外对象也将被序列化,以此类推。所以,如果一个对象包含的成员变量是容器类对象,而这些容器所含有的元素也是容器类对象,那么这个序列化的过程就会较复杂,开销也较大。
====================================================================================
对从kafka取到得对象进行序列化:
//此处配置的是kafka的端口
props.put("metadata.broker.list", "192.168.193.148:9092");
//配置value的序列化类
props.put("serializer.class", "kafka.serializer.StringEncoder");
//配置key的序列化类
props.put("key.serializer.class", "kafka.serializer.StringEncoder");
例子:
https:///dleung/spark-streaming-kafka-example
将数据进行avro序列化,写入kafka;从kafka读出数据,然后进行avro反序列化【java实现了,scala方式的话,consumer还没有实现】
将数据进行kyro序列化,写入kafka;从kafka读出数据,然后进行avro反序列化【java实现了 】
从kafka取和写入数据,是需要decoder/encoder类进行序列化。
如果是