序列化

spark调优

徘徊边缘 提交于 2020-03-07 19:15:04
1.分配更多的资源     它是性能优化调优的王道,就是增加和分配更多的资源,这对于性能和速度上的提升是显而易见的, 基本上,在一定范围之内,增加资源与性能的提升,是成正比的;写完了一个复杂的spark作业之后,进行性能调 优的时候,   首先第一步,就是要来调节优的资源配置;在这个基础之上,如果说你的spark作业,能够分配的资源达到 了你的能力范围的顶端之后,无法再分配更多的资源了,公司资源有限;那么才是考虑去做后面的这些性能调优的点。 2.参数调节到多大才算大      第一种情况:standalone模式 先计算出公司spark集群上的所有资源 每台节点的内存大小和cpu核数, 比如:一共有20台worker节点,每台节点8g内存,10个cpu。 实际任务在给定资源的时候,可以给20个executor、   每个executor的内存8g、每个executor的使用的cpu个数 10。 第二种情况:Yarn 先计算出yarn集群的所有大小,比如一共500g内存,100个cpu; 这个时候可以分配的大资源,比如给定50个executor、每个executor的内存   大小10g,每个executor使用的cpu 个数为2。 使用原则:你能使用的资源有多大,就尽量去调节到大的大小(executor的数量:几十个到上百个不等;executor的 内存;exector的cpu个数

Java 序列化机制

懵懂的女人 提交于 2020-03-07 19:11:54
一、为什么要序列化? 1、一般情况下,只有当 JVM 处于运行时,Java 对象才可能存在,即这些对象的生命周期不会比 JVM 的生命周期更长。但在现实应用中,就可能要求在 JVM 停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java 对象序列化就能够帮助我们实现该功能。 2、在网络或者进程通信中传递对象时,我们都需要使用序列化将 Java 对象转换为字节序列传输,具体表现为:发送数据前序列化对象,接收数据后反序列化对象。 二、序列化是什么? 序列化指的是允许将实现序列化的 Java 对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。 通俗易懂的讲,Java 序列化是指把 Java 对象转换为字节序列的过程,而 Java 反序列化是指把字节序列恢复为 Java 对象的过程。 三、Java 序列化机制 1.使用 Serializable 接口实现序列化 在 Java 中, 只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。 @Data public class UserA implements Serializable { /** * 序列化ID */ private static final long

(三)序列化与反序列化

会有一股神秘感。 提交于 2020-03-07 14:27:35
什么是序列化与反序列化? 序列化是将Java对象转换成与平台无关的二进制流,而反序列化则是将二进制流恢复成原来的Java对象,二进制流便于保存到磁盘上或者在网络上传输。 如何实现序列化与反序列化? 如果想要序列化某个类,就需要让该类实现Serializable接口或者Externalizable接口。 如果实现Serializable接口,由于该接口只是个"标记接口",接口中不含任何方法,序列化是使用ObjectOutputStream(处理流)中的writeObject(obj)方法将java对象输出到输出流中的,反序列化是使用ObjectInputStream中的readObject(in)方法将输入流中的Java对象还原出来。 实践 1.通过实现Serializable接口进行序列化与反序列化 public class Person implements Serializable { private String name; private int age; //此处没有提供无参的构造函数 public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String

序列化接口的id的作用

戏子无情 提交于 2020-03-07 05:15:38
对象经常要通过 IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘, Person->“zxx,male,28,30000”Person,既然大家都要这么干,并且没有个统一的干法,于是, sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明( transparent)的,但是,我们的某个类要想能被 sun的这种方案处理,必须实现 Serializable接口。 ObjectOutputStream.writeObject(obj); Object obj = ObjectInputStream.readObject(); 假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知! sun的 jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错 !   简单来说, Java 的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类

Java序列化

社会主义新天地 提交于 2020-03-07 04:42:02
简要解释:  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。  序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。详细解释: 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以 二进制序列 的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。   只能将支持 java.io.Serializable 接口的对象写入流中。 每个 serializable 对象的类都被编码,编码内容包括类名和类签名、对象的字段值和数组值,以及从初始对象中引用的其他所有 对象的闭包 。 1.概念   序列化:把Java对象转换为字节序列的过程。

Java序列化的理解与学习

妖精的绣舞 提交于 2020-03-07 04:39:26
1.什么是Java序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列 化就能够帮助我们实现该功能。 必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。 所谓序列化其实就是将程序中的数据(对象)通过某种方式,保存到本地中。然后把Java对象转换为字节序列的过程称为对象的序列化。就像你寄一箱饼干,因为体积太大,就全压成粉末紧紧地一包寄出去,这就是序列化的作用。只不过JAVA的序列化是可以完全还原的。 2.什么情况下需要用到Java序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI传输对象的时候; 3.序列化实例 SimpleSerial,是一个简单的序列化程序,它先将一个Person对象保存到文件person.out中,然后再从该文件中读出被存储的Person对象,并打印该对象。 public class SimpleSerial { public static void main(String[]

java对象序列化的理解

回眸只為那壹抹淺笑 提交于 2020-03-07 04:36:57
1.java中的序列化时transient变量(这个关键字的作用就是告知JAVA我不可以被序列化)和静态变量不会被序列 化(下面是一个测试的例子) (实体带versionUUID,便于反序列化时不会报错。) 2.也是最应该注意的,如果你先序列化对象A后序列化B,那么在反序列化的时候一定记着JAVA规定先读到的对象 是先被序列化的对象,不要先接收对象B,那样会报错.尤其在使用上面的Externalizable的时候一定要注意读取 的先后顺序。 3.实现序列化接口的对象并不强制声明唯一的serialVersionUID,是否声明serialVersionUID对于对象序列化的向 上向下的兼容性有很大的影响 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性 一般实体化序列化的目的有两个,第一个是便于存储,第二个是便于传输。只有将类序列化,才能够针对该类进行读写操作 第一:存储媒体里面,是否是有其相对应的 数据结构 ? 第二:这个实体类,是否需要远程传输(或者两个不同系统甚至是分布式模块之间的调用,针对nosql)? 使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。 除了在持久化对象时会用到对象序列化之外

java反序列化原理-Demo(一)

泄露秘密 提交于 2020-03-07 02:23:11
java反序列化原理-Demo(一) 0x00 什么是java序列化和反序列? Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。 Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。 0x01 java反序列漏洞原理分析 首先先定义一个user类需继承Serializable package test; import java.io.IOException; import java.io.Serializable; public class user implements Serializable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 编写一个测试类,生成一个user对象,将其序列化后的字节保存在硬盘上,然后再读取被序列化后的字节,将其反序列化后输入user的name属性 package test; import java.io

RedisTemplate用法详解

吃可爱长大的小学妹 提交于 2020-03-06 17:37:43
前言 Redis可以存储键与5种不同的数据结构类型之间的映射,这5种数据结构类型为 String(字符串)、List(列表)、Set(集合)、Hash(散列)和Zset(有序集合)。 Spring-data-redis Spring-data-redis是spring大家族的一部分,提供了在spring应用中通过简单的配置访问redis服务,对redis底层开发包(Jedis,JRedis,and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。 官网:http://projects.spring.io/spring-data-redis/ 项目地址:https://github.com/spring-projects/spring-data-redis Spring-data-redis功能介绍 jedis客户端在编程实施方面存在如下不足: 1、connection管理缺乏自动化,connection-pool的设计缺少必要的容器支持。 2、数据操作需要关注“序列化”/“反序列化”,因为jedis的客户端API接受的数据类型为string和byte,对结构化数据(json,xml,pojo等)操作需要额外的支持。 3、事务操作纯粹为硬编码。 4、pub/sub功能

Laravel5.7反序列化RCE漏洞分析

坚强是说给别人听的谎言 提交于 2020-03-06 16:45:54
前言 以前只是粗略的知道反序列化漏洞的原理,最近在学习Laravel框架的时候正好想起以前收藏的一篇反序列化RCE漏洞,借此机会跟着学习一下POP链的挖掘 简介 Laravel是一个使用广泛并且优秀的PHP框架。这次挖掘的漏洞Laravel5.7版本,该漏洞需要对框架进行二次开发才能触发该漏洞 本地环境 Laravel5.7.28 Wamper64+PHP7.3.5(PHP >= 7.1.3) 环境准备 使用composer部署Laravel项目 创建一个名为laravel的Laravel项目 composer create-project laravel/laravel=5.7.* --prefer-dist ./ Laravel框架为单入口,入口文件为 {安装目录}/public/index.php ,使用apache部署后访问入口文件显示 Laravel欢迎界面 即安装成功(或者使用命令 php artisan serve 开启临时的开发环境的服务器进行访问) 配置路由以及控制器 Laravel所有的用户请求都由路由来进行控制。我们添加一条如下的路由 <?php use \ Illuminate \ Support \ Facades \ Route ; /* |---------------------------------------------------------