1.使用spark-submit的方式提交java任务
例如spark-submit --class aa.bb --master yarn --deploy-mode client --queue cc XXX.jar 。
指定queue是在spark-submit里面指定,在java代码里面通过spark.conf().set("queue", "cc") 的方式指定没有用。
在 yarn client模式下,通过--name demotest的方式指定的appname不会生效,在java代码中指定的appname才会生效。
在yarn cluster模式下,通过--name demotest的方式指定的appname会生效
2.java代码创建SparkSession,
SparkSession spark = SparkSession.builder().appName("demo") .config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate();
3.性能分析,在使用spark-submit提交java任务的过程中,
spark-submit是一个性能损耗,例如你可以把原来提交2个spark-submit的任务,在代码中把2个任务融合成一个,使用1个spark-submit提交。
还有一个性能损耗是java代码中build sparksession的过程,你可以把多个任务改写成使用同一个sparksession,所有任务执行完毕后再stop。如果你在一个for循环里面build sparksession,性能损耗远远大于在for循环外build sparksession。大家在写代码的时候需要注意,如果你的spark 任务很多这个时候就需要考虑性能问题了
4.关于queue。如果你的spark任务没有指定queue,默认是default。实际测试中,例如大家都把任务指定到了一个a队列,a队列任务在跑,然后新任务来了一个,一个default队列任务b,a队列任务c,b早于c先来。那么实际上c执行完了,b都还没执行。只要a
队列不断有新任务来,那么就优先执行a队列任务。