Spark Yarn API 在线任务提交

Spark Yarn API 在线任务提交,第1张

Spark Yarn API 在线任务提交 一、Yarn api 提交spark任务

日常在编写spark任务时,大部分都是通过spark集群或者spark集群作为client,将任务提交到yarn里面来运行。常规的提交方式在做在线服务过程中就不太实用了,当然可以通过java api调用脚本的方式来提交,个人感觉有点不友好。所以经过研究以后,可以直接对接spark yarn api,方便动态提交计算任务,管理计算任务。

第一步:将spark计算任务打包(jar)并上传到hdfs具体路径下面;

第二步:提交spark任务到yarn,并获取到appId;

public String dslSubmit(Task task) throws CoException {
			String paramValue = task.getParamValue();
			String[] runArgs = new String[]{
				"--class", "classPath",
				"--jar", "jarPath",
				"--arg", "-m",
				"--arg", "yarn",
				"--arg", "-d",
				"--arg", paramValue
			};
			// 构建Spark conf
			SparkConf sparkConf = engineConfigService.buildEngineConfigInSpark();
			try {
				// 构造运行参数对象
				ClientArguments cArgs = new ClientArguments(runArgs);
				// 构造Client
				Client client = new Client(cArgs, sparkConf, null);
				// 提交spark任务到yarn,并获取到appId,后续可以通过appId控制运行的任务,查询运行的状态
				ApplicationId applicationId = client.submitApplication();
				return applicationId.toString();
			} catch (Exception e) {
				throw new CoException(ErrorCodeEnum.ENGINE_SUBMIT_EXCEPTION.getCode(), "application submit error");
			}
		}

第三步:通过第二步的appId,控制运行的任务,查询运行的状态等等管理 *** 作。

二、spark libs/conf

首先yarn和spark集群没有必然的联系,yarn是通用的资源管理器,不耦合具体的引擎。所以再yarn里面运行的spark程序,只依赖libs包和conf信息。

即: __app__.jar、__spark_libs__、__spark_conf__这三个文件。每次运行任务都会将这几个文件包进行打包上传,然后才初始化运行环境。为了加快运行时间可以将libs打包上传到hdfs中,可以通过配置key来设置libs包的具体路径:

spark.yarn.archive -> source/__spark_libs__.zip // spark lib的zip包

spark.yarn.jars -> source/jars/*

在spark yarn client中,conf是每次动态生成的。因此每次任务执行都需要动态的设置运行的配置信息。

三、Spark任务提交出现的0.0.0.0:8030问题?

通过spark yarn api提交spark任务来提供在线服务的过程中,遇到连不上yarn RM,网上找了比较多的资料,0.0.0.0:8030依然存在。

最后通过手动设置yarn RM的host来解决的。完整配置如下:

spark.hadoop.yarn.resourcemanager.hostname

spark.hadoop.yarn.resourcemanager.address

spark.hadoop.yarn.resourcemanager.scheduler.address

四、HadoopHA,导致spark任务提交的: “java.net.UnknownHostException” 问题

HA是属于hadoop系统,脱离hadoop系统是无法识别的。因此需要将响应的配置信息加载进来。

解决方法如下:

在SparkConf对象中添加

sparkConf.set("spark.files", "hdfs:///conf/hdfs-site.xml,hdfs:///conf/core-site.xml");

五、spark yarn api模式资源管理kerberos权限认证

官网说可以通过添加这两个配置来进行kerberos权限验证:spark.kerberos.keytab、spark.kerberos.principal

然而我们项目中,权限划分比较细,通过这种方式任然不行。

最后的解决办法是在服务项目中将yarn-site.xml,hdfs-site.xml,core-site.xml添加到resource下面。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5573392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存