示例#1
0
        public PipelinedBroadcastReduceDriver(
            [Parameter(typeof(GroupTestConfig.NumEvaluators))] int numEvaluators,
            [Parameter(typeof(GroupTestConfig.NumIterations))] int numIterations,
            [Parameter(typeof(GroupTestConfig.StartingPort))] int startingPort,
            [Parameter(typeof(GroupTestConfig.PortRange))] int portRange,
            [Parameter(typeof(GroupTestConfig.ChunkSize))] int chunkSize,
            [Parameter(typeof(GroupTestConfig.ArraySize))] int arraySize,
            GroupCommDriver groupCommDriver,
            IEvaluatorRequestor evaluatorRequestor)
        {
            Logger.Log(Level.Info, "entering the driver code " + chunkSize);

            _numEvaluators      = numEvaluators;
            _numIterations      = numIterations;
            _arraySize          = arraySize;
            _evaluatorRequestor = evaluatorRequestor;

            _tcpPortProviderConfig = TangFactory.GetTang().NewConfigurationBuilder()
                                     .BindNamedParameter <TcpPortRangeStart, int>(GenericType <TcpPortRangeStart> .Class,
                                                                                  startingPort.ToString(CultureInfo.InvariantCulture))
                                     .BindNamedParameter <TcpPortRangeCount, int>(GenericType <TcpPortRangeCount> .Class,
                                                                                  portRange.ToString(CultureInfo.InvariantCulture))
                                     .Build();

            _codecConfig = StreamingCodecConfiguration <int[]> .Conf
                           .Set(StreamingCodecConfiguration <int[]> .Codec, GenericType <IntArrayStreamingCodec> .Class)
                           .Build();

            var reduceFunctionConfig = ReduceFunctionConfiguration <int[]> .Conf
                                       .Set(ReduceFunctionConfiguration <int[]> .ReduceFunction, GenericType <ArraySumFunction> .Class)
                                       .Build();

            var dataConverterConfig = TangFactory.GetTang().NewConfigurationBuilder(
                PipelineDataConverterConfiguration <int[]> .Conf
                .Set(PipelineDataConverterConfiguration <int[]> .DataConverter,
                     GenericType <PipelineIntDataConverter> .Class)
                .Build())
                                      .BindNamedParameter <GroupTestConfig.ChunkSize, int>(
                GenericType <GroupTestConfig.ChunkSize> .Class,
                chunkSize.ToString(CultureInfo.InvariantCulture))
                                      .Build();

            _groupCommDriver = groupCommDriver;

            _commGroup = _groupCommDriver.DefaultGroup
                         .AddBroadcast <int[]>(
                GroupTestConstants.BroadcastOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                dataConverterConfig)
                         .AddReduce <int[]>(
                GroupTestConstants.ReduceOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                reduceFunctionConfig,
                dataConverterConfig)
                         .Build();

            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, numEvaluators);
        }
示例#2
0
        public void TestBroadcastOperatorWithDefaultCodec()
        {
            INameServer nameServer = NameServerTests.BuildNameServer();

            string groupName    = "group1";
            string operatorName = "broadcast";
            string masterTaskId = "task0";
            string driverId     = "Driver Id";
            int    numTasks     = 10;
            int    value        = 1337;
            int    fanOut       = 3;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddBroadcast(operatorName, masterTaskId)
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IBroadcastSender <int>   sender    = commGroups[0].GetBroadcastSender <int>(operatorName);
            IBroadcastReceiver <int> receiver1 = commGroups[1].GetBroadcastReceiver <int>(operatorName);
            IBroadcastReceiver <int> receiver2 = commGroups[2].GetBroadcastReceiver <int>(operatorName);

            Assert.NotNull(sender);
            Assert.NotNull(receiver1);
            Assert.NotNull(receiver2);

            sender.Send(value);
            Assert.Equal(value, receiver1.Receive());
            Assert.Equal(value, receiver2.Receive());
        }
示例#3
0
        public void TestReduceOperator()
        {
            string groupName    = "group1";
            string operatorName = "reduce";
            int    numTasks     = 4;
            string driverId     = "driverid";
            string masterTaskId = "task0";
            int    fanOut       = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddReduce <int>(operatorName, "task0", TopologyTypes.Flat, GetDefaultDataConverterConfig(), GetDefaultReduceFuncConfig())
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IReduceReceiver <int> receiver = commGroups[0].GetReduceReceiver <int>(operatorName);
            IReduceSender <int>   sender1  = commGroups[1].GetReduceSender <int>(operatorName);
            IReduceSender <int>   sender2  = commGroups[2].GetReduceSender <int>(operatorName);
            IReduceSender <int>   sender3  = commGroups[3].GetReduceSender <int>(operatorName);

            Assert.NotNull(receiver);
            Assert.NotNull(sender1);
            Assert.NotNull(sender2);
            Assert.NotNull(sender3);

            sender3.Send(5);
            sender1.Send(1);
            sender2.Send(3);

            Assert.Equal(9, receiver.Reduce());
        }
        private KMeansDriverHandlers(
            [Parameter(typeof(NumPartitions))] int numPartitions,
            GroupCommDriver groupCommDriver,
            IEvaluatorRequestor evaluatorRequestor,
            CommandLineArguments arguments)
        {
            _executionDirectory = Path.Combine(Directory.GetCurrentDirectory(), Constants.KMeansExecutionBaseDirectory, Guid.NewGuid().ToString("N").Substring(0, 4));
            string dataFile = arguments.Arguments.First();

            DataVector.ShuffleDataAndGetInitialCentriods(
                dataFile,
                numPartitions,
                _clustersNumber,
                _executionDirectory);

            _totalEvaluators = numPartitions + 1;

            _groupCommDriver    = groupCommDriver;
            _evaluatorRequestor = evaluatorRequestor;

            _centroidCodecConf = CodecToStreamingCodecConfiguration <Centroids> .Conf
                                 .Set(CodecToStreamingCodecConfiguration <Centroids> .Codec, GenericType <CentroidsCodec> .Class)
                                 .Build();

            IConfiguration dataConverterConfig1 = PipelineDataConverterConfiguration <Centroids> .Conf
                                                  .Set(PipelineDataConverterConfiguration <Centroids> .DataConverter, GenericType <DefaultPipelineDataConverter <Centroids> > .Class)
                                                  .Build();

            _controlMessageCodecConf = CodecToStreamingCodecConfiguration <ControlMessage> .Conf
                                       .Set(CodecToStreamingCodecConfiguration <ControlMessage> .Codec, GenericType <ControlMessageCodec> .Class)
                                       .Build();

            IConfiguration dataConverterConfig2 = PipelineDataConverterConfiguration <ControlMessage> .Conf
                                                  .Set(PipelineDataConverterConfiguration <ControlMessage> .DataConverter, GenericType <DefaultPipelineDataConverter <ControlMessage> > .Class)
                                                  .Build();

            _processedResultsCodecConf = CodecToStreamingCodecConfiguration <ProcessedResults> .Conf
                                         .Set(CodecToStreamingCodecConfiguration <ProcessedResults> .Codec, GenericType <ProcessedResultsCodec> .Class)
                                         .Build();

            IConfiguration reduceFunctionConfig = ReduceFunctionConfiguration <ProcessedResults> .Conf
                                                  .Set(ReduceFunctionConfiguration <ProcessedResults> .ReduceFunction, GenericType <KMeansMasterTask.AggregateMeans> .Class)
                                                  .Build();

            IConfiguration dataConverterConfig3 = PipelineDataConverterConfiguration <ProcessedResults> .Conf
                                                  .Set(PipelineDataConverterConfiguration <ProcessedResults> .DataConverter, GenericType <DefaultPipelineDataConverter <ProcessedResults> > .Class)
                                                  .Build();

            _commGroup = _groupCommDriver.DefaultGroup
                         .AddBroadcast <Centroids>(Constants.CentroidsBroadcastOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, dataConverterConfig1)
                         .AddBroadcast <ControlMessage>(Constants.ControlMessageBroadcastOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, dataConverterConfig2)
                         .AddReduce <ProcessedResults>(Constants.MeansReduceOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, reduceFunctionConfig, dataConverterConfig3)
                         .Build();

            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, _totalEvaluators);
        }
示例#5
0
        public KMeansDriverHandlers([Parameter(typeof(NumPartitions))] int numPartitions, GroupCommDriver groupCommDriver)
        {
            Identifier          = "KMeansDriverId";
            _executionDirectory = Path.Combine(Directory.GetCurrentDirectory(), Constants.KMeansExecutionBaseDirectory, Guid.NewGuid().ToString("N").Substring(0, 4));
            ISet <string> arguments = ClrHandlerHelper.GetCommandLineArguments();
            string        dataFile  = arguments.Single(a => a.StartsWith("DataFile", StringComparison.Ordinal)).Split(':')[1];

            DataVector.ShuffleDataAndGetInitialCentriods(
                Path.Combine(Directory.GetCurrentDirectory(), "reef", "global", dataFile),
                numPartitions,
                _clustersNumber,
                _executionDirectory);

            _totalEvaluators = numPartitions + 1;

            _groupCommDriver = groupCommDriver;

            _centroidCodecConf = CodecToStreamingCodecConfiguration <Centroids> .Conf
                                 .Set(CodecConfiguration <Centroids> .Codec, GenericType <CentroidsCodec> .Class)
                                 .Build();

            IConfiguration dataConverterConfig1 = PipelineDataConverterConfiguration <Centroids> .Conf
                                                  .Set(PipelineDataConverterConfiguration <Centroids> .DataConverter, GenericType <DefaultPipelineDataConverter <Centroids> > .Class)
                                                  .Build();

            _controlMessageCodecConf = CodecToStreamingCodecConfiguration <ControlMessage> .Conf
                                       .Set(CodecConfiguration <ControlMessage> .Codec, GenericType <ControlMessageCodec> .Class)
                                       .Build();

            IConfiguration dataConverterConfig2 = PipelineDataConverterConfiguration <ControlMessage> .Conf
                                                  .Set(PipelineDataConverterConfiguration <ControlMessage> .DataConverter, GenericType <DefaultPipelineDataConverter <ControlMessage> > .Class)
                                                  .Build();

            _processedResultsCodecConf = CodecToStreamingCodecConfiguration <ProcessedResults> .Conf
                                         .Set(CodecConfiguration <ProcessedResults> .Codec, GenericType <ProcessedResultsCodec> .Class)
                                         .Build();

            IConfiguration reduceFunctionConfig = ReduceFunctionConfiguration <ProcessedResults> .Conf
                                                  .Set(ReduceFunctionConfiguration <ProcessedResults> .ReduceFunction, GenericType <KMeansMasterTask.AggregateMeans> .Class)
                                                  .Build();

            IConfiguration dataConverterConfig3 = PipelineDataConverterConfiguration <ProcessedResults> .Conf
                                                  .Set(PipelineDataConverterConfiguration <ProcessedResults> .DataConverter, GenericType <DefaultPipelineDataConverter <ProcessedResults> > .Class)
                                                  .Build();

            _commGroup = _groupCommDriver.DefaultGroup
                         .AddBroadcast <Centroids>(Constants.CentroidsBroadcastOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, dataConverterConfig1)
                         .AddBroadcast <ControlMessage>(Constants.ControlMessageBroadcastOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, dataConverterConfig2)
                         .AddReduce <ProcessedResults>(Constants.MeansReduceOperatorName, Constants.MasterTaskId, TopologyTypes.Flat, reduceFunctionConfig, dataConverterConfig3)
                         .Build();

            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, _totalEvaluators);

            CreateClassHierarchy();
        }
示例#6
0
        /// <summary>
        /// Create new TaskStarter.
        /// After adding the correct number of tasks to the TaskStarter, the
        /// Tasks will be started on their given active context.
        /// </summary>
        /// <param name="groupCommDriver">The IGroupCommuDriver for the Group Communication tasks</param>
        /// <param name="numTasks">The number of Tasks that need to be added before
        /// the Tasks will be started. </param>
        public TaskStarter(IGroupCommDriver groupCommDriver, int numTasks)
        {
            LOGGER.Log(Level.Verbose, "Creating TaskStarter");
            _masterTaskId = groupCommDriver.MasterTaskId;
            _numTasks     = numTasks;
            _tasksAdded   = 0;
            _lock         = new object();

            _groupCommDriver = groupCommDriver;
            _taskTuples      = new List <Tuple <string, IConfiguration, IActiveContext> >();
        }
示例#7
0
        /// <summary>
        /// Create new TaskStarter.
        /// After adding the correct number of tasks to the TaskStarter, the
        /// Tasks will be started on their given active context.
        /// </summary>
        /// <param name="groupCommDriver">The IGroupCommuDriver for the Group Communication tasks</param>
        /// <param name="numTasks">The number of Tasks that need to be added before
        /// the Tasks will be started. </param>
        public TaskStarter(IGroupCommDriver groupCommDriver, int numTasks)
        {
            LOGGER.Log(Level.Verbose, "Creating TaskStarter");
            _masterTaskId = groupCommDriver.MasterTaskId;
            _numTasks = numTasks;
            _tasksAdded = 0;
            _lock = new object();

            _groupCommDriver = groupCommDriver;
            _taskTuples = new List<Tuple<string, IConfiguration, IActiveContext>>();
        }
示例#8
0
        public void TestScatterOperator2()
        {
            string groupName    = "group1";
            string operatorName = "scatter";
            string masterTaskId = "task0";
            string driverId     = "Driver Id";
            int    numTasks     = 5;
            int    fanOut       = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddScatter <int>(operatorName, masterTaskId, TopologyTypes.Flat, GetDefaultDataConverterConfig(), GetDefaultReduceFuncConfig())
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IScatterSender <int>   sender    = commGroups[0].GetScatterSender <int>(operatorName);
            IScatterReceiver <int> receiver1 = commGroups[1].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver2 = commGroups[2].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver3 = commGroups[3].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver4 = commGroups[4].GetScatterReceiver <int>(operatorName);

            Assert.NotNull(sender);
            Assert.NotNull(receiver1);
            Assert.NotNull(receiver2);
            Assert.NotNull(receiver3);
            Assert.NotNull(receiver4);

            List <int> data = new List <int> {
                1, 2, 3, 4, 5, 6, 7, 8
            };

            sender.Send(data);
            var data1 = receiver1.Receive();

            Assert.Equal(1, data1.First());
            Assert.Equal(2, data1.Last());

            var data2 = receiver2.Receive();

            Assert.Equal(3, data2.First());
            Assert.Equal(4, data2.Last());

            var data3 = receiver3.Receive();

            Assert.Equal(5, data3.First());
            Assert.Equal(6, data3.Last());

            var data4 = receiver4.Receive();

            Assert.Equal(7, data4.First());
            Assert.Equal(8, data4.Last());
        }
示例#9
0
        public void TestScatterOperator4()
        {
            string groupName    = "group1";
            string operatorName = "scatter";
            string masterTaskId = "task0";
            string driverId     = "Driver Id";
            int    numTasks     = 4;
            int    fanOut       = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddScatter <int>(operatorName, masterTaskId, TopologyTypes.Flat, GetDefaulDataConverterConfig())
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());
            IScatterSender <int>             sender     = commGroups[0].GetScatterSender <int>(operatorName);
            IScatterReceiver <int>           receiver1  = commGroups[1].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int>           receiver2  = commGroups[2].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int>           receiver3  = commGroups[3].GetScatterReceiver <int>(operatorName);

            Assert.IsNotNull(sender);
            Assert.IsNotNull(receiver1);
            Assert.IsNotNull(receiver2);
            Assert.IsNotNull(receiver3);

            List <int> data = new List <int> {
                1, 2, 3, 4, 5, 6, 7, 8
            };
            List <string> order = new List <string> {
                "task3", "task2", "task1"
            };

            sender.Send(data, order);

            var data3 = receiver3.Receive().ToArray();

            Assert.AreEqual(1, data3[0]);
            Assert.AreEqual(2, data3[1]);
            Assert.AreEqual(3, data3[2]);

            var data2 = receiver2.Receive().ToArray();

            Assert.AreEqual(4, data2[0]);
            Assert.AreEqual(5, data2[1]);
            Assert.AreEqual(6, data2[2]);

            var data1 = receiver1.Receive().ToArray();

            Assert.AreEqual(7, data1[0]);
            Assert.AreEqual(8, data1[1]);
        }
 internal ServiceAndContextConfigurationProvider(int numNodes, IGroupCommDriver groupCommDriver,
                                                 ConfigurationManager configurationManager, Stack <IPartitionDescriptor> partitionDescriptors)
 {
     _configurationProvider = new Dictionary <string, ContextAndServiceConfiguration>();
     _failedEvaluators      = new HashSet <string>();
     _submittedEvaluators   = new HashSet <string>();
     _numNodes                     = numNodes;
     _groupCommDriver              = groupCommDriver;
     _configurationManager         = configurationManager;
     _assignedPartitionDescriptors = 0;
     _partitionDescriptors         = partitionDescriptors;
     _lock = new object();
 }
        public BroadcastReduceDriver(
            [Parameter(typeof(GroupTestConfig.NumEvaluators))] int numEvaluators,
            [Parameter(typeof(GroupTestConfig.NumIterations))] int numIterations,
            [Parameter(typeof(GroupTestConfig.StartingPort))] int startingPort,
            [Parameter(typeof(GroupTestConfig.PortRange))] int portRange,
            GroupCommDriver groupCommDriver)
        {
            Identifier       = "BroadcastStartHandler";
            _numEvaluators   = numEvaluators;
            _numIterations   = numIterations;
            _groupCommDriver = groupCommDriver;

            _tcpPortProviderConfig = TangFactory.GetTang().NewConfigurationBuilder()
                                     .BindNamedParameter <TcpPortRangeStart, int>(GenericType <TcpPortRangeStart> .Class,
                                                                                  startingPort.ToString(CultureInfo.InvariantCulture))
                                     .BindNamedParameter <TcpPortRangeCount, int>(GenericType <TcpPortRangeCount> .Class,
                                                                                  portRange.ToString(CultureInfo.InvariantCulture))
                                     .Build();


            _codecConfig = StreamingCodecConfiguration <int> .Conf
                           .Set(StreamingCodecConfiguration <int> .Codec, GenericType <IntStreamingCodec> .Class)
                           .Build();

            IConfiguration reduceFunctionConfig = ReduceFunctionConfiguration <int> .Conf
                                                  .Set(ReduceFunctionConfiguration <int> .ReduceFunction, GenericType <SumFunction> .Class)
                                                  .Build();

            IConfiguration dataConverterConfig = PipelineDataConverterConfiguration <int> .Conf
                                                 .Set(PipelineDataConverterConfiguration <int> .DataConverter, GenericType <DefaultPipelineDataConverter <int> > .Class)
                                                 .Build();

            _commGroup = _groupCommDriver.DefaultGroup
                         .AddBroadcast <int>(
                GroupTestConstants.BroadcastOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                dataConverterConfig)
                         .AddReduce <int>(
                GroupTestConstants.ReduceOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                reduceFunctionConfig,
                dataConverterConfig)
                         .Build();

            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, numEvaluators);

            CreateClassHierarchy();
        }
示例#12
0
        public static IGroupCommDriver GetInstanceOfGroupCommDriver(string driverId, string masterTaskId, string groupName, int fanOut, int numTasks)
        {
            var c = TangFactory.GetTang().NewConfigurationBuilder()
                    .BindStringNamedParam <GroupCommConfigurationOptions.DriverId>(driverId)
                    .BindStringNamedParam <GroupCommConfigurationOptions.MasterTaskId>(masterTaskId)
                    .BindStringNamedParam <GroupCommConfigurationOptions.GroupName>(groupName)
                    .BindIntNamedParam <GroupCommConfigurationOptions.FanOut>(fanOut.ToString())
                    .BindIntNamedParam <GroupCommConfigurationOptions.NumberOfTasks>(numTasks.ToString())
                    .BindImplementation(GenericType <IConfigurationSerializer> .Class, GenericType <AvroConfigurationSerializer> .Class)
                    .Build();

            IGroupCommDriver groupCommDriver = TangFactory.GetTang().NewInjector(c).GetInstance <GroupCommDriver>();

            return(groupCommDriver);
        }
示例#13
0
        private IMRUDriver(IPartitionedInputDataSet dataSet,
                           [Parameter(typeof(PerMapConfigGeneratorSet))] ISet <IPerMapperConfigGenerator> perMapperConfigs,
                           ConfigurationManager configurationManager,
                           IEvaluatorRequestor evaluatorRequestor,
                           [Parameter(typeof(CoresPerMapper))] int coresPerMapper,
                           [Parameter(typeof(CoresForUpdateTask))] int coresForUpdateTask,
                           [Parameter(typeof(MemoryPerMapper))] int memoryPerMapper,
                           [Parameter(typeof(MemoryForUpdateTask))] int memoryForUpdateTask,
                           [Parameter(typeof(AllowedFailedEvaluatorsFraction))] double failedEvaluatorsFraction,
                           [Parameter(typeof(MaxRetryNumberInRecovery))] int maxRetryNumberInRecovery,
                           [Parameter(typeof(InvokeGC))] bool invokeGC,
                           IGroupCommDriver groupCommDriver,
                           INameServer nameServer)
        {
            _configurationManager           = configurationManager;
            _groupCommDriver                = groupCommDriver;
            _nameServer                     = nameServer;
            _perMapperConfigs               = perMapperConfigs;
            _totalMappers                   = dataSet.Count;
            _invokeGC                       = invokeGC;
            _maxRetryNumberForFaultTolerant = maxRetryNumberInRecovery > 0 ? maxRetryNumberInRecovery : DefaultMaxNumberOfRetryInRecovery;

            _contextManager = new ActiveContextManager(_totalMappers + 1);
            _contextManager.Subscribe(this);

            var updateSpec = new EvaluatorSpecification(memoryForUpdateTask, coresForUpdateTask);
            var mapperSpec = new EvaluatorSpecification(memoryPerMapper, coresPerMapper);
            var allowedFailedEvaluators = (int)(failedEvaluatorsFraction * _totalMappers);

            _evaluatorManager = new EvaluatorManager(_totalMappers + 1, allowedFailedEvaluators, evaluatorRequestor, updateSpec, mapperSpec);

            _systemState = new SystemStateMachine();
            _serviceAndContextConfigurationProvider =
                new ServiceAndContextConfigurationProvider <TMapInput, TMapOutput, TPartitionType>(dataSet, configurationManager);

            var msg =
                string.Format(CultureInfo.InvariantCulture, "map task memory:{0}, update task memory:{1}, map task cores:{2}, update task cores:{3}, maxRetry {4}, allowedFailedEvaluators {5}.",
                              memoryPerMapper,
                              memoryForUpdateTask,
                              coresPerMapper,
                              coresForUpdateTask,
                              _maxRetryNumberForFaultTolerant,
                              allowedFailedEvaluators);

            Logger.Log(Level.Info, msg);
        }
示例#14
0
        private IMRUDriver(IPartitionedInputDataSet dataSet,
                           [Parameter(typeof(PerMapConfigGeneratorSet))] ISet <IPerMapperConfigGenerator> perMapperConfigs,
                           ConfigurationManager configurationManager,
                           IEvaluatorRequestor evaluatorRequestor,
                           [Parameter(typeof(CoresPerMapper))] int coresPerMapper,
                           [Parameter(typeof(CoresForUpdateTask))] int coresForUpdateTask,
                           [Parameter(typeof(MemoryPerMapper))] int memoryPerMapper,
                           [Parameter(typeof(MemoryForUpdateTask))] int memoryForUpdateTask,
                           [Parameter(typeof(AllowedFailedEvaluatorsFraction))] double failedEvaluatorsFraction,
                           [Parameter(typeof(InvokeGC))] bool invokeGC,
                           IGroupCommDriver groupCommDriver)
        {
            _dataSet = dataSet;
            _configurationManager    = configurationManager;
            _evaluatorRequestor      = evaluatorRequestor;
            _groupCommDriver         = groupCommDriver;
            _coresPerMapper          = coresPerMapper;
            _coresForUpdateTask      = coresForUpdateTask;
            _memoryPerMapper         = memoryPerMapper;
            _memoryForUpdateTask     = memoryForUpdateTask;
            _perMapperConfigs        = perMapperConfigs;
            _completedTasks          = new ConcurrentBag <ICompletedTask>();
            _allowedFailedEvaluators = (int)(failedEvaluatorsFraction * dataSet.Count);
            _invokeGC = invokeGC;

            AddGroupCommunicationOperators();
            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, _dataSet.Count + 1);

            _taskIdStack              = new ConcurrentStack <string>();
            _perMapperConfiguration   = new ConcurrentStack <IConfiguration>();
            _partitionDescriptorStack = new Stack <IPartitionDescriptor>();
            ConstructTaskIdAndPartitionDescriptorStack();
            _serviceAndContextConfigurationProvider =
                new ServiceAndContextConfigurationProvider <TMapInput, TMapOutput>(dataSet.Count + 1, groupCommDriver,
                                                                                   _configurationManager, _partitionDescriptorStack);

            var msg = string.Format("map task memory:{0}, update task memory:{1}, map task cores:{2}, update task cores:{3}",
                                    _memoryPerMapper, _memoryForUpdateTask, _coresPerMapper, _coresForUpdateTask);

            Logger.Log(Level.Info, msg);
        }
示例#15
0
        public void TestBroadcastOperator2()
        {
            string groupName    = "group1";
            string operatorName = "broadcast";
            string driverId     = "driverId";
            string masterTaskId = "task0";
            int    numTasks     = 3;
            int    value1       = 1337;
            int    value2       = 42;
            int    value3       = 99;
            int    fanOut       = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddBroadcast(operatorName, masterTaskId)
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IBroadcastSender <int>   sender    = commGroups[0].GetBroadcastSender <int>(operatorName);
            IBroadcastReceiver <int> receiver1 = commGroups[1].GetBroadcastReceiver <int>(operatorName);
            IBroadcastReceiver <int> receiver2 = commGroups[2].GetBroadcastReceiver <int>(operatorName);

            Assert.IsNotNull(sender);
            Assert.IsNotNull(receiver1);
            Assert.IsNotNull(receiver2);

            sender.Send(value1);
            Assert.AreEqual(value1, receiver1.Receive());
            Assert.AreEqual(value1, receiver2.Receive());

            sender.Send(value2);
            Assert.AreEqual(value2, receiver1.Receive());
            Assert.AreEqual(value2, receiver2.Receive());

            sender.Send(value3);
            Assert.AreEqual(value3, receiver1.Receive());
            Assert.AreEqual(value3, receiver2.Receive());
        }
示例#16
0
        public void TestScatterOperatorWithDefaultCodec()
        {
            string groupName    = "group1";
            string operatorName = "scatter";
            string masterTaskId = "task0";
            string driverId     = "Driver Id";
            int    numTasks     = 5;
            int    fanOut       = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            var commGroup = groupCommDriver.DefaultGroup
                            .AddScatter(operatorName, masterTaskId)
                            .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IScatterSender <int>   sender    = commGroups[0].GetScatterSender <int>(operatorName);
            IScatterReceiver <int> receiver1 = commGroups[1].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver2 = commGroups[2].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver3 = commGroups[3].GetScatterReceiver <int>(operatorName);
            IScatterReceiver <int> receiver4 = commGroups[4].GetScatterReceiver <int>(operatorName);

            Assert.NotNull(sender);
            Assert.NotNull(receiver1);
            Assert.NotNull(receiver2);
            Assert.NotNull(receiver3);
            Assert.NotNull(receiver4);

            List <int> data = new List <int> {
                1, 2, 3, 4
            };

            sender.Send(data);
            Assert.Equal(1, receiver1.Receive().Single());
            Assert.Equal(2, receiver2.Receive().Single());
            Assert.Equal(3, receiver3.Receive().Single());
            Assert.Equal(4, receiver4.Receive().Single());
        }
示例#17
0
        public ScatterReduceDriver(
            [Parameter(typeof(GroupTestConfig.NumEvaluators))] int numEvaluators,
            GroupCommDriver groupCommDriver)
        {
            Identifier       = "BroadcastStartHandler";
            _numEvaluators   = numEvaluators;
            _groupCommDriver = groupCommDriver;

            _codecConfig = StreamingCodecConfiguration <int> .Conf
                           .Set(StreamingCodecConfiguration <int> .Codec, GenericType <IntStreamingCodec> .Class)
                           .Build();

            IConfiguration reduceFunctionConfig = ReduceFunctionConfiguration <int> .Conf
                                                  .Set(ReduceFunctionConfiguration <int> .ReduceFunction, GenericType <SumFunction> .Class)
                                                  .Build();

            IConfiguration dataConverterConfig = PipelineDataConverterConfiguration <int> .Conf
                                                 .Set(PipelineDataConverterConfiguration <int> .DataConverter, GenericType <DefaultPipelineDataConverter <int> > .Class)
                                                 .Build();

            _commGroup = _groupCommDriver.DefaultGroup
                         .AddScatter <int>(
                GroupTestConstants.ScatterOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                dataConverterConfig)
                         .AddReduce <int>(
                GroupTestConstants.ReduceOperatorName,
                GroupTestConstants.MasterTaskId,
                TopologyTypes.Tree,
                reduceFunctionConfig,
                dataConverterConfig)

                         .Build();

            _groupCommTaskStarter = new TaskStarter(_groupCommDriver, numEvaluators);

            CreateClassHierarchy();
        }
示例#18
0
        public static List <ICommunicationGroupClient> CommGroupClients(string groupName, int numTasks, IGroupCommDriver groupCommDriver, ICommunicationGroupDriver commGroupDriver, IConfiguration userServiceConfig)
        {
            List <ICommunicationGroupClient> commGroups = new List <ICommunicationGroupClient>();
            IConfiguration serviceConfig = groupCommDriver.GetServiceConfiguration();

            serviceConfig = Configurations.Merge(serviceConfig, userServiceConfig);

            List <IConfiguration> partialConfigs = new List <IConfiguration>();

            for (int i = 0; i < numTasks; i++)
            {
                string         taskId            = "task" + i;
                IConfiguration partialTaskConfig = TangFactory.GetTang().NewConfigurationBuilder(
                    TaskConfiguration.ConfigurationModule
                    .Set(TaskConfiguration.Identifier, taskId)
                    .Set(TaskConfiguration.Task, GenericType <MyTask> .Class)
                    .Build())
                                                   .Build();
                commGroupDriver.AddTask(taskId);
                partialConfigs.Add(partialTaskConfig);
            }

            for (int i = 0; i < numTasks; i++)
            {
                // get task configuration at driver side
                string         taskId = "task" + i;
                IConfiguration groupCommTaskConfig = groupCommDriver.GetGroupCommTaskConfiguration(taskId);
                IConfiguration mergedConf          = Configurations.Merge(groupCommTaskConfig, partialConfigs[i], serviceConfig);

                var conf = TangFactory.GetTang()
                           .NewConfigurationBuilder(mergedConf)
                           .BindNamedParameter(typeof(GroupCommConfigurationOptions.Initialize), "false")
                           .Build();
                IInjector injector = TangFactory.GetTang().NewInjector(conf);

                // simulate injection at evaluator side
                IGroupCommClient groupCommClient = injector.GetInstance <IGroupCommClient>();
                commGroups.Add(groupCommClient.GetCommunicationGroup(groupName));
            }
            return(commGroups);
        }
示例#19
0
        public void TestScatterReduceOperators()
        {
            string groupName           = "group1";
            string scatterOperatorName = "scatter";
            string reduceOperatorName  = "reduce";
            string masterTaskId        = "task0";
            string driverId            = "Driver Id";
            int    numTasks            = 5;
            int    fanOut = 2;

            IGroupCommDriver groupCommDriver = GetInstanceOfGroupCommDriver(driverId, masterTaskId, groupName, fanOut, numTasks);

            ICommunicationGroupDriver commGroup = groupCommDriver.DefaultGroup
                                                  .AddScatter <int>(
                scatterOperatorName,
                masterTaskId,
                TopologyTypes.Flat,
                GetDefaultDataConverterConfig())
                                                  .AddReduce <int>(
                reduceOperatorName,
                masterTaskId,
                TopologyTypes.Flat,
                GetDefaultReduceFuncConfig(),
                GetDefaultDataConverterConfig())
                                                  .Build();

            List <ICommunicationGroupClient> commGroups = CommGroupClients(groupName, numTasks, groupCommDriver, commGroup, GetDefaultCodecConfig());

            IScatterSender <int>  sender     = commGroups[0].GetScatterSender <int>(scatterOperatorName);
            IReduceReceiver <int> sumReducer = commGroups[0].GetReduceReceiver <int>(reduceOperatorName);

            IScatterReceiver <int> receiver1  = commGroups[1].GetScatterReceiver <int>(scatterOperatorName);
            IReduceSender <int>    sumSender1 = commGroups[1].GetReduceSender <int>(reduceOperatorName);

            IScatterReceiver <int> receiver2  = commGroups[2].GetScatterReceiver <int>(scatterOperatorName);
            IReduceSender <int>    sumSender2 = commGroups[2].GetReduceSender <int>(reduceOperatorName);

            IScatterReceiver <int> receiver3  = commGroups[3].GetScatterReceiver <int>(scatterOperatorName);
            IReduceSender <int>    sumSender3 = commGroups[3].GetReduceSender <int>(reduceOperatorName);

            IScatterReceiver <int> receiver4  = commGroups[4].GetScatterReceiver <int>(scatterOperatorName);
            IReduceSender <int>    sumSender4 = commGroups[4].GetReduceSender <int>(reduceOperatorName);

            Assert.NotNull(sender);
            Assert.NotNull(receiver1);
            Assert.NotNull(receiver2);
            Assert.NotNull(receiver3);
            Assert.NotNull(receiver4);

            List <int>    data  = Enumerable.Range(1, 100).ToList();
            List <string> order = new List <string> {
                "task4", "task3", "task2", "task1"
            };

            sender.Send(data, order);

            ScatterReceiveReduce(receiver4, sumSender4);
            ScatterReceiveReduce(receiver3, sumSender3);
            ScatterReceiveReduce(receiver2, sumSender2);
            ScatterReceiveReduce(receiver1, sumSender1);

            int sum = sumReducer.Reduce();

            Assert.Equal(sum, data.Sum());
        }