示例#1
0
        public static ApplicationReport NewInstance(ApplicationId applicationId, ApplicationAttemptId
                                                    applicationAttemptId, string user, string queue, string name, string host, int
                                                    rpcPort, Token clientToAMToken, YarnApplicationState state, string diagnostics,
                                                    string url, long startTime, long finishTime, FinalApplicationStatus finalStatus,
                                                    ApplicationResourceUsageReport appResources, string origTrackingUrl, float progress
                                                    , string applicationType, Token amRmToken)
        {
            ApplicationReport report = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <ApplicationReport
                                                                                      >();

            report.SetApplicationId(applicationId);
            report.SetCurrentApplicationAttemptId(applicationAttemptId);
            report.SetUser(user);
            report.SetQueue(queue);
            report.SetName(name);
            report.SetHost(host);
            report.SetRpcPort(rpcPort);
            report.SetClientToAMToken(clientToAMToken);
            report.SetYarnApplicationState(state);
            report.SetDiagnostics(diagnostics);
            report.SetTrackingUrl(url);
            report.SetStartTime(startTime);
            report.SetFinishTime(finishTime);
            report.SetFinalApplicationStatus(finalStatus);
            report.SetApplicationResourceUsageReport(appResources);
            report.SetOriginalTrackingUrl(origTrackingUrl);
            report.SetProgress(progress);
            report.SetApplicationType(applicationType);
            report.SetAMRMToken(amRmToken);
            return(report);
        }
示例#2
0
 public virtual void TestEnums()
 {
     foreach (YarnApplicationState applicationState in YarnApplicationState.Values())
     {
         TypeConverter.FromYarn(applicationState, FinalApplicationStatus.Failed);
     }
     // ad hoc test of NEW_SAVING, which is newly added
     NUnit.Framework.Assert.AreEqual(JobStatus.State.Prep, TypeConverter.FromYarn(YarnApplicationState
                                                                                  .NewSaving, FinalApplicationStatus.Failed));
     foreach (TaskType taskType in TaskType.Values())
     {
         TypeConverter.FromYarn(taskType);
     }
     foreach (JobState jobState in JobState.Values())
     {
         TypeConverter.FromYarn(jobState);
     }
     foreach (QueueState queueState in QueueState.Values())
     {
         TypeConverter.FromYarn(queueState);
     }
     foreach (TaskState taskState in TaskState.Values())
     {
         TypeConverter.FromYarn(taskState);
     }
 }
示例#3
0
        public virtual void TestFromYarn()
        {
            int appStartTime                       = 612354;
            int appFinishTime                      = 612355;
            YarnApplicationState state             = YarnApplicationState.Running;
            ApplicationId        applicationId     = ApplicationId.NewInstance(0, 0);
            ApplicationReport    applicationReport = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord
                                                     <ApplicationReport>();

            applicationReport.SetApplicationId(applicationId);
            applicationReport.SetYarnApplicationState(state);
            applicationReport.SetStartTime(appStartTime);
            applicationReport.SetFinishTime(appFinishTime);
            applicationReport.SetUser("TestTypeConverter-user");
            ApplicationResourceUsageReport appUsageRpt = Org.Apache.Hadoop.Yarn.Util.Records.
                                                         NewRecord <ApplicationResourceUsageReport>();
            Resource r = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <Resource>();

            r.SetMemory(2048);
            appUsageRpt.SetNeededResources(r);
            appUsageRpt.SetNumReservedContainers(1);
            appUsageRpt.SetNumUsedContainers(3);
            appUsageRpt.SetReservedResources(r);
            appUsageRpt.SetUsedResources(r);
            applicationReport.SetApplicationResourceUsageReport(appUsageRpt);
            JobStatus jobStatus = TypeConverter.FromYarn(applicationReport, "dummy-jobfile");

            NUnit.Framework.Assert.AreEqual(appStartTime, jobStatus.GetStartTime());
            NUnit.Framework.Assert.AreEqual(appFinishTime, jobStatus.GetFinishTime());
            NUnit.Framework.Assert.AreEqual(state.ToString(), jobStatus.GetState().ToString()
                                            );
        }
示例#4
0
        private static void ValidateStates(string stateQuery, ICollection <string> statesQuery
                                           )
        {
            // stateQuery is deprecated.
            if (stateQuery != null && !stateQuery.IsEmpty())
            {
                statesQuery.AddItem(stateQuery);
            }
            ICollection <string> appStates = ParseQueries(statesQuery, true);

            foreach (string appState in appStates)
            {
                switch (YarnApplicationState.ValueOf(StringUtils.ToUpperCase(appState)))
                {
                case YarnApplicationState.Finished:
                case YarnApplicationState.Failed:
                case YarnApplicationState.Killed:
                {
                    continue;
                }

                default:
                {
                    throw new BadRequestException("Invalid application-state " + appState + " specified. It should be a final state"
                                                  );
                }
                }
            }
        }
示例#5
0
 public AppInfo(ApplicationReport app)
 {
     // JAXB needs this
     appId = app.GetApplicationId().ToString();
     if (app.GetCurrentApplicationAttemptId() != null)
     {
         currentAppAttemptId = app.GetCurrentApplicationAttemptId().ToString();
     }
     user                = app.GetUser();
     queue               = app.GetQueue();
     name                = app.GetName();
     type                = app.GetApplicationType();
     host                = app.GetHost();
     rpcPort             = app.GetRpcPort();
     appState            = app.GetYarnApplicationState();
     diagnosticsInfo     = app.GetDiagnostics();
     trackingUrl         = app.GetTrackingUrl();
     originalTrackingUrl = app.GetOriginalTrackingUrl();
     submittedTime       = app.GetStartTime();
     startedTime         = app.GetStartTime();
     finishedTime        = app.GetFinishTime();
     elapsedTime         = Times.Elapsed(startedTime, finishedTime);
     finalAppStatus      = app.GetFinalApplicationStatus();
     progress            = app.GetProgress() * 100;
     // in percent
     if (app.GetApplicationTags() != null && !app.GetApplicationTags().IsEmpty())
     {
         this.applicationTags = StringHelper.CsvJoiner.Join(app.GetApplicationTags());
     }
 }
        /// <exception cref="System.Exception"/>
        private void VerifySubmitApp(MockRM rm, RMApp app, ApplicationId expectedAppId)
        {
            int maxWaittingTimes = 20;
            int count            = 0;

            while (true)
            {
                YarnApplicationState state = rm.GetApplicationReport(app.GetApplicationId()).GetYarnApplicationState
                                                 ();
                if (!state.Equals(YarnApplicationState.New) && !state.Equals(YarnApplicationState
                                                                             .NewSaving))
                {
                    break;
                }
                if (count > maxWaittingTimes)
                {
                    break;
                }
                Sharpen.Thread.Sleep(200);
                count++;
            }
            // Verify submittion is successful
            YarnApplicationState state_1 = rm.GetApplicationReport(app.GetApplicationId()).GetYarnApplicationState
                                               ();

            NUnit.Framework.Assert.IsTrue(state_1 == YarnApplicationState.Accepted || state_1
                                          == YarnApplicationState.Submitted);
            NUnit.Framework.Assert.AreEqual(expectedAppId, app.GetApplicationId());
        }
示例#7
0
 public StatisticsItemInfo(YarnApplicationState state, string type, long count)
 {
     // JAXB needs this
     this.state = state;
     this.type  = type;
     this.count = count;
 }
示例#8
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        /// <exception cref="System.Exception"/>
        protected internal virtual void FetchData()
        {
            reqAppStates = EnumSet.NoneOf <YarnApplicationState>();
            string reqStateString = $(YarnWebParams.AppState);

            if (reqStateString != null && !reqStateString.IsEmpty())
            {
                string[] appStateStrings = reqStateString.Split(",");
                foreach (string stateString in appStateStrings)
                {
                    reqAppStates.AddItem(YarnApplicationState.ValueOf(stateString.Trim()));
                }
            }
            callerUGI = GetCallerUGI();
            GetApplicationsRequest request = GetApplicationsRequest.NewInstance(reqAppStates);
            string appsNumStr = $(YarnWebParams.AppsNum);

            if (appsNumStr != null && !appsNumStr.IsEmpty())
            {
                long appsNum = long.Parse(appsNumStr);
                request.SetLimit(appsNum);
            }
            if (callerUGI == null)
            {
                appReports = appBaseProt.GetApplications(request).GetApplicationList();
            }
            else
            {
                appReports = callerUGI.DoAs(new _PrivilegedExceptionAction_87(this, request));
            }
        }
 public override void SetYarnApplicationState(YarnApplicationState state)
 {
     MaybeInitBuilder();
     if (state == null)
     {
         builder.ClearYarnApplicationState();
         return;
     }
     builder.SetYarnApplicationState(ConvertToProtoFormat(state));
 }
示例#10
0
 /// <summary>Monitor the submitted application for completion.</summary>
 /// <remarks>
 /// Monitor the submitted application for completion.
 /// Kill application if time expires.
 /// </remarks>
 /// <param name="appId">Application Id of application to be monitored</param>
 /// <returns>true if application completed successfully</returns>
 /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
 /// <exception cref="System.IO.IOException"/>
 private bool MonitorApplication(ApplicationId appId)
 {
     while (true)
     {
         // Check app status every 1 second.
         try
         {
             Sharpen.Thread.Sleep(1000);
         }
         catch (Exception)
         {
             Log.Debug("Thread sleep in monitoring loop interrupted");
         }
         // Get application report for the appId we are interested in
         ApplicationReport report = yarnClient.GetApplicationReport(appId);
         Log.Info("Got application report from ASM for" + ", appId=" + appId.GetId() + ", clientToAMToken="
                  + report.GetClientToAMToken() + ", appDiagnostics=" + report.GetDiagnostics() +
                  ", appMasterHost=" + report.GetHost() + ", appQueue=" + report.GetQueue() + ", appMasterRpcPort="
                  + report.GetRpcPort() + ", appStartTime=" + report.GetStartTime() + ", yarnAppState="
                  + report.GetYarnApplicationState().ToString() + ", distributedFinalState=" + report
                  .GetFinalApplicationStatus().ToString() + ", appTrackingUrl=" + report.GetTrackingUrl
                      () + ", appUser="******"Application has completed successfully. Breaking monitoring loop");
                 return(true);
             }
             else
             {
                 Log.Info("Application did finished unsuccessfully." + " YarnState=" + state.ToString
                              () + ", DSFinalStatus=" + dsStatus.ToString() + ". Breaking monitoring loop");
                 return(false);
             }
         }
         else
         {
             if (YarnApplicationState.Killed == state || YarnApplicationState.Failed == state)
             {
                 Log.Info("Application did not finish." + " YarnState=" + state.ToString() + ", DSFinalStatus="
                          + dsStatus.ToString() + ". Breaking monitoring loop");
                 return(false);
             }
         }
         if (Runtime.CurrentTimeMillis() > (clientStartTime + clientTimeout))
         {
             Log.Info("Reached client specified timeout for application. Killing application");
             ForceKillApplication(appId);
             return(false);
         }
     }
 }
示例#11
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        private YarnClient CreateMockYarnClient(YarnApplicationState appState)
        {
            YarnClient        mockClient    = Org.Mockito.Mockito.Mock <YarnClient>();
            ApplicationReport mockAppReport = Org.Mockito.Mockito.Mock <ApplicationReport>();

            Org.Mockito.Mockito.DoReturn(appState).When(mockAppReport).GetYarnApplicationState
                ();
            Org.Mockito.Mockito.DoReturn(mockAppReport).When(mockClient).GetApplicationReport
                (Matchers.Any <ApplicationId>());
            return(mockClient);
        }
 public ApplicationFinishedEvent(ApplicationId appId, string diagnosticsInfo, FinalApplicationStatus
                                 appStatus, YarnApplicationState state, ApplicationAttemptId latestAppAttemptId,
                                 long finishedTime, RMAppMetrics appMetrics)
     : base(SystemMetricsEventType.AppFinished, finishedTime)
 {
     this.appId              = appId;
     this.diagnosticsInfo    = diagnosticsInfo;
     this.appStatus          = appStatus;
     this.latestAppAttemptId = latestAppAttemptId;
     this.state              = state;
     this.appMetrics         = appMetrics;
 }
        public static ApplicationFinishData NewInstance(ApplicationId applicationId, long
                                                        finishTime, string diagnosticsInfo, FinalApplicationStatus finalApplicationStatus
                                                        , YarnApplicationState yarnApplicationState)
        {
            ApplicationFinishData appFD = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <ApplicationFinishData
                                                                                         >();

            appFD.SetApplicationId(applicationId);
            appFD.SetFinishTime(finishTime);
            appFD.SetDiagnosticsInfo(diagnosticsInfo);
            appFD.SetFinalApplicationStatus(finalApplicationStatus);
            appFD.SetYarnApplicationState(yarnApplicationState);
            return(appFD);
        }
示例#14
0
        private string GetAllValidApplicationStates()
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("The valid application state can be" + " one of the following: ");
            sb.Append(AllstatesOption + ",");
            foreach (YarnApplicationState appState in YarnApplicationState.Values())
            {
                sb.Append(appState + ",");
            }
            string output = sb.ToString();

            return(Sharpen.Runtime.Substring(output, 0, output.Length - 1));
        }
示例#15
0
        public static JobStatus.State FromYarn(YarnApplicationState yarnApplicationState,
                                               FinalApplicationStatus finalApplicationStatus)
        {
            switch (yarnApplicationState)
            {
            case YarnApplicationState.New:
            case YarnApplicationState.NewSaving:
            case YarnApplicationState.Submitted:
            case YarnApplicationState.Accepted:
            {
                return(JobStatus.State.Prep);
            }

            case YarnApplicationState.Running:
            {
                return(JobStatus.State.Running);
            }

            case YarnApplicationState.Finished:
            {
                if (finalApplicationStatus == FinalApplicationStatus.Succeeded)
                {
                    return(JobStatus.State.Succeeded);
                }
                else
                {
                    if (finalApplicationStatus == FinalApplicationStatus.Killed)
                    {
                        return(JobStatus.State.Killed);
                    }
                }
                goto case YarnApplicationState.Failed;
            }

            case YarnApplicationState.Failed:
            {
                return(JobStatus.State.Failed);
            }

            case YarnApplicationState.Killed:
            {
                return(JobStatus.State.Killed);
            }
            }
            throw new YarnRuntimeException("Unrecognized application state: " + yarnApplicationState
                                           );
        }
示例#16
0
 protected override void Render(HtmlBlock.Block html)
 {
     Hamlet.UL <Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > mainList = html
                                                                                      .Div("#nav").H3("Cluster").Ul().Li().A(Url("cluster"), "About").().Li().A(Url("nodes"
                                                                                                                                                                    ), "Nodes").().Li().A(Url("nodelabels"), "Node Labels").();
     Hamlet.UL <Hamlet.LI <Hamlet.UL <Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet
                                                  > > > > subAppsList = mainList.Li().A(Url("apps"), "Applications").Ul();
     subAppsList.Li().();
     foreach (YarnApplicationState state in YarnApplicationState.Values())
     {
         subAppsList.Li().A(Url("apps", state.ToString()), state.ToString()).();
     }
     subAppsList.().();
     mainList.Li().A(Url("scheduler"), "Scheduler").().().H3("Tools").Ul().Li().A("/conf"
                                                                                  , "Configuration").().Li().A("/logs", "Local logs").().Li().A("/stacks", "Server stacks"
                                                                                                                                                ).().Li().A("/jmx?qry=Hadoop:*", "Server metrics").().().();
 }
        public static ApplicationHistoryData NewInstance(ApplicationId applicationId, string
                                                         applicationName, string applicationType, string queue, string user, long submitTime
                                                         , long startTime, long finishTime, string diagnosticsInfo, FinalApplicationStatus
                                                         finalApplicationStatus, YarnApplicationState yarnApplicationState)
        {
            ApplicationHistoryData appHD = new ApplicationHistoryData();

            appHD.SetApplicationId(applicationId);
            appHD.SetApplicationName(applicationName);
            appHD.SetApplicationType(applicationType);
            appHD.SetQueue(queue);
            appHD.SetUser(user);
            appHD.SetSubmitTime(submitTime);
            appHD.SetStartTime(startTime);
            appHD.SetFinishTime(finishTime);
            appHD.SetDiagnosticsInfo(diagnosticsInfo);
            appHD.SetFinalApplicationStatus(finalApplicationStatus);
            appHD.SetYarnApplicationState(yarnApplicationState);
            return(appHD);
        }
        public override void SetApplicationStates(ICollection <string> applicationStates)
        {
            EnumSet <YarnApplicationState> appStates = null;

            foreach (YarnApplicationState state in YarnApplicationState.Values())
            {
                if (applicationStates.Contains(StringUtils.ToLowerCase(state.ToString())))
                {
                    if (appStates == null)
                    {
                        appStates = EnumSet.Of(state);
                    }
                    else
                    {
                        appStates.AddItem(state);
                    }
                }
            }
            SetApplicationStates(appStates);
        }
示例#19
0
        protected internal static ICollection <string> ParseQueries(ICollection <string> queries
                                                                    , bool isState)
        {
            ICollection <string> @params = new HashSet <string>();

            if (!queries.IsEmpty())
            {
                foreach (string query in queries)
                {
                    if (query != null && !query.Trim().IsEmpty())
                    {
                        string[] paramStrs = query.Split(",");
                        foreach (string paramStr in paramStrs)
                        {
                            if (paramStr != null && !paramStr.Trim().IsEmpty())
                            {
                                if (isState)
                                {
                                    try
                                    {
                                        // enum string is in the uppercase
                                        YarnApplicationState.ValueOf(StringUtils.ToUpperCase(paramStr.Trim()));
                                    }
                                    catch (RuntimeException)
                                    {
                                        YarnApplicationState[] stateArray = YarnApplicationState.Values();
                                        string allAppStates = Arrays.ToString(stateArray);
                                        throw new BadRequestException("Invalid application-state " + paramStr.Trim() + " specified. It should be one of "
                                                                      + allAppStates);
                                    }
                                }
                                @params.AddItem(StringUtils.ToLowerCase(paramStr.Trim()));
                            }
                        }
                    }
                }
            }
            return(@params);
        }
示例#20
0
        /// <summary>
        /// Lists the applications matching the given application Types And application
        /// States present in the Resource Manager
        /// </summary>
        /// <param name="appTypes"/>
        /// <param name="appStates"/>
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        private void ListApplications(ICollection <string> appTypes, EnumSet <YarnApplicationState
                                                                              > appStates)
        {
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(sysout, Sharpen.Extensions.GetEncoding
                                                                            ("UTF-8")));

            if (allAppStates)
            {
                foreach (YarnApplicationState appState in YarnApplicationState.Values())
                {
                    appStates.AddItem(appState);
                }
            }
            else
            {
                if (appStates.IsEmpty())
                {
                    appStates.AddItem(YarnApplicationState.Running);
                    appStates.AddItem(YarnApplicationState.Accepted);
                    appStates.AddItem(YarnApplicationState.Submitted);
                }
            }
            IList <ApplicationReport> appsReport = client.GetApplications(appTypes, appStates);

            writer.WriteLine("Total number of applications (application-types: " + appTypes +
                             " and states: " + appStates + ")" + ":" + appsReport.Count);
            writer.Printf(ApplicationsPattern, "Application-Id", "Application-Name", "Application-Type"
                          , "User", "Queue", "State", "Final-State", "Progress", "Tracking-URL");
            foreach (ApplicationReport appReport in appsReport)
            {
                DecimalFormat formatter = new DecimalFormat("###.##%");
                string        progress  = formatter.Format(appReport.GetProgress());
                writer.Printf(ApplicationsPattern, appReport.GetApplicationId(), appReport.GetName
                                  (), appReport.GetApplicationType(), appReport.GetUser(), appReport.GetQueue(), appReport
                              .GetYarnApplicationState(), appReport.GetFinalApplicationStatus(), progress, appReport
                              .GetOriginalTrackingUrl());
            }
            writer.Flush();
        }
示例#21
0
        private ApplicationReport GetApplicationReport(YarnApplicationState yarnApplicationState
                                                       , FinalApplicationStatus finalApplicationStatus)
        {
            ApplicationReport appReport = Org.Mockito.Mockito.Mock <ApplicationReport>();
            ApplicationResourceUsageReport appResources = Org.Mockito.Mockito.Mock <ApplicationResourceUsageReport
                                                                                    >();

            Org.Mockito.Mockito.When(appReport.GetApplicationId()).ThenReturn(ApplicationId.NewInstance
                                                                                  (0, 0));
            Org.Mockito.Mockito.When(appResources.GetNeededResources()).ThenReturn(Org.Apache.Hadoop.Yarn.Util.Records
                                                                                   .NewRecord <Resource>());
            Org.Mockito.Mockito.When(appResources.GetReservedResources()).ThenReturn(Org.Apache.Hadoop.Yarn.Util.Records
                                                                                     .NewRecord <Resource>());
            Org.Mockito.Mockito.When(appResources.GetUsedResources()).ThenReturn(Org.Apache.Hadoop.Yarn.Util.Records
                                                                                 .NewRecord <Resource>());
            Org.Mockito.Mockito.When(appReport.GetApplicationResourceUsageReport()).ThenReturn
                (appResources);
            Org.Mockito.Mockito.When(appReport.GetYarnApplicationState()).ThenReturn(yarnApplicationState
                                                                                     );
            Org.Mockito.Mockito.When(appReport.GetFinalApplicationStatus()).ThenReturn(finalApplicationStatus
                                                                                       );
            return(appReport);
        }
            /// <exception cref="System.IO.IOException"/>
            private static bool IsApplicationTerminated(ApplicationId appId, ApplicationClientProtocol
                                                        rmClient)
            {
                ApplicationReport appReport = null;

                try
                {
                    appReport = rmClient.GetApplicationReport(GetApplicationReportRequest.NewInstance
                                                                  (appId)).GetApplicationReport();
                }
                catch (ApplicationNotFoundException)
                {
                    return(true);
                }
                catch (YarnException e)
                {
                    throw new IOException(e);
                }
                YarnApplicationState currentState = appReport.GetYarnApplicationState();

                return(currentState == YarnApplicationState.Failed || currentState == YarnApplicationState
                       .Killed || currentState == YarnApplicationState.Finished);
            }
示例#23
0
        private string ClarifyAppState(YarnApplicationState state)
        {
            string ret = state.ToString();

            switch (state)
            {
            case YarnApplicationState.New:
            {
                return(ret + ": waiting for application to be initialized");
            }

            case YarnApplicationState.NewSaving:
            {
                return(ret + ": waiting for application to be persisted in state-store.");
            }

            case YarnApplicationState.Submitted:
            {
                return(ret + ": waiting for application to be accepted by scheduler.");
            }

            case YarnApplicationState.Accepted:
            {
                return(ret + ": waiting for AM container to be allocated, launched and" + " register with RM.");
            }

            case YarnApplicationState.Running:
            {
                return(ret + ": AM has registered with RM and started running.");
            }

            default:
            {
                return(ret);
            }
            }
        }
示例#24
0
        public static RMApp NewApplication(int i)
        {
            ApplicationAttemptId appAttemptId = ApplicationAttemptId.NewInstance(NewAppID(i),
                                                                                 0);
            Container masterContainer = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <Container
                                                                                       >();
            ContainerId containerId = ContainerId.NewContainerId(appAttemptId, 0);

            masterContainer.SetId(containerId);
            masterContainer.SetNodeHttpAddress("node:port");
            string user   = NewUserName();
            string name   = NewAppName();
            string queue  = NewQueue();
            long   start  = 123456 + i * 1000;
            long   finish = 234567 + i * 1000;
            string type   = YarnConfiguration.DefaultApplicationType;

            YarnApplicationState[] allStates = YarnApplicationState.Values();
            YarnApplicationState   state     = allStates[i % allStates.Length];
            int maxAppAttempts = i % 1000;

            return(new _ApplicationBase_211(appAttemptId, user, name, type, queue, start, finish
                                            , state, maxAppAttempts));
        }
 public virtual void SetYarnApplicationState(YarnApplicationState yarnApplicationState
                                             )
 {
     this.yarnApplicationState = yarnApplicationState;
 }
示例#26
0
        /// <summary>Monitor the submitted application for completion.</summary>
        /// <remarks>
        /// Monitor the submitted application for completion. Kill application if time
        /// expires.
        /// </remarks>
        /// <param name="appId">Application Id of application to be monitored</param>
        /// <returns>true if application completed successfully</returns>
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        private ApplicationReport MonitorApplication(ApplicationId appId, ICollection <YarnApplicationState
                                                                                       > finalState)
        {
            long          foundAMCompletedTime = 0;
            StringBuilder expectedFinalState   = new StringBuilder();
            bool          first = true;

            foreach (YarnApplicationState state in finalState)
            {
                if (first)
                {
                    first = false;
                    expectedFinalState.Append(state.ToString());
                }
                else
                {
                    expectedFinalState.Append("," + state.ToString());
                }
            }
            while (true)
            {
                // Check app status every 1 second.
                try
                {
                    Sharpen.Thread.Sleep(1000);
                }
                catch (Exception)
                {
                    Log.Debug("Thread sleep in monitoring loop interrupted");
                }
                // Get application report for the appId we are interested in
                ApplicationReport report = rmClient.GetApplicationReport(appId);
                Log.Info("Got application report from ASM for" + ", appId=" + appId.GetId() + ", appAttemptId="
                         + report.GetCurrentApplicationAttemptId() + ", clientToAMToken=" + report.GetClientToAMToken
                             () + ", appDiagnostics=" + report.GetDiagnostics() + ", appMasterHost=" + report
                         .GetHost() + ", appQueue=" + report.GetQueue() + ", appMasterRpcPort=" + report.
                         GetRpcPort() + ", appStartTime=" + report.GetStartTime() + ", yarnAppState=" + report
                         .GetYarnApplicationState().ToString() + ", distributedFinalState=" + report.GetFinalApplicationStatus
                             ().ToString() + ", appTrackingUrl=" + report.GetTrackingUrl() + ", appUser="******"Waited " + AmStateWaitTimeoutMs / 1000 + " seconds after process completed for AppReport"
                                     + " to reach desired final state. Not waiting anymore." + "CurrentState = " + state_1
                                     + ", ExpectedStates = " + expectedFinalState.ToString());
                            throw new RuntimeException("Failed to receive final expected state" + " in ApplicationReport"
                                                       + ", CurrentState=" + state_1 + ", ExpectedStates=" + expectedFinalState.ToString
                                                           ());
                        }
                    }
                }
            }
        }
示例#27
0
 /// <exception cref="System.IO.IOException"/>
 /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
 public virtual bool Run()
 {
     Log.Info("Starting Client");
     // Connect to ResourceManager
     rmClient.Start();
     try
     {
         // Create launch context for app master
         Log.Info("Setting up application submission context for ASM");
         ApplicationSubmissionContext appContext = rmClient.CreateApplication().GetApplicationSubmissionContext
                                                       ();
         ApplicationId appId = appContext.GetApplicationId();
         // set the application name
         appContext.SetApplicationName(appName);
         // Set the priority for the application master
         Priority pri = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <Priority>();
         pri.SetPriority(amPriority);
         appContext.SetPriority(pri);
         // Set the queue to which this application is to be submitted in the RM
         appContext.SetQueue(amQueue);
         // Set up the container launch context for the application master
         ContainerLaunchContext amContainer = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord
                                              <ContainerLaunchContext>();
         appContext.SetAMContainerSpec(amContainer);
         // unmanaged AM
         appContext.SetUnmanagedAM(true);
         Log.Info("Setting unmanaged AM");
         // Submit the application to the applications manager
         Log.Info("Submitting application to ASM");
         rmClient.SubmitApplication(appContext);
         ApplicationReport appReport = MonitorApplication(appId, EnumSet.Of(YarnApplicationState
                                                                            .Accepted, YarnApplicationState.Killed, YarnApplicationState.Failed, YarnApplicationState
                                                                            .Finished));
         if (appReport.GetYarnApplicationState() == YarnApplicationState.Accepted)
         {
             // Monitor the application attempt to wait for launch state
             ApplicationAttemptReport attemptReport = MonitorCurrentAppAttempt(appId, YarnApplicationAttemptState
                                                                               .Launched);
             ApplicationAttemptId attemptId = attemptReport.GetApplicationAttemptId();
             Log.Info("Launching AM with application attempt id " + attemptId);
             // launch AM
             LaunchAM(attemptId);
             // Monitor the application for end state
             appReport = MonitorApplication(appId, EnumSet.Of(YarnApplicationState.Killed, YarnApplicationState
                                                              .Failed, YarnApplicationState.Finished));
         }
         YarnApplicationState   appState  = appReport.GetYarnApplicationState();
         FinalApplicationStatus appStatus = appReport.GetFinalApplicationStatus();
         Log.Info("App ended with state: " + appReport.GetYarnApplicationState() + " and status: "
                  + appStatus);
         bool success;
         if (YarnApplicationState.Finished == appState && FinalApplicationStatus.Succeeded
             == appStatus)
         {
             Log.Info("Application has completed successfully.");
             success = true;
         }
         else
         {
             Log.Info("Application did finished unsuccessfully." + " YarnState=" + appState.ToString
                          () + ", FinalStatus=" + appStatus.ToString());
             success = false;
         }
         return(success);
     }
     finally
     {
         rmClient.Stop();
     }
 }
 private YarnProtos.YarnApplicationStateProto ConvertToProtoFormat(YarnApplicationState
                                                                   s)
 {
     return(ProtoUtils.ConvertToProtoFormat(s));
 }
示例#29
0
 public AppInfo(ResourceManager rm, RMApp app, bool hasAccess, string schemePrefix
                )
 {
     // these are ok for any user to see
     // these are only allowed if acls allow
     // preemption info fields
     // JAXB needs this
     this.schemePrefix = schemePrefix;
     if (app != null)
     {
         string trackingUrl = app.GetTrackingUrl();
         this.state = app.CreateApplicationState();
         this.trackingUrlIsNotReady = trackingUrl == null || trackingUrl.IsEmpty() || YarnApplicationState
                                      .New == this.state || YarnApplicationState.NewSaving == this.state || YarnApplicationState
                                      .Submitted == this.state || YarnApplicationState.Accepted == this.state;
         this.trackingUI = this.trackingUrlIsNotReady ? "UNASSIGNED" : (app.GetFinishTime(
                                                                            ) == 0 ? "ApplicationMaster" : "History");
         if (!trackingUrlIsNotReady)
         {
             this.trackingUrl       = WebAppUtils.GetURLWithScheme(schemePrefix, trackingUrl);
             this.trackingUrlPretty = this.trackingUrl;
         }
         else
         {
             this.trackingUrlPretty = "UNASSIGNED";
         }
         this.applicationId   = app.GetApplicationId();
         this.applicationType = app.GetApplicationType();
         this.appIdNum        = app.GetApplicationId().GetId().ToString();
         this.id          = app.GetApplicationId().ToString();
         this.user        = app.GetUser().ToString();
         this.name        = app.GetName().ToString();
         this.queue       = app.GetQueue().ToString();
         this.progress    = app.GetProgress() * 100;
         this.diagnostics = app.GetDiagnostics().ToString();
         if (diagnostics == null || diagnostics.IsEmpty())
         {
             this.diagnostics = string.Empty;
         }
         if (app.GetApplicationTags() != null && !app.GetApplicationTags().IsEmpty())
         {
             this.applicationTags = Joiner.On(',').Join(app.GetApplicationTags());
         }
         this.finalStatus = app.GetFinalApplicationStatus();
         this.clusterId   = ResourceManager.GetClusterTimeStamp();
         if (hasAccess)
         {
             this.startedTime  = app.GetStartTime();
             this.finishedTime = app.GetFinishTime();
             this.elapsedTime  = Times.Elapsed(app.GetStartTime(), app.GetFinishTime());
             RMAppAttempt attempt = app.GetCurrentAppAttempt();
             if (attempt != null)
             {
                 Container masterContainer = attempt.GetMasterContainer();
                 if (masterContainer != null)
                 {
                     this.amContainerLogsExist = true;
                     this.amContainerLogs      = WebAppUtils.GetRunningLogURL(schemePrefix + masterContainer
                                                                              .GetNodeHttpAddress(), ConverterUtils.ToString(masterContainer.GetId()), app.GetUser
                                                                                  ());
                     this.amHostHttpAddress = masterContainer.GetNodeHttpAddress();
                 }
                 ApplicationResourceUsageReport resourceReport = attempt.GetApplicationResourceUsageReport
                                                                     ();
                 if (resourceReport != null)
                 {
                     Resource usedResources = resourceReport.GetUsedResources();
                     allocatedMB       = usedResources.GetMemory();
                     allocatedVCores   = usedResources.GetVirtualCores();
                     runningContainers = resourceReport.GetNumUsedContainers();
                 }
                 resourceRequests = ((AbstractYarnScheduler)rm.GetRMContext().GetScheduler()).GetPendingResourceRequestsForAttempt
                                        (attempt.GetAppAttemptId());
             }
         }
         // copy preemption info fields
         RMAppMetrics appMetrics = app.GetRMAppMetrics();
         numAMContainerPreempted    = appMetrics.GetNumAMContainersPreempted();
         preemptedResourceMB        = appMetrics.GetResourcePreempted().GetMemory();
         numNonAMContainerPreempted = appMetrics.GetNumNonAMContainersPreempted();
         preemptedResourceVCores    = appMetrics.GetResourcePreempted().GetVirtualCores();
         memorySeconds = appMetrics.GetMemorySeconds();
         vcoreSeconds  = appMetrics.GetVcoreSeconds();
     }
 }
示例#30
0
        /// <exception cref="Org.Apache.Hadoop.Yarn.Exceptions.YarnException"/>
        /// <exception cref="System.IO.IOException"/>
        public override ApplicationId SubmitApplication(ApplicationSubmissionContext appContext
                                                        )
        {
            ApplicationId applicationId = appContext.GetApplicationId();

            if (applicationId == null)
            {
                throw new ApplicationIdNotProvidedException("ApplicationId is not provided in ApplicationSubmissionContext"
                                                            );
            }
            SubmitApplicationRequest request = Org.Apache.Hadoop.Yarn.Util.Records.NewRecord <
                SubmitApplicationRequest>();

            request.SetApplicationSubmissionContext(appContext);
            // Automatically add the timeline DT into the CLC
            // Only when the security and the timeline service are both enabled
            if (IsSecurityEnabled() && timelineServiceEnabled)
            {
                AddTimelineDelegationToken(appContext.GetAMContainerSpec());
            }
            //TODO: YARN-1763:Handle RM failovers during the submitApplication call.
            rmClient.SubmitApplication(request);
            int  pollCount = 0;
            long startTime = Runtime.CurrentTimeMillis();
            EnumSet <YarnApplicationState> waitingStates = EnumSet.Of(YarnApplicationState.New
                                                                      , YarnApplicationState.NewSaving, YarnApplicationState.Submitted);
            EnumSet <YarnApplicationState> failToSubmitStates = EnumSet.Of(YarnApplicationState
                                                                           .Failed, YarnApplicationState.Killed);

            while (true)
            {
                try
                {
                    ApplicationReport    appReport = GetApplicationReport(applicationId);
                    YarnApplicationState state     = appReport.GetYarnApplicationState();
                    if (!waitingStates.Contains(state))
                    {
                        if (failToSubmitStates.Contains(state))
                        {
                            throw new YarnException("Failed to submit " + applicationId + " to YARN : " + appReport
                                                    .GetDiagnostics());
                        }
                        Log.Info("Submitted application " + applicationId);
                        break;
                    }
                    long elapsedMillis = Runtime.CurrentTimeMillis() - startTime;
                    if (EnforceAsyncAPITimeout() && elapsedMillis >= asyncApiPollTimeoutMillis)
                    {
                        throw new YarnException("Timed out while waiting for application " + applicationId
                                                + " to be submitted successfully");
                    }
                    // Notify the client through the log every 10 poll, in case the client
                    // is blocked here too long.
                    if (++pollCount % 10 == 0)
                    {
                        Log.Info("Application submission is not finished, " + "submitted application " +
                                 applicationId + " is still in " + state);
                    }
                    try
                    {
                        Sharpen.Thread.Sleep(submitPollIntervalMillis);
                    }
                    catch (Exception)
                    {
                        Log.Error("Interrupted while waiting for application " + applicationId + " to be successfully submitted."
                                  );
                    }
                }
                catch (ApplicationNotFoundException)
                {
                    // FailOver or RM restart happens before RMStateStore saves
                    // ApplicationState
                    Log.Info("Re-submit application " + applicationId + "with the " + "same ApplicationSubmissionContext"
                             );
                    rmClient.SubmitApplication(request);
                }
            }
            return(applicationId);
        }