Spark调优、Checkpoint机制、Spark懒执行、共享变量、解决数据倾斜问题

Spark调优

更好的序列化实现

Spark用到序列化的地方
1)Shuffle时需要将对象写入到外部的临时文件。
2)每个Partition中的数据要发送到worker上,spark先把RDD包装成task对象,将task通过网络发给worker。
3)RDD如果支持内存+硬盘,只要往硬盘中写数据也会涉及序列化。

默认使用的是java的序列化。但java的序列化有两个问题,一个是性能相对比较低,另外它序列化完二进制的内容长度也比较大,造成网络传输时间拉长。业界现在有很多更好的实现,如kryo,比java的序列化快10倍以上。而且生成内容长度也短。时间快,空间小,自然选择它了。

方法一:修改spark-defaults.conf配置文件
设置:
spark.serializer org.apache.spark.serializer.KryoSerializer

注意:用空格隔开
方法二:启动spark-shell或者spark-submit时配置
–conf spark.serializer=org.apache.spark.serializer.KryoSerializer

方法三:在代码中
val conf = new SparkConf()
conf.set(“spark.serializer”,“org.apache.spark.serializer.KryoSerializer”)

三种方式实现效果相同,优先级越来越高。

通过代码使用Kryo

文件数据:
rose 23
tom 25

Person类代码:

class Person(var1:String,var2:Int) extends Serializable{
var name=var1 var age=var2
}

MyKryoRegister类代码:

import org.apache.spark.serializer.KryoRegistrator import com.esotericsoftware.kryo.Kryo
class MyKryoRegister extends KryoRegistrator { def registerClasses(kryo: Kryo): Unit = { kryo.register(classOf[Person])
}
}

KryoDriver代码:

import org.apache.spa
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值