예제 #1
0
        public virtual int DumpAContainersLogs(string appId, string containerId, string nodeId
                                               , string jobOwner)
        {
            Path remoteRootLogDir = new Path(GetConf().Get(YarnConfiguration.NmRemoteAppLogDir
                                                           , YarnConfiguration.DefaultNmRemoteAppLogDir));
            string suffix          = LogAggregationUtils.GetRemoteNodeLogDirSuffix(GetConf());
            Path   remoteAppLogDir = LogAggregationUtils.GetRemoteAppLogDir(remoteRootLogDir, ConverterUtils
                                                                            .ToApplicationId(appId), jobOwner, suffix);
            RemoteIterator <FileStatus> nodeFiles;

            try
            {
                Path qualifiedLogDir = FileContext.GetFileContext(GetConf()).MakeQualified(remoteAppLogDir
                                                                                           );
                nodeFiles = FileContext.GetFileContext(qualifiedLogDir.ToUri(), GetConf()).ListStatus
                                (remoteAppLogDir);
            }
            catch (FileNotFoundException)
            {
                LogDirNotExist(remoteAppLogDir.ToString());
                return(-1);
            }
            bool foundContainerLogs = false;

            while (nodeFiles.HasNext())
            {
                FileStatus thisNodeFile = nodeFiles.Next();
                string     fileName     = thisNodeFile.GetPath().GetName();
                if (fileName.Contains(LogAggregationUtils.GetNodeString(nodeId)) && !fileName.EndsWith
                        (LogAggregationUtils.TmpFileSuffix))
                {
                    AggregatedLogFormat.LogReader reader = null;
                    try
                    {
                        reader = new AggregatedLogFormat.LogReader(GetConf(), thisNodeFile.GetPath());
                        if (DumpAContainerLogs(containerId, reader, System.Console.Out, thisNodeFile.GetModificationTime
                                                   ()) > -1)
                        {
                            foundContainerLogs = true;
                        }
                    }
                    finally
                    {
                        if (reader != null)
                        {
                            reader.Close();
                        }
                    }
                }
            }
            if (!foundContainerLogs)
            {
                ContainerLogNotFound(containerId);
                return(-1);
            }
            return(0);
        }
예제 #2
0
        public virtual int DumpAllContainersLogs(ApplicationId appId, string appOwner, TextWriter
                                                 @out)
        {
            Path remoteRootLogDir = new Path(GetConf().Get(YarnConfiguration.NmRemoteAppLogDir
                                                           , YarnConfiguration.DefaultNmRemoteAppLogDir));
            string user         = appOwner;
            string logDirSuffix = LogAggregationUtils.GetRemoteNodeLogDirSuffix(GetConf());
            // TODO Change this to get a list of files from the LAS.
            Path remoteAppLogDir = LogAggregationUtils.GetRemoteAppLogDir(remoteRootLogDir, appId
                                                                          , user, logDirSuffix);
            RemoteIterator <FileStatus> nodeFiles;

            try
            {
                Path qualifiedLogDir = FileContext.GetFileContext(GetConf()).MakeQualified(remoteAppLogDir
                                                                                           );
                nodeFiles = FileContext.GetFileContext(qualifiedLogDir.ToUri(), GetConf()).ListStatus
                                (remoteAppLogDir);
            }
            catch (FileNotFoundException)
            {
                LogDirNotExist(remoteAppLogDir.ToString());
                return(-1);
            }
            bool foundAnyLogs = false;

            while (nodeFiles.HasNext())
            {
                FileStatus thisNodeFile = nodeFiles.Next();
                if (!thisNodeFile.GetPath().GetName().EndsWith(LogAggregationUtils.TmpFileSuffix))
                {
                    AggregatedLogFormat.LogReader reader = new AggregatedLogFormat.LogReader(GetConf(
                                                                                                 ), thisNodeFile.GetPath());
                    try
                    {
                        DataInputStream            valueStream;
                        AggregatedLogFormat.LogKey key = new AggregatedLogFormat.LogKey();
                        valueStream = reader.Next(key);
                        while (valueStream != null)
                        {
                            string containerString = "\n\nContainer: " + key + " on " + thisNodeFile.GetPath(
                                ).GetName();
                            @out.WriteLine(containerString);
                            @out.WriteLine(StringUtils.Repeat("=", containerString.Length));
                            while (true)
                            {
                                try
                                {
                                    AggregatedLogFormat.LogReader.ReadAContainerLogsForALogType(valueStream, @out, thisNodeFile
                                                                                                .GetModificationTime());
                                    foundAnyLogs = true;
                                }
                                catch (EOFException)
                                {
                                    break;
                                }
                            }
                            // Next container
                            key         = new AggregatedLogFormat.LogKey();
                            valueStream = reader.Next(key);
                        }
                    }
                    finally
                    {
                        reader.Close();
                    }
                }
            }
            if (!foundAnyLogs)
            {
                EmptyLogDir(remoteAppLogDir.ToString());
                return(-1);
            }
            return(0);
        }