spark相比hadoop做了很多方面的优化,同时spark的job也支持提交到hadoop的yarn进行处理,同时也有属于自己的一套资源调度框架standalone.同时也支持其他常用的资源调度框架。
-
Spark运行模式
-
Local
多用于本地测试,如在eclipse,idea中写程序测试等。
-
Standalone
Standalone是Spark自带的一个资源调度框架,它支持完全分布式。
-
Yarn
Hadoop生态圈里面的一个资源调度框架,Spark也是可以基于Yarn来计算的。
-
Mesos
资源调度框架。
-
要基于Yarn来进行资源调度,必须实现AppalicationMaster接口,Spark实现了这个接口,所以可以基于Yarn。
下面是我用来测试的一些命令:
./spark-submit --master spark://cry-PC:7077 --class org.apache.spark.examples.JavaSparkPi ../examples/jars/spark-examples_2.12-2.4.4.jar 100
./spark-submit --master spark://cry-PC:7077 --deploy-mode cluster --class org.apache.spark.examples.JavaSparkPi ../examples/jars/spark-examples_2.12-2.4.4.jar 100
./spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.JavaSparkPi ../examples/jars/spark-examples_2.12-2.4.4.jar 100
./spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.JavaSparkPi ../examples/jars/spark-examples_2.12-2.4.4.jar 100
在不区分任务调度框架的情况下,deploy-mode的可选值分别是client和cluster,两种模式的区别在于driver的位置,其中client模式我们可以在终端看到job执行的整个过程,包括执行后的输出结果;cluster模式只能看到部分的执行过程,无法看到输出结果。执行的日志和结果要去spark和hadoop的web控制台查看
下面是yarn-cluster的执行结果图
2 执行过程中常出现的错误和解决办法
Application application_1581053570255_0004 failed 2 times due to AM Container for appattempt_1581053570255_0004_000002 exited with exitCode: -103
Failing this attempt.Diagnostics: [2020-02-07 17:48:19.359]Container [pid=13535,containerID=container_1581053570255_0004_02_000001] is running beyond virtual memory limits. Current usage: 307.6 MB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
这个错误容易在yarn-client上,大致意思就是虚拟内存使用超出限制,解决办法是修改yarn-site.xml,加入如下配置
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>15.5</value>
</property>
数值配置的大一点就行,默认配置是2.1有点太小了
、
这个是查资料时看到的也贴出来给大家看看
参考资料:https://www.jianshu.com/p/c2bef33a046f
关于spark提交任务的详细说明和流程这篇文章我觉得讲的很好,可以看看