Esempio n. 1
0
        public virtual void TestContainerLocalizerClosesFilesystems()
        {
            // mocked generics
            // verify filesystems are closed when localizer doesn't fail
            FileContext fs = FileContext.GetLocalFSFileContext();

            spylfs = Org.Mockito.Mockito.Spy(fs.GetDefaultFileSystem());
            ContainerLocalizer localizer = SetupContainerLocalizerForTest();

            Org.Mockito.Mockito.DoNothing().When(localizer).LocalizeFiles(Matchers.Any <LocalizationProtocol
                                                                                        >(), Matchers.Any <CompletionService>(), Matchers.Any <UserGroupInformation>());
            Org.Mockito.Mockito.Verify(localizer, Org.Mockito.Mockito.Never()).CloseFileSystems
                (Matchers.Any <UserGroupInformation>());
            localizer.RunLocalization(nmAddr);
            Org.Mockito.Mockito.Verify(localizer).CloseFileSystems(Matchers.Any <UserGroupInformation
                                                                                 >());
            spylfs = Org.Mockito.Mockito.Spy(fs.GetDefaultFileSystem());
            // verify filesystems are closed when localizer fails
            localizer = SetupContainerLocalizerForTest();
            Org.Mockito.Mockito.DoThrow(new YarnRuntimeException("Forced Failure")).When(localizer
                                                                                         ).LocalizeFiles(Matchers.Any <LocalizationProtocol>(), Matchers.Any <CompletionService
                                                                                                                                                              >(), Matchers.Any <UserGroupInformation>());
            Org.Mockito.Mockito.Verify(localizer, Org.Mockito.Mockito.Never()).CloseFileSystems
                (Matchers.Any <UserGroupInformation>());
            localizer.RunLocalization(nmAddr);
            Org.Mockito.Mockito.Verify(localizer).CloseFileSystems(Matchers.Any <UserGroupInformation
                                                                                 >());
        }
Esempio n. 2
0
        public virtual void TestFcResolveAfs()
        {
            Configuration conf           = new Configuration();
            FileContext   fcLocal        = FileContext.GetLocalFSFileContext();
            FileContext   fcHdfs         = FileContext.GetFileContext(cluster.GetFileSystem().GetUri());
            string        localTestRoot  = helper.GetAbsoluteTestRootDir(fcLocal);
            Path          alphaLocalPath = new Path(fcLocal.GetDefaultFileSystem().GetUri().ToString()
                                                    , new FilePath(localTestRoot, "alpha").GetAbsolutePath());

            DFSTestUtil.CreateFile(FileSystem.GetLocal(conf), alphaLocalPath, 16, (short)1, 2
                                   );
            Path linkTarget = new Path(fcLocal.GetDefaultFileSystem().GetUri().ToString(), localTestRoot
                                       );
            Path hdfsLink = new Path(fcHdfs.GetDefaultFileSystem().GetUri().ToString(), "/tmp/link"
                                     );

            fcHdfs.CreateSymlink(linkTarget, hdfsLink, true);
            Path alphaHdfsPathViaLink = new Path(fcHdfs.GetDefaultFileSystem().GetUri().ToString
                                                     () + "/tmp/link/alpha");
            ICollection <AbstractFileSystem> afsList = fcHdfs.ResolveAbstractFileSystems(alphaHdfsPathViaLink
                                                                                         );

            NUnit.Framework.Assert.AreEqual(2, afsList.Count);
            foreach (AbstractFileSystem afs in afsList)
            {
                if ((!afs.Equals(fcHdfs.GetDefaultFileSystem())) && (!afs.Equals(fcLocal.GetDefaultFileSystem
                                                                                     ())))
                {
                    NUnit.Framework.Assert.Fail("Failed to resolve AFS correctly");
                }
            }
        }
Esempio n. 3
0
        public virtual void TestGetMountPoints()
        {
            ViewFs viewfs = (ViewFs)fcView.GetDefaultFileSystem();

            ViewFs.MountPoint[] mountPoints = viewfs.GetMountPoints();
            Assert.Equal(8, mountPoints.Length);
        }
Esempio n. 4
0
        /// <summary>
        /// Get default file system URI for the cluster (used to ensure consistency
        /// of history done/staging locations) over different context
        /// </summary>
        /// <returns>Default file context</returns>
        private static FileContext GetDefaultFileContext()
        {
            // If FS_DEFAULT_NAME_KEY was set solely by core-default.xml then we ignore
            // ignore it. This prevents defaulting history paths to file system specified
            // by core-default.xml which would not make sense in any case. For a test
            // case to exploit this functionality it should create core-site.xml
            FileContext   fc          = null;
            Configuration defaultConf = new Configuration();

            string[] sources;
            sources = defaultConf.GetPropertySources(CommonConfigurationKeysPublic.FsDefaultNameKey
                                                     );
            if (sources != null && (!Arrays.AsList(sources).Contains("core-default.xml") || sources
                                    .Length > 1))
            {
                try
                {
                    fc = FileContext.GetFileContext(defaultConf);
                    Log.Info("Default file system [" + fc.GetDefaultFileSystem().GetUri() + "]");
                }
                catch (UnsupportedFileSystemException e)
                {
                    Log.Error("Unable to create default file context [" + defaultConf.Get(CommonConfigurationKeysPublic
                                                                                          .FsDefaultNameKey) + "]", e);
                }
            }
            else
            {
                Log.Info("Default file system is set solely " + "by core-default.xml therefore -  ignoring"
                         );
            }
            return(fc);
        }
        // nothing to do or verify here
        /// <exception cref="System.IO.IOException"/>
        /// <exception cref="System.Exception"/>
        public override void StartLocalizer(Path nmPrivateContainerTokensPath, IPEndPoint
                                            nmAddr, string user, string appId, string locId, LocalDirsHandlerService dirsHandler
                                            )
        {
            IList <string> localDirs = dirsHandler.GetLocalDirs();
            IList <string> logDirs   = dirsHandler.GetLogDirs();

            CreateUserLocalDirs(localDirs, user);
            CreateUserCacheDirs(localDirs, user);
            CreateAppDirs(localDirs, user, appId);
            CreateAppLogDirs(appId, logDirs, user);
            // randomly choose the local directory
            Path   appStorageDir = GetWorkingDir(localDirs, user, appId);
            string tokenFn       = string.Format(ContainerLocalizer.TokenFileNameFmt, locId);
            Path   tokenDst      = new Path(appStorageDir, tokenFn);

            CopyFile(nmPrivateContainerTokensPath, tokenDst, user);
            Log.Info("Copying from " + nmPrivateContainerTokensPath + " to " + tokenDst);
            FileContext localizerFc = FileContext.GetFileContext(lfs.GetDefaultFileSystem(),
                                                                 GetConf());

            localizerFc.SetUMask(lfs.GetUMask());
            localizerFc.SetWorkingDirectory(appStorageDir);
            Log.Info("Localizer CWD set to " + appStorageDir + " = " + localizerFc.GetWorkingDirectory
                         ());
            ContainerLocalizer localizer = new ContainerLocalizer(localizerFc, user, appId, locId
                                                                  , GetPaths(localDirs), RecordFactoryProvider.GetRecordFactory(GetConf()));

            // TODO: DO it over RPC for maintaining similarity?
            localizer.RunLocalization(nmAddr);
        }
Esempio n. 6
0
        public virtual void TestFcDelegationToken()
        {
            FileContext        fcHdfs = FileContext.GetFileContext(cluster.GetFileSystem().GetUri());
            AbstractFileSystem afs    = fcHdfs.GetDefaultFileSystem();
            IList <Org.Apache.Hadoop.Security.Token.Token <object> > tokenList = afs.GetDelegationTokens
                                                                                     (UserGroupInformation.GetCurrentUser().GetUserName());

            ((Org.Apache.Hadoop.FS.Hdfs)afs).RenewDelegationToken((Org.Apache.Hadoop.Security.Token.Token
                                                                   <DelegationTokenIdentifier>)tokenList[0]);
            ((Org.Apache.Hadoop.FS.Hdfs)afs).CancelDelegationToken((Org.Apache.Hadoop.Security.Token.Token
                                                                    <AbstractDelegationTokenIdentifier>)tokenList[0]);
        }
Esempio n. 7
0
        public virtual void TestBasicPaths()
        {
            URI uri = fc.GetDefaultFileSystem().GetUri();

            Assert.Equal(chrootedTo.ToUri(), uri);
            Assert.Equal(fc.MakeQualified(new Path(Runtime.GetProperty("user.home"
                                                                       ))), fc.GetWorkingDirectory());
            Assert.Equal(fc.MakeQualified(new Path(Runtime.GetProperty("user.home"
                                                                       ))), fc.GetHomeDirectory());

            /*
             * ChRootedFs as its uri like file:///chrootRoot.
             * This is questionable since path.makequalified(uri, path) ignores
             * the pathPart of a uri. So our notion of chrooted URI is questionable.
             * But if we were to fix Path#makeQualified() then  the next test should
             *  have been:
             *
             * Assert.assertEquals(
             * new Path(chrootedTo + "/foo/bar").makeQualified(
             * FsConstants.LOCAL_FS_URI, null),
             * fc.makeQualified(new Path( "/foo/bar")));
             */
            Assert.Equal(new Path("/foo/bar").MakeQualified(FsConstants.LocalFsUri
                                                            , null), fc.MakeQualified(new Path("/foo/bar")));
        }
Esempio n. 8
0
        public virtual void TestLocalizerTokenIsGettingRemoved()
        {
            FileContext fs = FileContext.GetLocalFSFileContext();

            spylfs = Org.Mockito.Mockito.Spy(fs.GetDefaultFileSystem());
            ContainerLocalizer localizer = SetupContainerLocalizerForTest();

            Org.Mockito.Mockito.DoNothing().When(localizer).LocalizeFiles(Matchers.Any <LocalizationProtocol
                                                                                        >(), Matchers.Any <CompletionService>(), Matchers.Any <UserGroupInformation>());
            localizer.RunLocalization(nmAddr);
            Org.Mockito.Mockito.Verify(spylfs, Org.Mockito.Mockito.Times(1)).Delete(tokenPath
                                                                                    , false);
        }
Esempio n. 9
0
        /// <summary>
        /// Ensure that path belongs to cluster's default file system unless
        /// 1.
        /// </summary>
        /// <remarks>
        /// Ensure that path belongs to cluster's default file system unless
        /// 1. it is already fully qualified.
        /// 2. current job configuration uses default file system
        /// 3. running from a test case without core-site.xml
        /// </remarks>
        /// <param name="sourcePath">source path</param>
        /// <param name="conf">the job configuration</param>
        /// <returns>full qualified path (if necessary) in default file system</returns>
        private static string EnsurePathInDefaultFileSystem(string sourcePath, Configuration
                                                            conf)
        {
            Path        path = new Path(sourcePath);
            FileContext fc   = GetDefaultFileContext();

            if (fc == null || fc.GetDefaultFileSystem().GetUri().ToString().Equals(conf.Get(CommonConfigurationKeysPublic
                                                                                            .FsDefaultNameKey, string.Empty)) || path.ToUri().GetAuthority() != null || path
                .ToUri().GetScheme() != null)
            {
                return(sourcePath);
            }
            return(fc.MakeQualified(path).ToString());
        }
Esempio n. 10
0
        public virtual void SetUp()
        {
            // create the test root on local_fs
            fcTarget   = FileContext.GetLocalFSFileContext();
            chrootedTo = fileContextTestHelper.GetAbsoluteTestRootPath(fcTarget);
            // In case previous test was killed before cleanup
            fcTarget.Delete(chrootedTo, true);
            fcTarget.Mkdir(chrootedTo, FileContext.DefaultPerm, true);
            Configuration conf = new Configuration();

            // ChRoot to the root of the testDirectory
            fc = FileContext.GetFileContext(new ChRootedFs(fcTarget.GetDefaultFileSystem(), chrootedTo
                                                           ), conf);
        }
Esempio n. 11
0
        /// <exception cref="System.IO.IOException"/>
        private LocalResource CreateApplicationResource(FileContext fs, Path p, LocalResourceType
                                                        type)
        {
            LocalResource rsrc     = recordFactory.NewRecordInstance <LocalResource>();
            FileStatus    rsrcStat = fs.GetFileStatus(p);

            rsrc.SetResource(ConverterUtils.GetYarnUrlFromPath(fs.GetDefaultFileSystem().ResolvePath
                                                                   (rsrcStat.GetPath())));
            rsrc.SetSize(rsrcStat.GetLen());
            rsrc.SetTimestamp(rsrcStat.GetModificationTime());
            rsrc.SetType(type);
            rsrc.SetVisibility(LocalResourceVisibility.Application);
            return(rsrc);
        }
Esempio n. 12
0
        public virtual void TestFileContextDoesntDnsResolveLogicalURI()
        {
            FileSystem    fs           = HATestUtil.ConfigureFailoverFs(cluster, conf);
            NameService   spyNS        = SpyOnNameService();
            string        logicalHost  = fs.GetUri().GetHost();
            Configuration haClientConf = fs.GetConf();
            FileContext   fc           = FileContext.GetFileContext(haClientConf);
            Path          root         = new Path("/");

            fc.ListStatus(root);
            fc.ListStatus(fc.MakeQualified(root));
            fc.GetDefaultFileSystem().GetCanonicalServiceName();
            // Ensure that the logical hostname was never resolved.
            Org.Mockito.Mockito.Verify(spyNS, Org.Mockito.Mockito.Never()).LookupAllHostAddr(
                Org.Mockito.Mockito.Eq(logicalHost));
        }
Esempio n. 13
0
        /// <exception cref="System.IO.IOException"/>
        public virtual void TestAccessLinkFromAbstractFileSystem()
        {
            Path file = new Path(TestBaseDir1(), "file");
            Path link = new Path(TestBaseDir1(), "linkToFile");

            CreateAndWriteFile(file);
            wrapper.CreateSymlink(file, link, false);
            try
            {
                AbstractFileSystem afs = fc.GetDefaultFileSystem();
                afs.Open(link);
                NUnit.Framework.Assert.Fail("Opened a link using AFS");
            }
            catch (UnresolvedLinkException)
            {
            }
        }
Esempio n. 14
0
 public Path GetDefaultWorkingDirectory(FileContext fc)
 {
     return(GetTestRootPath(fc, "/user/" + Runtime.GetProperty("user.name")).MakeQualified
                (fc.GetDefaultFileSystem().GetUri(), fc.GetWorkingDirectory()));
 }
Esempio n. 15
0
        public virtual void TestContainerLocalizerMain()
        {
            FileContext fs = FileContext.GetLocalFSFileContext();

            spylfs = Org.Mockito.Mockito.Spy(fs.GetDefaultFileSystem());
            ContainerLocalizer localizer = SetupContainerLocalizerForTest();
            // verify created cache
            IList <Path> privCacheList = new AList <Path>();
            IList <Path> appCacheList  = new AList <Path>();

            foreach (Path p in localDirs)
            {
                Path @base     = new Path(new Path(p, ContainerLocalizer.Usercache), appUser);
                Path privcache = new Path(@base, ContainerLocalizer.Filecache);
                privCacheList.AddItem(privcache);
                Path appDir   = new Path(@base, new Path(ContainerLocalizer.Appcache, appId));
                Path appcache = new Path(appDir, ContainerLocalizer.Filecache);
                appCacheList.AddItem(appcache);
            }
            // mock heartbeat responses from NM
            ResourceLocalizationSpec rsrcA = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);
            ResourceLocalizationSpec rsrcB = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);
            ResourceLocalizationSpec rsrcC = GetMockRsrc(random, LocalResourceVisibility.Application
                                                         , appCacheList[0]);
            ResourceLocalizationSpec rsrcD = GetMockRsrc(random, LocalResourceVisibility.Private
                                                         , privCacheList[0]);

            Org.Mockito.Mockito.When(nmProxy.Heartbeat(Matchers.IsA <LocalizerStatus>())).ThenReturn
                (new MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections.SingletonList
                                                        (rsrcA))).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections
                                                                                                                .SingletonList(rsrcB))).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction
                                                                                                                                                                                      .Live, Sharpen.Collections.SingletonList(rsrcC))).ThenReturn(new MockLocalizerHeartbeatResponse
                                                                                                                                                                                                                                                       (LocalizerAction.Live, Sharpen.Collections.SingletonList(rsrcD))).ThenReturn(new
                                                                                                                                                                                                                                                                                                                                    MockLocalizerHeartbeatResponse(LocalizerAction.Live, Sharpen.Collections.EmptyList
                                                                                                                                                                                                                                                                                                                                                                   <ResourceLocalizationSpec>())).ThenReturn(new MockLocalizerHeartbeatResponse(LocalizerAction
                                                                                                                                                                                                                                                                                                                                                                                                                                                .Die, null));
            LocalResource tRsrcA = rsrcA.GetResource();
            LocalResource tRsrcB = rsrcB.GetResource();
            LocalResource tRsrcC = rsrcC.GetResource();
            LocalResource tRsrcD = rsrcD.GetResource();

            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcA.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcA), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcB.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcB), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcC.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcC), Matchers.IsA <UserGroupInformation>());
            Org.Mockito.Mockito.DoReturn(new TestContainerLocalizer.FakeDownload(rsrcD.GetResource
                                                                                     ().GetResource().GetFile(), true)).When(localizer).Download(Matchers.IsA <Path>()
                                                                                                                                                 , Matchers.Eq(tRsrcD), Matchers.IsA <UserGroupInformation>());
            // run localization
            NUnit.Framework.Assert.AreEqual(0, localizer.RunLocalization(nmAddr));
            foreach (Path p_1 in localDirs)
            {
                Path @base     = new Path(new Path(p_1, ContainerLocalizer.Usercache), appUser);
                Path privcache = new Path(@base, ContainerLocalizer.Filecache);
                // $x/usercache/$user/filecache
                Org.Mockito.Mockito.Verify(spylfs).Mkdir(Matchers.Eq(privcache), Matchers.Eq(CacheDirPerm
                                                                                             ), Matchers.Eq(false));
                Path appDir = new Path(@base, new Path(ContainerLocalizer.Appcache, appId));
                // $x/usercache/$user/appcache/$appId/filecache
                Path appcache = new Path(appDir, ContainerLocalizer.Filecache);
                Org.Mockito.Mockito.Verify(spylfs).Mkdir(Matchers.Eq(appcache), Matchers.Eq(CacheDirPerm
                                                                                            ), Matchers.Eq(false));
            }
            // verify tokens read at expected location
            Org.Mockito.Mockito.Verify(spylfs).Open(tokenPath);
            // verify downloaded resources reported to NM
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcA.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcB.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcC.GetResource())));
            Org.Mockito.Mockito.Verify(nmProxy).Heartbeat(Matchers.ArgThat(new TestContainerLocalizer.HBMatches
                                                                               (rsrcD.GetResource())));
            // verify all HB use localizerID provided
            Org.Mockito.Mockito.Verify(nmProxy, Org.Mockito.Mockito.Never()).Heartbeat(Matchers.ArgThat
                                                                                           (new _ArgumentMatcher_193()));
        }
Esempio n. 16
0
        /// <exception cref="System.IO.IOException"/>
        public virtual ApplicationSubmissionContext CreateApplicationSubmissionContext(Configuration
                                                                                       jobConf, string jobSubmitDir, Credentials ts)
        {
            ApplicationId applicationId = resMgrDelegate.GetApplicationId();
            // Setup resource requirements
            Resource capability = recordFactory.NewRecordInstance <Resource>();

            capability.SetMemory(conf.GetInt(MRJobConfig.MrAmVmemMb, MRJobConfig.DefaultMrAmVmemMb
                                             ));
            capability.SetVirtualCores(conf.GetInt(MRJobConfig.MrAmCpuVcores, MRJobConfig.DefaultMrAmCpuVcores
                                                   ));
            Log.Debug("AppMaster capability = " + capability);
            // Setup LocalResources
            IDictionary <string, LocalResource> localResources = new Dictionary <string, LocalResource
                                                                                 >();
            Path jobConfPath            = new Path(jobSubmitDir, MRJobConfig.JobConfFile);
            URL  yarnUrlForJobSubmitDir = ConverterUtils.GetYarnUrlFromPath(defaultFileContext
                                                                            .GetDefaultFileSystem().ResolvePath(defaultFileContext.MakeQualified(new Path(jobSubmitDir
                                                                                                                                                          ))));

            Log.Debug("Creating setup context, jobSubmitDir url is " + yarnUrlForJobSubmitDir
                      );
            localResources[MRJobConfig.JobConfFile] = CreateApplicationResource(defaultFileContext
                                                                                , jobConfPath, LocalResourceType.File);
            if (jobConf.Get(MRJobConfig.Jar) != null)
            {
                Path          jobJarPath = new Path(jobConf.Get(MRJobConfig.Jar));
                LocalResource rc         = CreateApplicationResource(FileContext.GetFileContext(jobJarPath
                                                                                                .ToUri(), jobConf), jobJarPath, LocalResourceType.Pattern);
                string pattern = conf.GetPattern(JobContext.JarUnpackPattern, JobConf.UnpackJarPatternDefault
                                                 ).Pattern();
                rc.SetPattern(pattern);
                localResources[MRJobConfig.JobJar] = rc;
            }
            else
            {
                // Job jar may be null. For e.g, for pipes, the job jar is the hadoop
                // mapreduce jar itself which is already on the classpath.
                Log.Info("Job jar is not present. " + "Not adding any jar to the list of resources."
                         );
            }
            // TODO gross hack
            foreach (string s in new string[] { MRJobConfig.JobSplit, MRJobConfig.JobSplitMetainfo })
            {
                localResources[MRJobConfig.JobSubmitDir + "/" + s] = CreateApplicationResource(defaultFileContext
                                                                                               , new Path(jobSubmitDir, s), LocalResourceType.File);
            }
            // Setup security tokens
            DataOutputBuffer dob = new DataOutputBuffer();

            ts.WriteTokenStorageToStream(dob);
            ByteBuffer securityTokens = ByteBuffer.Wrap(dob.GetData(), 0, dob.GetLength());
            // Setup the command to run the AM
            IList <string> vargs = new AList <string>(8);

            vargs.AddItem(MRApps.CrossPlatformifyMREnv(jobConf, ApplicationConstants.Environment
                                                       .JavaHome) + "/bin/java");
            Path amTmpDir = new Path(MRApps.CrossPlatformifyMREnv(conf, ApplicationConstants.Environment
                                                                  .Pwd), YarnConfiguration.DefaultContainerTempDir);

            vargs.AddItem("-Djava.io.tmpdir=" + amTmpDir);
            MRApps.AddLog4jSystemProperties(null, vargs, conf);
            // Check for Java Lib Path usage in MAP and REDUCE configs
            WarnForJavaLibPath(conf.Get(MRJobConfig.MapJavaOpts, string.Empty), "map", MRJobConfig
                               .MapJavaOpts, MRJobConfig.MapEnv);
            WarnForJavaLibPath(conf.Get(MRJobConfig.MapredMapAdminJavaOpts, string.Empty), "map"
                               , MRJobConfig.MapredMapAdminJavaOpts, MRJobConfig.MapredAdminUserEnv);
            WarnForJavaLibPath(conf.Get(MRJobConfig.ReduceJavaOpts, string.Empty), "reduce",
                               MRJobConfig.ReduceJavaOpts, MRJobConfig.ReduceEnv);
            WarnForJavaLibPath(conf.Get(MRJobConfig.MapredReduceAdminJavaOpts, string.Empty),
                               "reduce", MRJobConfig.MapredReduceAdminJavaOpts, MRJobConfig.MapredAdminUserEnv);
            // Add AM admin command opts before user command opts
            // so that it can be overridden by user
            string mrAppMasterAdminOptions = conf.Get(MRJobConfig.MrAmAdminCommandOpts, MRJobConfig
                                                      .DefaultMrAmAdminCommandOpts);

            WarnForJavaLibPath(mrAppMasterAdminOptions, "app master", MRJobConfig.MrAmAdminCommandOpts
                               , MRJobConfig.MrAmAdminUserEnv);
            vargs.AddItem(mrAppMasterAdminOptions);
            // Add AM user command opts
            string mrAppMasterUserOptions = conf.Get(MRJobConfig.MrAmCommandOpts, MRJobConfig
                                                     .DefaultMrAmCommandOpts);

            WarnForJavaLibPath(mrAppMasterUserOptions, "app master", MRJobConfig.MrAmCommandOpts
                               , MRJobConfig.MrAmEnv);
            vargs.AddItem(mrAppMasterUserOptions);
            if (jobConf.GetBoolean(MRJobConfig.MrAmProfile, MRJobConfig.DefaultMrAmProfile))
            {
                string profileParams = jobConf.Get(MRJobConfig.MrAmProfileParams, MRJobConfig.DefaultTaskProfileParams
                                                   );
                if (profileParams != null)
                {
                    vargs.AddItem(string.Format(profileParams, ApplicationConstants.LogDirExpansionVar
                                                + Path.Separator + TaskLog.LogName.Profile));
                }
            }
            vargs.AddItem(MRJobConfig.ApplicationMasterClass);
            vargs.AddItem("1>" + ApplicationConstants.LogDirExpansionVar + Path.Separator + ApplicationConstants
                          .Stdout);
            vargs.AddItem("2>" + ApplicationConstants.LogDirExpansionVar + Path.Separator + ApplicationConstants
                          .Stderr);
            Vector <string> vargsFinal = new Vector <string>(8);
            // Final command
            StringBuilder mergedCommand = new StringBuilder();

            foreach (CharSequence str in vargs)
            {
                mergedCommand.Append(str).Append(" ");
            }
            vargsFinal.AddItem(mergedCommand.ToString());
            Log.Debug("Command to launch container for ApplicationMaster is : " + mergedCommand
                      );
            // Setup the CLASSPATH in environment
            // i.e. add { Hadoop jars, job jar, CWD } to classpath.
            IDictionary <string, string> environment = new Dictionary <string, string>();

            MRApps.SetClasspath(environment, conf);
            // Shell
            environment[ApplicationConstants.Environment.Shell.ToString()] = conf.Get(MRJobConfig
                                                                                      .MapredAdminUserShell, MRJobConfig.DefaultShell);
            // Add the container working directory at the front of LD_LIBRARY_PATH
            MRApps.AddToEnvironment(environment, ApplicationConstants.Environment.LdLibraryPath
                                    .ToString(), MRApps.CrossPlatformifyMREnv(conf, ApplicationConstants.Environment
                                                                              .Pwd), conf);
            // Setup the environment variables for Admin first
            MRApps.SetEnvFromInputString(environment, conf.Get(MRJobConfig.MrAmAdminUserEnv),
                                         conf);
            // Setup the environment variables (LD_LIBRARY_PATH, etc)
            MRApps.SetEnvFromInputString(environment, conf.Get(MRJobConfig.MrAmEnv), conf);
            // Parse distributed cache
            MRApps.SetupDistributedCache(jobConf, localResources);
            IDictionary <ApplicationAccessType, string> acls = new Dictionary <ApplicationAccessType
                                                                               , string>(2);

            acls[ApplicationAccessType.ViewApp] = jobConf.Get(MRJobConfig.JobAclViewJob, MRJobConfig
                                                              .DefaultJobAclViewJob);
            acls[ApplicationAccessType.ModifyApp] = jobConf.Get(MRJobConfig.JobAclModifyJob,
                                                                MRJobConfig.DefaultJobAclModifyJob);
            // Setup ContainerLaunchContext for AM container
            ContainerLaunchContext amContainer = ContainerLaunchContext.NewInstance(localResources
                                                                                    , environment, vargsFinal, null, securityTokens, acls);
            ICollection <string> tagsFromConf = jobConf.GetTrimmedStringCollection(MRJobConfig
                                                                                   .JobTags);
            // Set up the ApplicationSubmissionContext
            ApplicationSubmissionContext appContext = recordFactory.NewRecordInstance <ApplicationSubmissionContext
                                                                                       >();

            appContext.SetApplicationId(applicationId);
            // ApplicationId
            appContext.SetQueue(jobConf.Get(JobContext.QueueName, YarnConfiguration.DefaultQueueName
                                            ));
            // Queue name
            // add reservationID if present
            ReservationId reservationID = null;

            try
            {
                reservationID = ReservationId.ParseReservationId(jobConf.Get(JobContext.ReservationId
                                                                             ));
            }
            catch (FormatException)
            {
                // throw exception as reservationid as is invalid
                string errMsg = "Invalid reservationId: " + jobConf.Get(JobContext.ReservationId)
                                + " specified for the app: " + applicationId;
                Log.Warn(errMsg);
                throw new IOException(errMsg);
            }
            if (reservationID != null)
            {
                appContext.SetReservationID(reservationID);
                Log.Info("SUBMITTING ApplicationSubmissionContext app:" + applicationId + " to queue:"
                         + appContext.GetQueue() + " with reservationId:" + appContext.GetReservationID(
                             ));
            }
            appContext.SetApplicationName(jobConf.Get(JobContext.JobName, YarnConfiguration.DefaultApplicationName
                                                      ));
            // Job name
            appContext.SetCancelTokensWhenComplete(conf.GetBoolean(MRJobConfig.JobCancelDelegationToken
                                                                   , true));
            appContext.SetAMContainerSpec(amContainer);
            // AM Container
            appContext.SetMaxAppAttempts(conf.GetInt(MRJobConfig.MrAmMaxAttempts, MRJobConfig
                                                     .DefaultMrAmMaxAttempts));
            appContext.SetResource(capability);
            appContext.SetApplicationType(MRJobConfig.MrApplicationType);
            if (tagsFromConf != null && !tagsFromConf.IsEmpty())
            {
                appContext.SetApplicationTags(new HashSet <string>(tagsFromConf));
            }
            return(appContext);
        }
Esempio n. 17
0
        /// <exception cref="System.IO.IOException"/>
        /// <exception cref="Sharpen.URISyntaxException"/>
        /// <exception cref="System.Exception"/>
        private void DownloadWithFileType(TestFSDownload.TEST_FILE_TYPE fileType)
        {
            Configuration conf = new Configuration();

            conf.Set(CommonConfigurationKeys.FsPermissionsUmaskKey, "077");
            FileContext files   = FileContext.GetLocalFSFileContext(conf);
            Path        basedir = files.MakeQualified(new Path("target", typeof(TestFSDownload).Name
                                                               ));

            files.Mkdir(basedir, null, true);
            conf.SetStrings(typeof(TestFSDownload).FullName, basedir.ToString());
            Random rand       = new Random();
            long   sharedSeed = rand.NextLong();

            rand.SetSeed(sharedSeed);
            System.Console.Out.WriteLine("SEED: " + sharedSeed);
            IDictionary <LocalResource, Future <Path> > pending = new Dictionary <LocalResource,
                                                                                  Future <Path> >();
            ExecutorService   exec = Executors.NewSingleThreadExecutor();
            LocalDirAllocator dirs = new LocalDirAllocator(typeof(TestFSDownload).FullName);
            int size = rand.Next(512) + 512;
            LocalResourceVisibility vis = LocalResourceVisibility.Private;
            Path          p             = new Path(basedir, string.Empty + 1);
            string        strFileName   = string.Empty;
            LocalResource rsrc          = null;

            switch (fileType)
            {
            case TestFSDownload.TEST_FILE_TYPE.Tar:
            {
                rsrc = CreateTarFile(files, p, size, rand, vis);
                break;
            }

            case TestFSDownload.TEST_FILE_TYPE.Jar:
            {
                rsrc = CreateJarFile(files, p, size, rand, vis);
                rsrc.SetType(LocalResourceType.Pattern);
                break;
            }

            case TestFSDownload.TEST_FILE_TYPE.Zip:
            {
                rsrc        = CreateZipFile(files, p, size, rand, vis);
                strFileName = p.GetName() + ".ZIP";
                break;
            }

            case TestFSDownload.TEST_FILE_TYPE.Tgz:
            {
                rsrc = CreateTgzFile(files, p, size, rand, vis);
                break;
            }
            }
            Path destPath = dirs.GetLocalPathForWrite(basedir.ToString(), size, conf);

            destPath = new Path(destPath, System.Convert.ToString(uniqueNumberGenerator.IncrementAndGet
                                                                      ()));
            FSDownload fsd = new FSDownload(files, UserGroupInformation.GetCurrentUser(), conf
                                            , destPath, rsrc);

            pending[rsrc] = exec.Submit(fsd);
            exec.Shutdown();
            while (!exec.AwaitTermination(1000, TimeUnit.Milliseconds))
            {
            }
            try
            {
                pending[rsrc].Get();
                // see if there was an Exception during download
                FileStatus[] filesstatus = files.GetDefaultFileSystem().ListStatus(basedir);
                foreach (FileStatus filestatus in filesstatus)
                {
                    if (filestatus.IsDirectory())
                    {
                        FileStatus[] childFiles = files.GetDefaultFileSystem().ListStatus(filestatus.GetPath
                                                                                              ());
                        foreach (FileStatus childfile in childFiles)
                        {
                            if (strFileName.EndsWith(".ZIP") && childfile.GetPath().GetName().Equals(strFileName
                                                                                                     ) && !childfile.IsDirectory())
                            {
                                NUnit.Framework.Assert.Fail("Failure...After unzip, there should have been a" + " directory formed with zip file name but found a file. "
                                                            + childfile.GetPath());
                            }
                            if (childfile.GetPath().GetName().StartsWith("tmp"))
                            {
                                NUnit.Framework.Assert.Fail("Tmp File should not have been there " + childfile.GetPath
                                                                ());
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new IOException("Failed exec", e);
            }
        }