Моя основная цель - получить appId
после отправки задачи кластера пряжи через код Java, что удобно для дополнительных бизнес-операций.
Добавьте --conf=spark.extraListeners=Mylistener
ПокаSparkListener
работает, когда я использую Spark в автономном режиме, не работает, когда я запускаю Spark в кластере через Yarn.Возможно ли работать SparkListener
при работе с пряжей?Если так, какие шаги я должен сделать, чтобы включить это?
Вот код класса Mylistener
:
public class Mylistener extends SparkListener {
private static Logger logger = LoggerFactory.getLogger(EnvelopeSparkListener.class);
@Override
public void onApplicationStart(SparkListenerApplicationStart sparkListenerApplicationStart) {
Option<String> appId = sparkListenerApplicationStart.appId();
EnvelopeSubmit.appId = appId.get();
logger.info("====================start");
}
@Override
public void onBlockManagerAdded(SparkListenerBlockManagerAdded blockManagerAdded) {
logger.info("=====================add");
}
}
Вот основной класс для подачи заявки:
public static void main(String[] args) {
String jarpath = args[0];
String childArg = args[1];
System.out.println("jarpath:" + jarpath);
System.out.println("childArg:" + childArg);
System.setProperty("HADOOP_USER_NAME", "hdfs");
String[] arg = {"--verbose=true", "--class=com.cloudera.labs.envelope.EnvelopeMain",
"--master=yarn", "--deploy-mode=cluster","--conf=spark.extraListeners=Mylistener","--conf","spark.eventLog.enabled=true", "--conf","spark.yarn.jars=hdfs://192.168.6.188:8020/user/hdfs/lib/*", jarpath, childArg};
SparkSubmit.main(arg);
}