Browse Source

[livy] Move {,Batch,Interactive}Session into livy-core

Erick Tryzelaar 10 years ago
parent
commit
2f06395
29 changed files with 120 additions and 43 deletions
  1. 1 3
      apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/Session.scala
  2. 3 4
      apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/batch/BatchSession.scala
  3. 2 3
      apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/InteractiveSession.scala
  4. 5 23
      apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/Statement.scala
  5. 35 0
      apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/StatementState.scala
  6. 3 3
      apps/spark/java/livy-core/src/test/scala/com/cloudera/hue/livy/sessions/BaseInteractiveSessionSpec.scala
  7. 2 1
      apps/spark/java/livy-core/src/test/scala/com/cloudera/hue/livy/sessions/interactive/StatementSpec.scala
  8. 8 0
      apps/spark/java/livy-server/pom.xml
  9. 2 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/Main.scala
  10. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionFactory.scala
  11. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionManager.scala
  12. 2 1
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionServlet.scala
  13. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionFactory.scala
  14. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionProcess.scala
  15. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionProcessFactory.scala
  16. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionServlet.scala
  17. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionYarn.scala
  18. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionYarnFactory.scala
  19. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionFactory.scala
  20. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcess.scala
  21. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcessFactory.scala
  22. 4 3
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionServlet.scala
  23. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionYarn.scala
  24. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionYarnFactory.scala
  25. 1 0
      apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveWebSession.scala
  26. 2 2
      apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcessSpec.scala
  27. 1 0
      apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionServletSpec.scala
  28. 18 0
      apps/spark/java/livy-yarn/src/main/scala/com/cloudera/hue/livy/yarn/ApplicationState.scala
  29. 18 0
      apps/spark/java/livy-yarn/src/main/scala/com/cloudera/hue/livy/yarn/Job.scala

+ 1 - 3
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/Session.scala → apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/Session.scala

@@ -16,9 +16,7 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server
-
-import com.cloudera.hue.livy.sessions.SessionState
+package com.cloudera.hue.livy.sessions
 
 import scala.concurrent.Future
 

+ 3 - 4
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSession.scala → apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/batch/BatchSession.scala

@@ -16,9 +16,8 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server.batch
+package com.cloudera.hue.livy.sessions.batch
 
-import com.cloudera.hue.livy.server.Session
+import com.cloudera.hue.livy.sessions.Session
 
-trait BatchSession extends Session {
-}
+trait BatchSession extends Session

+ 2 - 3
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSession.scala → apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/InteractiveSession.scala

@@ -16,15 +16,14 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server.interactive
+package com.cloudera.hue.livy.sessions.interactive
 
 import java.net.URL
 import java.util.concurrent.TimeoutException
 
 import com.cloudera.hue.livy.Utils
 import com.cloudera.hue.livy.msgs.ExecuteRequest
-import com.cloudera.hue.livy.server.Session
-import com.cloudera.hue.livy.sessions.{SessionState, Kind}
+import com.cloudera.hue.livy.sessions.{Session, Kind, SessionState}
 
 import scala.concurrent._
 import scala.concurrent.duration.Duration

+ 5 - 23
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/Statement.scala → apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/Statement.scala

@@ -16,37 +16,19 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server.interactive
+package com.cloudera.hue.livy.sessions.interactive
 
 import com.cloudera.hue.livy.msgs.ExecuteRequest
 import org.json4s.JValue
-import org.json4s.JsonAST.{JArray, JObject, JField, JString}
+import org.json4s.JsonAST.{JArray, JField, JObject, JString}
 
 import scala.concurrent.{ExecutionContext, ExecutionContextExecutor, Future}
 import scala.util.{Failure, Success}
 
-object Statement {
-  sealed trait State
-
-  case class Running() extends State {
-    override def toString = "running"
-  }
-
-  case class Available() extends State {
-    override def toString = "available"
-  }
-
-  case class Error() extends State {
-    override def toString = "error"
-  }
-}
-
 class Statement(val id: Int, val request: ExecuteRequest, _output: Future[JValue]) {
-  import Statement._
-
   protected implicit def executor: ExecutionContextExecutor = ExecutionContext.global
 
-  private[this] var _state: State = Running()
+  private[this] var _state: StatementState = StatementState.Running()
 
   def state = _state
 
@@ -77,7 +59,7 @@ class Statement(val id: Int, val request: ExecuteRequest, _output: Future[JValue
   }
 
   _output.onComplete {
-    case Success(_) => _state = Available()
-    case Failure(_) => _state = Error()
+    case Success(_) => _state = StatementState.Available()
+    case Failure(_) => _state = StatementState.Error()
   }
 }

+ 35 - 0
apps/spark/java/livy-core/src/main/scala/com/cloudera/hue/livy/sessions/interactive/StatementState.scala

@@ -0,0 +1,35 @@
+/*
+ * Licensed to Cloudera, Inc. under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  Cloudera, Inc. licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.cloudera.hue.livy.sessions.interactive
+
+sealed trait StatementState
+
+object StatementState {
+  case class Running() extends StatementState {
+    override def toString = "running"
+  }
+
+  case class Available() extends StatementState {
+    override def toString = "available"
+  }
+
+  case class Error() extends StatementState {
+    override def toString = "error"
+  }
+}

+ 3 - 3
apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/BaseSessionSpec.scala → apps/spark/java/livy-core/src/test/scala/com/cloudera/hue/livy/sessions/BaseInteractiveSessionSpec.scala

@@ -16,19 +16,19 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server.interactive
+package com.cloudera.hue.livy.sessions
 
 import java.util.concurrent.TimeUnit
 
 import com.cloudera.hue.livy.msgs.ExecuteRequest
-import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import org.json4s.{DefaultFormats, Extraction}
 import org.scalatest.{BeforeAndAfter, FunSpec, Matchers}
 
 import scala.concurrent.Await
 import scala.concurrent.duration.Duration
 
-abstract class BaseSessionSpec extends FunSpec with Matchers with BeforeAndAfter {
+abstract class BaseInteractiveSessionSpec extends FunSpec with Matchers with BeforeAndAfter {
 
   implicit val formats = DefaultFormats
 

+ 2 - 1
apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/StatementSpec.scala → apps/spark/java/livy-core/src/test/scala/com/cloudera/hue/livy/sessions/interactive/StatementSpec.scala

@@ -18,9 +18,10 @@
  * limitations under the License.
  */
 
-package com.cloudera.hue.livy.server.interactive
+package scala.com.cloudera.hue.livy.sessions.interactive
 
 import com.cloudera.hue.livy.msgs.ExecuteRequest
+import com.cloudera.hue.livy.sessions.interactive.Statement
 import org.json4s.JsonAST.JString
 import org.json4s.{DefaultFormats, Extraction}
 import org.scalatest.{FunSpec, Matchers}

+ 8 - 0
apps/spark/java/livy-server/pom.xml

@@ -39,6 +39,14 @@
             <version>${project.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>livy-core_${scala.binary.version}</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>livy-yarn_${scala.binary.version}</artifactId>

+ 2 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/Main.scala

@@ -24,6 +24,8 @@ import javax.servlet.ServletContext
 import com.cloudera.hue.livy._
 import com.cloudera.hue.livy.server.batch._
 import com.cloudera.hue.livy.server.interactive._
+import com.cloudera.hue.livy.sessions.batch.BatchSession
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import org.scalatra._
 import org.scalatra.metrics.MetricsBootstrap
 import org.scalatra.metrics.MetricsSupportExtensions._

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionFactory.scala

@@ -18,6 +18,7 @@
 
 package com.cloudera.hue.livy.server
 
+import com.cloudera.hue.livy.sessions.Session
 import org.json4s.{DefaultFormats, Formats, JValue}
 
 abstract class SessionFactory[S <: Session] {

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionManager.scala

@@ -20,6 +20,7 @@ package com.cloudera.hue.livy.server
 
 import java.util.concurrent.atomic.AtomicInteger
 
+import com.cloudera.hue.livy.sessions.Session
 import com.cloudera.hue.livy.{LivyConf, Logging}
 import org.json4s.JValue
 

+ 2 - 1
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/SessionServlet.scala

@@ -19,7 +19,8 @@
 package com.cloudera.hue.livy.server
 
 import com.cloudera.hue.livy.Logging
-import com.cloudera.hue.livy.server.interactive.InteractiveSession.SessionFailedToStart
+import com.cloudera.hue.livy.sessions.Session
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession.SessionFailedToStart
 import com.fasterxml.jackson.core.JsonParseException
 import org.json4s.JsonDSL._
 import org.json4s.{DefaultFormats, Formats, JValue, MappingException}

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionFactory.scala

@@ -19,6 +19,7 @@
 package com.cloudera.hue.livy.server.batch
 
 import com.cloudera.hue.livy.server.SessionFactory
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 import org.json4s.JValue
 
 abstract class BatchSessionFactory extends SessionFactory[BatchSession] {

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionProcess.scala

@@ -20,6 +20,7 @@ package com.cloudera.hue.livy.server.batch
 
 import java.lang.ProcessBuilder.Redirect
 import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder.RelativePath
 import com.cloudera.hue.livy.{Utils, LivyConf, LineBufferedProcess}
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionProcessFactory.scala

@@ -19,6 +19,7 @@
 package com.cloudera.hue.livy.server.batch
 
 import com.cloudera.hue.livy.LivyConf
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 
 import scala.concurrent.Future
 

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionServlet.scala

@@ -20,6 +20,7 @@ package com.cloudera.hue.livy.server.batch
 
 import com.cloudera.hue.livy.Logging
 import com.cloudera.hue.livy.server.{SessionManager, SessionServlet}
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 import org.json4s.JsonDSL._
 import org.json4s._
 

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionYarn.scala

@@ -21,6 +21,7 @@ package com.cloudera.hue.livy.server.batch
 import java.lang.ProcessBuilder.Redirect
 
 import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder.RelativePath
 import com.cloudera.hue.livy.yarn._

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/batch/BatchSessionYarnFactory.scala

@@ -19,6 +19,7 @@
 package com.cloudera.hue.livy.server.batch
 
 import com.cloudera.hue.livy.LivyConf
+import com.cloudera.hue.livy.sessions.batch.BatchSession
 import com.cloudera.hue.livy.yarn.Client
 
 class BatchSessionYarnFactory(livyConf: LivyConf) extends BatchSessionFactory {

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionFactory.scala

@@ -20,6 +20,7 @@ package com.cloudera.hue.livy.server.interactive
 
 import com.cloudera.hue.livy.server.SessionFactory
 import com.cloudera.hue.livy.sessions.SessionKindSerializer
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import org.json4s.{DefaultFormats, Formats, JValue}
 
 import scala.concurrent.Future

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcess.scala

@@ -22,6 +22,7 @@ import java.lang.ProcessBuilder.Redirect
 import java.net.URL
 
 import com.cloudera.hue.livy.sessions.SessionState
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder.{AbsolutePath, RelativePath}
 import com.cloudera.hue.livy.spark.{SparkProcess, SparkSubmitProcessBuilder}
 import com.cloudera.hue.livy.{LivyConf, Logging, Utils}

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcessFactory.scala

@@ -19,6 +19,7 @@
 package com.cloudera.hue.livy.server.interactive
 
 import com.cloudera.hue.livy.LivyConf
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 
 import scala.concurrent.{ExecutionContext, Future}
 

+ 4 - 3
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionServlet.scala

@@ -25,6 +25,7 @@ import com.cloudera.hue.livy.Logging
 import com.cloudera.hue.livy.msgs.ExecuteRequest
 import com.cloudera.hue.livy.server.{SessionManager, SessionServlet}
 import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.interactive.{InteractiveSession, Statement, StatementState}
 import org.json4s.JsonAST.JString
 import org.json4s._
 import org.scalatra._
@@ -147,7 +148,7 @@ private object Serializers {
 
   private def serializeSessionKind(kind: Kind) = JString(kind.toString)
 
-  private def serializeStatementState(state: Statement.State) = JString(state.toString)
+  private def serializeStatementState(state: StatementState) = JString(state.toString)
 
   def serializeSession(session: InteractiveSession): JValue = {
     ("id", session.id) ~
@@ -210,11 +211,11 @@ private object Serializers {
       serializeStatement(statement, None, None)
   }))
 
-  case object StatementStateSerializer extends CustomSerializer[Statement.State](implicit formats => ( {
+  case object StatementStateSerializer extends CustomSerializer[StatementState](implicit formats => ( {
     // We don't support deserialization.
     PartialFunction.empty
   }, {
-    case state: Statement.State => JString(state.toString)
+    case state: StatementState => JString(state.toString)
   }
     )
   )

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionYarn.scala

@@ -21,6 +21,7 @@ package com.cloudera.hue.livy.server.interactive
 import java.lang.ProcessBuilder.Redirect
 import java.util.concurrent.TimeUnit
 
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import com.cloudera.hue.livy.sessions.{PySpark, SessionState}
 import com.cloudera.hue.livy.spark.SparkSubmitProcessBuilder.{AbsolutePath, RelativePath}
 import com.cloudera.hue.livy.spark.{SparkProcess, SparkSubmitProcessBuilder}

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionYarnFactory.scala

@@ -19,6 +19,7 @@
 package com.cloudera.hue.livy.server.interactive
 
 import com.cloudera.hue.livy.LivyConf
+import com.cloudera.hue.livy.sessions.interactive.InteractiveSession
 import com.cloudera.hue.livy.yarn.Client
 
 import scala.concurrent.{ExecutionContext, Future}

+ 1 - 0
apps/spark/java/livy-server/src/main/scala/com/cloudera/hue/livy/server/interactive/InteractiveWebSession.scala

@@ -24,6 +24,7 @@ import java.util.concurrent.TimeUnit
 import com.cloudera.hue.livy._
 import com.cloudera.hue.livy.msgs.ExecuteRequest
 import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.interactive.{Statement, InteractiveSession}
 import dispatch._
 import org.json4s.JsonAST.{JString, JNull}
 import org.json4s.jackson.Serialization.write

+ 2 - 2
apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionProcessSpec.scala

@@ -19,10 +19,10 @@
 package com.cloudera.hue.livy.server.interactive
 
 import com.cloudera.hue.livy.LivyConf
-import com.cloudera.hue.livy.sessions.PySpark
+import com.cloudera.hue.livy.sessions.{BaseInteractiveSessionSpec, PySpark}
 import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers}
 
-class InteractiveSessionProcessSpec extends BaseSessionSpec with FunSpecLike with Matchers with BeforeAndAfter {
+class InteractiveSessionProcessSpec extends BaseInteractiveSessionSpec with FunSpecLike with Matchers with BeforeAndAfter {
 
   val livyConf = new LivyConf()
   livyConf.set("livy.repl.driverClassPath", sys.props("java.class.path"))

+ 1 - 0
apps/spark/java/livy-server/src/test/scala/com/cloudera/hue/livy/server/interactive/InteractiveSessionServletSpec.scala

@@ -25,6 +25,7 @@ import com.cloudera.hue.livy.LivyConf
 import com.cloudera.hue.livy.msgs.ExecuteRequest
 import com.cloudera.hue.livy.server.SessionManager
 import com.cloudera.hue.livy.sessions._
+import com.cloudera.hue.livy.sessions.interactive.{Statement, InteractiveSession}
 import org.json4s.{DefaultFormats, Formats}
 import org.json4s.JsonAST.{JInt, JArray, JObject, JString}
 import org.json4s.jackson.JsonMethods._

+ 18 - 0
apps/spark/java/livy-yarn/src/main/scala/com/cloudera/hue/livy/yarn/ApplicationState.scala

@@ -1,3 +1,21 @@
+/*
+ * Licensed to Cloudera, Inc. under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  Cloudera, Inc. licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.cloudera.hue.livy.yarn
 
 sealed trait ApplicationState

+ 18 - 0
apps/spark/java/livy-yarn/src/main/scala/com/cloudera/hue/livy/yarn/Job.scala

@@ -1,3 +1,21 @@
+/*
+ * Licensed to Cloudera, Inc. under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  Cloudera, Inc. licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.cloudera.hue.livy.yarn
 
 import org.apache.hadoop.yarn.api.records.{FinalApplicationStatus, YarnApplicationState, ApplicationId}