当前位置: 首页 > 知识库问答 >
问题:

为在纱线模式下运行的每个火花作业配置log4j

艾弘义
2023-03-14

我正在纱线客户端模式下运行火花作业。我在unix脚本中使用Spark提交命令运行这些作业。我想为正在运行的每个火花作业创建日志。我尝试使用以下命令获取日志:

spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 2G --driver-memory 2G --jars $spark_jars --class $spark_class  $main_jar |& tee -a ${log_file}

但在这里,如果spark作业失败,它将不会在命令状态检查中被捕获,可能是unix检查|$tee命令的状态,无论spark作业成功还是失败,该命令始终是成功的

if [ $? -eq 0 ]; then
    echo "===========SPARK JOB COMPLETED==================" |& tee -a ${log_file}
else
    echo "===========SPARK JOB FAILED=====================" |& tee -a ${log_file}
fi

我尝试使用log4j但没有成功。我想将每个火花作业日志文件存储在本地unix服务器上。请帮忙!!

共有1个答案

艾飞宇
2023-03-14

只要您提交spark申请。它生成一个应用程序id。由于此应用程序在分布式集群中运行,您无法通过重定向获取spark应用程序的日志。

但是,当您执行以下操作时,它只是将控制台登录重定向到文件中。

spark-submit --master yarn --deploy-mode client --num-executors 10 --executor-memory 2G --driver-memory 2G --jars $spark_jars --class $spark_class  $main_jar > ${log_file}

例如,要将火花应用程序的日志记录提交给纱线集群,您需要使用纱线日志命令:

纱线日志

 类似资料:
  • 我正在4节点群集上运行Spark over纱线。节点中每台机器的配置为128GB内存,每个节点24核CPU。我使用此命令运行Spark on 但Spark最多只能启动16个执行者。我将纱线中的最大vcore分配设置为80(在我拥有的94芯中)。因此,我的印象是,这将启动19名执行人,但最多只能启动16名执行人。此外,我认为即使这些执行者也没有完全使用分配的vCore。 这些是我的问题 spark为

  • 在配置spark应用程序时,我试图从集群中挤出每一点,但似乎我并没有完全正确地理解每一件事。因此,我正在AWS EMR集群上运行该应用程序,该集群具有1个主节点和2个m3类型的核心节点。xlarge(每个节点15G ram和4个vCPU)。这意味着,默认情况下,每个节点上为纱线调度的应用程序保留11.25 GB。因此,主节点仅由资源管理器(纱线)使用,这意味着剩余的2个核心节点将用于调度应用程序(

  • 我已经在一个15节点的Hadoop集群上安装了。所有节点都运行和最新版本的Hadoop。Hadoop集群本身是功能性的,例如,YARN可以成功地运行各种MapReduce作业。 我可以使用以下命令在节点上本地运行Spark Shell,而不会出现任何问题:。 你知道为什么我不能用客户端模式在纱线上运行Spark Shell吗?

  • 我正在从我的开发机器上启动spark-submit。 根据在YARN文档上运行Spark,我应该在env var或上为hadoop集群配置提供一个路径。这就是它变得棘手的地方:如果我将任务发送到远程YARN服务,为什么这些文件夹必须存在于我的本地机器上?这是否意味着spark-submit必须位于集群内部,因此我不能远程启动spark任务?如果没有,我应该用什么填充这些文件夹?我应该从任务管理器服

  • 然而,我不知道我是否真的需要一个插件,如果需要,是哪一个,以及如何去做它。我尝试使用'build/mvn'和'build/sbt'直接编译github源代码,但是'spark-assembly2.11-2.0.2.jar'文件只有283字节。 我的目标是使用较新版本的fat jar运行pyspark shell,其方式与这里提到的类似。

  • 在yarn-cluster模式下,驱动程序在应用程序主程序中运行(在YARN集群内)。在yarn-client模式下,它在提交作业的client节点中运行 我想知道使用一种模式比使用另一种模式有什么好处?我们在什么情况下应该使用哪种模式。