1.spark可以采用注册的方式将类序列化,在spark程序中,如果使用的第三方jar包的class没有序列化,可以用写一个MyRegistretor类,继承KryoRegistretor,重写其中的registerClass方法,将需要注册的类写入:
class HbaseRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable])
kryo.register(classOf[org.apache.hadoop.hbase.client.Result])
}
}
2.官网介绍的序列化方法:
val conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)
spark参数优先度(顺序代表优先度高低):
1.通过类SparkContext设置的参数。
2.使用
spark-submit
or spark-shell
的时候,设置在执行脚本的时候的参数,例如 ./bin/spark-submit --class my.main.Class \
--master yarn-cluster \
--jars my-other-jar.jar,my-other-other-jar.jar
my-main-jar.jar
app_arg1 app_arg2
这类在spark-submit中的参数。
3.设置在 spark-defaults.conf中的参数,个别运行参数设置在spark-env.sh
spark源码中文件:
./docs/_layouts/global.html中有详细的参数说明,这个文件要用ie打开