你提到你在spark-shell上交互运行你的代码所以,如果没有为驱动程序内存或执行程序内存设置适当的值,那么spark默认为它分配一些值,这是基于它的属性文件(其中默认值是被提及)。
我希望你知道有一个驱动程序(主节点)和工作节点(执行器被创建和处理)的事实,所以火花程序基本上需要两种类型的空间,所以如果你想设置驱动程序内存然后启动spark-shell。
spark-shell --driver-memory“你的价值”并设置执行者记忆: spark-shell --executor-memory“你的价值”
那么我认为你可以选择你希望你的spark-shell使用的内存值。
您可以使用以下示例构建命令
spark-submit --jars /usr/share/java/postgresql-jdbc.jar --class com.examples.WordCount3 /home/vaquarkhan/spark-scala-maven-project-0.0.1-SNAPSHOT.jar --jar --num-executors 3 --driver-memory 10g **--executor-memory 10g** --executor-cores 1 --master local --deploy-mode client --name wordcount3 --conf "spark.app.id=wordcount"
显然,问题永远不会说本地模式而不是纱线。不知怎的,我无法让spark-default.conf改变工作。相反,我试过这个,它对我有用
bin/spark-shell --master yarn --num-executors 6 --driver-memory 5g --executor-memory 7g
(无法将执行程序内存减少到8g,因此纱线配置存在一些限制。)
另请注意,对于本地模式,您必须在启动jvm之前设置驱动程序内存量:
bin/spark-submit --driver-memory 2g --class your.class.here app.jar
这将使用2G而不是默认的512M启动JVM。 细节 这里 :
对于本地模式,您只有一个执行程序,并且此执行程序是您的驱动程序,因此您需要设置驱动程序的内存。 *也就是说,在本地模式下,当你运行spark-submit时,已经使用默认的内存设置启动了JVM,因此在你的conf中设置“spark.driver.memory”实际上并不会为你做任何事情。相反,您需要按如下方式运行spark-submit
在spark / conf目录中创建一个名为spark-env.sh的文件 添加此行
SPARK_EXECUTOR_MEMORY=2000m #memory size which you want to allocate for the executor
根据驱动程序提供的指令运行spark任务需要Spark执行程序内存。基本上,它需要更多依赖于您提交的作业的资源。
执行器存储器包括执行任务所需的存储器加上开销存储器,其不应大于JVM和纱线最大容器尺寸的大小。
在spark-defaults.conf中添加以下参数
spar.executor.cores=1 spark.executor.memory=2g
如果您使用任何群集管理工具 的 cloudera经理 强> 要么 的 amabari 强> 请刷新群集配置,以便将最新配置反映到群集中的所有节点。
或者,我们可以在运行时将执行程序核心和内存值作为参数传递 spark-submit 命令以及类和应用程序路径。
spark-submit
例:
spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ # can be client for client mode --executor-memory 2G \ --num-executors 5 \ /path/to/examples.jar \ 1000