Advertisement
Guest User

SD-HW-HadoopYarn

a guest
Dec 11th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.58 KB | None | 0 0
  1. import java.net.URI
  2. import java.nio.ByteBuffer
  3.  
  4. import org.apache.hadoop.fs.Path
  5. import org.apache.hadoop.yarn.api.ApplicationConstants
  6. import org.apache.hadoop.yarn.api.ApplicationConstants.Environment
  7. import org.apache.hadoop.yarn.api.records._
  8. import org.apache.hadoop.yarn.client.api.YarnClient
  9. import org.apache.hadoop.yarn.conf.YarnConfiguration
  10. import org.apache.hadoop.yarn.util.Records
  11. import scala.collection.JavaConverters._
  12.  
  13. class Submit {
  14.   private val yc = YarnClient.createYarnClient()
  15.  
  16.   def submit(resourceManagerUri: URI,
  17.              appName: String = "something" + System.currentTimeMillis(),
  18.              jar: String = "No jar defined",
  19.              className: String = "com.sirsidynix.Transform"): Int = {
  20.     //fetches the conf from a call to resourcemanagerUri/conf. This is in xml.
  21.     val conf = ConfParser.fetchHadoopConf(resourceManagerUri.toString)
  22.     conf.set("yarn.nodemanager.delete.debug-delay-sec", "36000")
  23.  
  24.     val otherConf = new org.apache.hadoop.conf.Configuration
  25.  
  26.     yc.init(new YarnConfiguration(conf))
  27.     yc.start()
  28.     val app = yc.createApplication()
  29.     val response = app.getNewApplicationResponse
  30.  
  31.     val appContext = app.getApplicationSubmissionContext
  32.     appContext.setApplicationName(appName)
  33.     appContext.setQueue("default")
  34.     appContext.setResource(Resource.newInstance(64, 1))
  35.     appContext.setAMContainerSpec(makeContainer(appName))
  36.     appContext.setApplicationType("IGNITOR")
  37.     appContext.setApplicationTags(Set("IGNITOR").asJava)
  38.     appContext.setMaxAppAttempts(1)
  39.  
  40.     yc.submitApplication(appContext)
  41.     //perhaps return this? But it will be mostly useless. A short lived application that will merely execute the command spark-submit
  42.     appContext.getApplicationId.getId
  43.   }
  44.  
  45.   private def getAppStagingDir(appId: ApplicationId) = {
  46.     ".ignitorStaging" + Path.SEPARATOR + appId.toString() + Path.SEPARATOR
  47.   }
  48.  
  49.   private def makeContainer(name: String) = {
  50.     val master = "yarn-cluster"
  51.     val mainClass = "com.sirsidynix.Transform"
  52.     val appJar = "s3n://thebucketofchoice/spark-application-sd.jar"
  53.     val appName = s"$name:$mainClass"
  54.  
  55.     val command = Seq( s"""spark-submit --master $master --class $mainClass --name "$appName" $appJar""",
  56.       s"1>${ApplicationConstants.LOG_DIR_EXPANSION_VAR }/stdout", s"2>${ApplicationConstants.LOG_DIR_EXPANSION_VAR }/stderr &")
  57.       .mkString(" ")
  58.     println(s"$command")
  59.     val container = Records.newRecord(classOf[ContainerLaunchContext])
  60.     container.setCommands(List(command).asJava)
  61.     println(s"${container.getCommands }")
  62.     container
  63.   }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement