diff --git a/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/JubatusYarnApplication.scala b/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/JubatusYarnApplication.scala index fc38759..222e6c3 100644 --- a/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/JubatusYarnApplication.scala +++ b/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/JubatusYarnApplication.scala @@ -72,6 +72,8 @@ object JubatusYarnApplication extends HasLogger { /** * JubatusYarnApplication を起動します。 + * 設定ファイルの内容を文字列で指定します。 + * デフォルトのベースパス (hdfs:///jubatus-on-yarn) を使用します。 * * juba${aLearningMachineType_proxy} がひとつ, juba${aLearningMachineType} が ${aNodeCount} だけ起動します。 * 各 juba${aLearningMachineType} の使用するリソースを ${aResource} に指定してください。 @@ -82,14 +84,16 @@ object JubatusYarnApplication extends HasLogger { * @param aConfigString config json string * @param aResource computer resources in the cluster * @param aNodeCount number of cluster + * @param aApplicationName yarn-application name * @return [[JubatusYarnApplication]] */ - def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int): Future[JubatusYarnApplication] = { - start(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigString, aResource, aNodeCount, new Path("hdfs:///jubatus-on-yarn")) + def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int, aApplicationName: String): Future[JubatusYarnApplication] = { + start(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigString, aResource, aNodeCount, new Path("hdfs:///jubatus-on-yarn"), aApplicationName) } /** * JubatusYarnApplication を起動します。 + * 設定ファイルの内容を文字列で指定します。 * * juba${aLearningMachineType_proxy} がひとつ, juba${aLearningMachineType} が ${aNodeCount} だけ起動します。 * 各 juba${aLearningMachineType} の使用するリソースを ${aResource} に指定してください。 @@ -101,9 +105,10 @@ object JubatusYarnApplication extends HasLogger { * @param aResource computer resources in the cluster * @param aNodeCount number of cluster * @param aBasePath base path of jar and sh files + * @param aApplicationName yarn-application name * @return [[JubatusYarnApplication]] */ - def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int, aBasePath: Path): Future[JubatusYarnApplication] = Future { + def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int, aBasePath: Path, aApplicationName: String): Future[JubatusYarnApplication] = Future { require(aResource.memory > 0, "specify memory than 1MB.") require(aNodeCount > 0, "specify node count than 1") @@ -114,14 +119,16 @@ object JubatusYarnApplication extends HasLogger { case None => throw new IllegalStateException("Service not running.") case Some(tYarnClientController) => // ApplicationMaster 起動 - logger.info(s"startJubatusApplication $aLearningMachineName, $aLearningMachineType, $aZookeepers, $aConfigString, $aResource, $aNodeCount") - val tApplicationMasterProxy = tYarnClientController.startJubatusApplication(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigString, aResource, aNodeCount, aBasePath) + logger.info(s"startJubatusApplication $aLearningMachineName, $aLearningMachineType, $aZookeepers, $aConfigString, $aResource, $aNodeCount, $aApplicationName") + val tApplicationMasterProxy = tYarnClientController.startJubatusApplication(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigString, aResource, aNodeCount, aBasePath, aApplicationName) waitForStarted(ApplicationContext(tYarnClientController, tApplicationMasterProxy, tService)) } } /** * JubatusYarnApplication を起動します。 + * 設定ファイルの場所をパスで指定します。 + * デフォルトのベースパス (hdfs:///jubatus-on-yarn) を使用します。 * * juba${aLearningMachineType_proxy} がひとつ, juba${aLearningMachineType} が ${aNodeCount} だけ起動します。 * 各 juba${aLearningMachineType} の使用するリソースを ${aResource} に指定してください。 @@ -132,14 +139,16 @@ object JubatusYarnApplication extends HasLogger { * @param aConfigFile config file * @param aResource computer resources in the cluster * @param aNodeCount number of cluster + * @param aApplicationName yarn-application name * @return [[JubatusYarnApplication]] */ - def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int): Future[JubatusYarnApplication] = { - start(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigFile, aResource, aNodeCount, new Path("hdfs:///jubatus-on-yarn")) + def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int, aApplicationName: String): Future[JubatusYarnApplication] = { + start(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigFile, aResource, aNodeCount, new Path("hdfs:///jubatus-on-yarn"), aApplicationName) } /** * JubatusYarnApplication を起動します。 + * 設定ファイルの場所をパスで指定します。 * * juba${aLearningMachineType_proxy} がひとつ, juba${aLearningMachineType} が ${aNodeCount} だけ起動します。 * 各 juba${aLearningMachineType} の使用するリソースを ${aResource} に指定してください。 @@ -150,9 +159,10 @@ object JubatusYarnApplication extends HasLogger { * @param aConfigFile config file * @param aResource computer resources in the cluster * @param aNodeCount number of cluster + * @param aApplicationName yarn-application name * @return [[JubatusYarnApplication]] */ - def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int, aBasePath: Path): Future[JubatusYarnApplication] = Future { + def start(aLearningMachineName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int, aBasePath: Path, aApplicationName: String): Future[JubatusYarnApplication] = Future { require(aResource.memory > 0, "specify memory than 1MB.") require(aNodeCount > 0, "specify node count than 1") @@ -163,8 +173,8 @@ object JubatusYarnApplication extends HasLogger { case None => throw new IllegalStateException("Service not running.") case Some(tYarnClientController) => // ApplicationMaster 起動 - logger.info(s"startJubatusApplication $aLearningMachineName, $aLearningMachineType, $aZookeepers, $aConfigFile, $aResource, $aNodeCount") - val tApplicationMasterProxy = tYarnClientController.startJubatusApplication(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigFile, aResource, aNodeCount, aBasePath) + logger.info(s"startJubatusApplication $aLearningMachineName, $aLearningMachineType, $aZookeepers, $aConfigFile, $aResource, $aNodeCount, $aApplicationName") + val tApplicationMasterProxy = tYarnClientController.startJubatusApplication(aLearningMachineName, aLearningMachineType, aZookeepers, aConfigFile, aResource, aNodeCount, aBasePath, aApplicationName) waitForStarted(ApplicationContext(tYarnClientController, tApplicationMasterProxy, tService)) } } diff --git a/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/YarnClientController.scala b/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/YarnClientController.scala index b55d614..15e15a8 100644 --- a/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/YarnClientController.scala +++ b/jubatusonyarn/jubatus-on-yarn-client/src/main/scala/us/jubat/yarn/client/YarnClientController.scala @@ -46,8 +46,20 @@ class YarnClientController(location: Location, yarnClient: YarnClient = new Defa mApplicationMaster.get } - def startJubatusApplication(aName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int, aBasePath: Path): ApplicationMasterProxy = { - val tFullName = getFullName(aName, aLearningMachineType, aZookeepers) + /** + * Start Jubatus application using specified config string. + * + * @param aName + * @param aLearningMachineType + * @param aZookeepers + * @param aConfigString + * @param aResource + * @param aNodeCount + * @param aBasePath + * @param aApplicationName name of YARN application. When null is given, the default value will be used. + */ + def startJubatusApplication(aName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigString: String, aResource: Resource, aNodeCount: Int, aBasePath: Path, aApplicationName: String): ApplicationMasterProxy = { + val tFullName = Option(aApplicationName).getOrElse(getFullName(aName, aLearningMachineType, aZookeepers)) logger.info(s"starting $tFullName") val tApplicationId = yarnClient.submitApplicationMaster(tFullName, aName, aLearningMachineType, aZookeepers, aConfigString, aResource, aNodeCount, location, aBasePath) @@ -55,8 +67,20 @@ class YarnClientController(location: Location, yarnClient: YarnClient = new Defa registerApplication(tFullName, tApplicationId, aNodeCount) } - def startJubatusApplication(aName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int, aBasePath: Path): ApplicationMasterProxy = { - val tFullName = getFullName(aName, aLearningMachineType, aZookeepers) + /** + * Start Jubatus application using specified config path. + * + * @param aName + * @param aLearningMachineType + * @param aZookeepers + * @param aConfigFile + * @param aResource + * @param aNodeCount + * @param aBasePath + * @param aApplicationName name of YARN application. When null is given, the default value will be used. + */ + def startJubatusApplication(aName: String, aLearningMachineType: LearningMachineType, aZookeepers: List[Location], aConfigFile: Path, aResource: Resource, aNodeCount: Int, aBasePath: Path, aApplicationName: String): ApplicationMasterProxy = { + val tFullName = Option(aApplicationName).getOrElse(getFullName(aName, aLearningMachineType, aZookeepers)) logger.info(s"starting $tFullName") val tApplicationId = yarnClient.submitApplicationMaster(tFullName, aName, aLearningMachineType, aZookeepers, aConfigFile, aResource, aNodeCount, location, aBasePath)