commit 726fd40c016d81de59573f102c66a9ee267e95f6 Author: Sahil Takiar Date: Mon Feb 19 13:14:59 2018 +0000 HIVE-18093: Improve logging when HoS application is killed diff --git a/spark-client/src/main/java/org/apache/hive/spark/client/BaseProtocol.java b/spark-client/src/main/java/org/apache/hive/spark/client/BaseProtocol.java index 7ca89ed275..4dbc4908bf 100644 --- a/spark-client/src/main/java/org/apache/hive/spark/client/BaseProtocol.java +++ b/spark-client/src/main/java/org/apache/hive/spark/client/BaseProtocol.java @@ -49,12 +49,8 @@ final String cause; - Error(Throwable cause) { - if (cause == null) { - this.cause = ""; - } else { - this.cause = Throwables.getStackTraceAsString(cause); - } + Error(String cause) { + this.cause = cause; } Error() { diff --git a/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java b/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java index e584cbb0a7..b014c2eb71 100644 --- a/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java +++ b/spark-client/src/main/java/org/apache/hive/spark/client/RemoteDriver.java @@ -96,6 +96,8 @@ private RemoteDriver(String[] args) throws Exception { this.shutdownLock = new Object(); localTmpDir = Files.createTempDir(); + addShutdownHook(); + SparkConf conf = new SparkConf(); String serverAddress = null; int serverPort = -1; @@ -178,6 +180,17 @@ public void rpcClosed(Rpc rpc) { } } + private void addShutdownHook() { + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + if (running) { + LOG.info("Received signal SIGTERM, attempting safe shutdown of Remote Spark Context"); + protocol.sendErrorMessage("Remote Spark Context was shutdown because it received a SIGTERM " + + "signal. Most likely due to a kill request via YARN."); + shutdown(null); + } + })); + } + private void run() throws InterruptedException { synchronized (shutdownLock) { while (running) { @@ -249,7 +262,12 @@ private String getArg(String[] args, int keyIdx) { void sendError(Throwable error) { LOG.debug("Send error to Client: {}", Throwables.getStackTraceAsString(error)); - clientRpc.call(new Error(error)); + clientRpc.call(new Error(Throwables.getStackTraceAsString(error))); + } + + void sendErrorMessage(String cause) { + LOG.debug("Send error to Client: {}", cause); + clientRpc.call(new Error(cause)); } void jobFinished(String jobId, T result,