Ejemplo n.º 1
0
        /// <summary>
        /// Посчитать и отсортировать
        /// </summary>
        /// <param name="pathApp"></param>
        static void Sort(string pathApp)
        {
            FileInfo fi = new FileInfo(pathApp + "/bigdata.txt");

            if (fi.Exists)
            {
                // делаем ограничение по памяти, когда достигнем, то начинаем скидывать файлы
                // Reducer'ов на жесткий
                double memorySizeGb = 0;

                do
                {
                    Console.Write("Сколько оперативки не жалко (Гб) ?: ");
                } while (!Double.TryParse(Console.ReadLine(), out memorySizeGb) || memorySizeGb <= 0);

                ReducerManager reducersManager = new ReducerManager(memorySizeGb);
                List <Task>    tasks           = new List <Task>();

                Console.WriteLine(DateTime.Now);

                // Распределяем на 4 (хотя смотря сколько потоков есть) Mapper
                for (int i = 0; i < 4; i++)
                {
                    int  ind  = i;
                    Task task = Task.Run(() =>
                    {
                        using (StreamReader reader = new StreamReader(pathApp + "/bigdata.txt", Encoding.UTF8))
                        {
                            long sizeBlock = reader.BaseStream.Length / 4;

                            reader.BaseStream.Seek(3 + sizeBlock * ind, SeekOrigin.Begin);

                            if (ind != 0)
                            {
                                while ((char)reader.Read() != '\n')
                                {
                                    ;
                                }
                            }

                            Mapper m1 = new Mapper(reader, reducersManager, sizeBlock);
                            m1.Process();
                        }
                    });

                    tasks.Add(task);
                }

                Task.WaitAll(tasks.ToArray());
                reducersManager.WriteResult();
                Console.WriteLine(DateTime.Now);
            }
            else
            {
                Console.WriteLine("Файл не сгенерирован!");
            }
        }
Ejemplo n.º 2
0
 public Mapper(StreamReader reader, ReducerManager reducerManager, long sizeBlock)
 {
     this.reader         = reader;
     this.reducerManager = reducerManager;
     this.sizeBlock      = sizeBlock;
 }