МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» (ФГБОУ ВПО «КубГУ») Кафедра вычислительных технологий ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ ОБРАБОТКИ БОЛЬШИХ ДАННЫХ ИММИТАЦИОННОГО МОДЕЛИРОВАНИЯ Моспан Надежда Вадимовна Краснодар 2014 СОДЕРЖАНИЕ Введение....................................................................................................................3 1 Обработка больших данных.................................................................................5 1.1 Технология MapReduce..................................................................................7 1.2 Фреимворк Apache Hadoop............................................................................14 2 Источники больших данных в системах моделирования..................................22 2.1 Процессы порождения информации в системах имитационного моделирования..........................................................................................................24 2.2 Вычислительные алгоритмы обработки последовательностей..................27 2.3 Паттерны в последовательностях..................................................................29 2.4 Онлайновые алгоритмы обработки последовательностей..........................34 3 Параллельные алгоритмы обработки больших данных имитационного моделирования...........................................................................................................38 3.1 Алгоритм поиска расстояния Хемминга.......................................................39 3.2 Алгоритм поиска частного паттерна..............................................................42 Заключение.................................................................................................................47 Список использованных источников.......................................................................48 2 ВВЕДЕНИЕ В ряде областей современной науки (физике, химии, астрономии, биологии, фармацевтике и др.) накапливаются громадные (пентабайтные и более) объемы данных. Большие объемы данных возникают и вне науки, например, в сети Интернет. Например, компьютеры Google обрабатывают около 1 петабайта в час. Эти данные нуждаются в обработке для извлечения из них знаний (определенных закономерностей). Проблема состоит в том, что упомянутые наборы данных не статичны, они постоянно растут, т.е. скорость потока новых данных «соревнуется» с возможной скоростью их обработки. Но не все данные в потоке равноценны: вместе с данными, из которых действительно можно извлечь новые закономерности (знания), имеется большое количество данных, лишь подтверждающих уже выявленные закономерности, или данных, вообще не имеющих отношения к исследуемой проблеме (шумы). Во многих случаях большим потоком данных можно управлять, влияя на процессы порождения данных или фильтруя полученный поток. Одним из методов научных исследований является имитационное моделирование. Имитационная модель порождает большое количество данных во время сеанса имитационного моделирования. Это события, происходящие в модели, изменения состояний модели. Если производится исследование модели однопроцессорного компьютера, работающего с тактовой частотой 1 ГГц, и системное время изменяется на одну секунду, следовательно, в модели происходит не менее 1 миллиарда событий. Если с каждым событием связано изменение 1000 байт данных (а реально может быть гораздо больше), то получаем объем данный 1012 байт = 103 Гбайт, т.е. около Терабайта. При моделировании вычислительной сети из 1000 компьютеров получаем уже около Петабайта информации за секунду системного времени. Большие объемы получаются при моделировании многопроцессорных ЭВМ. 3 Если моделируется рассматриваться более только аппаратура короткие промежутки компьютера, системного то могут времени, соответственно, будут получаться меньшие объемы информации. Но если моделируется взаимодействие компьютера и внешней среды, то нужно рассматривать процессы в реальном времени, которое может составлять минуты и часы. Такой объем данных трудно не только обработать, но и сохранить для последующей обработки. Возникает проблема сжатия данных. Какие именно из возникающих данных можно обработать сразу, какие данные следует сохранять? Это можно сделать с помощью информационных процедур – инструмента исследователя, позволяющего управлять потоком данных. Информационная процедура состоит из интерфейса и тела процедуры. Интерфейс процедуры позволяет нам задавать перечень типов событий, переменных, представляющих интерес для исследования, и тем самым включаемых в информационный поток. Тело процедуры содержит указания на методы обработки. Это может быть off-line обработка. Тогда все данные накапливаются предварительно в памяти. При on-line обработке в теле информационной процедуры записываются действия по обработке. On-line обработка замедляет процесс имитации, поэтому, могут применяться методы распараллеливания вычислений. При off-line обработке требуется организовать хранение данных так, чтобы можно было эффективно их обработать в последующем. Цель курсовой работы - разработать библиотеку параллельных алгоритмов обработки больших данных имитационного моделирования. 4 1. Обработка больших данных. Развитие Интернета привело к образованию обширных пластов разнородной информации. Как правило, эта информация имеет формат, неудобный для хранения в реляционных базах данных и характеризуется постоянным приростом и отсутствием структурированности. Совокупность таких данных и методов их обработки называют большими данными. Другой источник больших данных - накопление результатов экспериментов, или статистических данных в разных областях науки, банковские и кредитные данные. Методы и техники анализа, применимые к большим данным: методы класса Data Mining: обучение ассоциативным правилам, классификация (методы категоризации новых данных на основе принципов, ранее применённых к уже наличествующим данным), кластерный анализ, регрессионный анализ; краудсорсинг — категоризация и обогащение данных силами широкого, неопределённого круга лиц, привлечённых на основании публичной оферты, без вступления в трудовые отношения; смешение и интеграция данных — набор техник, позволяющих интегрировать разнородные данные из разнообразных источников для возможности глубинного анализа, в качестве примеров таких техник, составляющих этот класс методов приводятся цифровая обработка сигналов и обработка естественного языка; машинное обучение, включая обучение с учителем и без учителя — использование моделей, построенных на базе статистического анализа или машинного обучения для получения комплексных прогнозов на основе базовых моделей; искусственные нейронные сети, сетевой анализ, оптимизация, в том числе генетические алгоритмы; распознавание образов; 5 прогнозная аналитика; имитационное моделирование; пространственный анализ — класс методов, использующих топологическую, геометрическую и географическую информацию в данных; статистический анализ, в качестве примеров методов приводятся A/Bтестирование и анализ временных рядов; 6 1.1 Технология MapReduce Фреимворк MapReduce разработан в компании Google. Целью их работы было упростить написание распределенных программ, и улучшить их масштабируемость, используя преимущества функциональных языков программирования. Статья, описывающая эту разработку была опубликована в 2004 году, в 2010 году корпорация Google предоставила права на использование MapReduce компании Apache Software Foundation. Абстракция MapReduce изначально ориентирована на архитектуру с большим количеством узлов небольшой вычислительной мощности, однако с успехом применяется на многоядерных машинах и гетерогенных кластерах, что говорит о большой адаптивности фреймворка. Основные преимущества MapReduce – программа может быть ускорена простым добавлением вычислительных узлов. Написание программы сводится к описанию двух функций. Функция map размечает данные и выдаёт пары вида (ключ, значение). Результаты работы всех map функций, сортируются в списке по ключу, и подаются на вход reduce. Вы сможете применить MapReduce, если соответствующим образом перепишите свой алгоритм. С другой стороны, если у вас имеется последовательный алгоритм, который нужно применить к большому количеству данных, вы можете разбить эти данные на небольшие части и применить к ним несколько операций map и reduce, связанных в цепочку. Таким образом, мы получаем распределение по данным. Узким местом фреймворка является необходимость отработки map над всеми данными, прежде, чем начнется этап reduce. Это связано с тем, что на вход одной reduce задачи могут подаваться выходные данные нескольких map функций. Простым решением этой проблемы является выявление тормозящих данных 7 (например, записанных в некорректном формате), и их выброска из обработки. При условии, что это не повлияет на результат, скорость выполнения программы может быть существенно увеличена. MapReduce легко приспособить для обработки больших графовых структур. В частности, в компании Google MapReduce используется для решения таких графовых задач, как PageRanking — алгоритм ссылочного ранжирования. В этой задаче важность узла зависит от вероятности, что он будет включен в произвольный путь через граф. Однако, существующие открытые шаблоны обработки больших графов, имеют ряд существенных недостатков, влияющих на производительность. Одним из методов научных исследований является имитационное моделирование. Имитационная модель порождает большое количество данных во время сеанса имитационного моделирования, такие как события, происходящие в модели, изменения состояний модели. При моделировании вычислительных систем и компьютерных сетей удобно представлять эти данные в виде графов, с некотором количеством входов и выходов (полюсов). Ребрами таких графов являются пары полюсов. Рассмотрим задачу PageRanking для такого графа. PageRanking - один из алгоритмов ссылочного ранжирования. Алгоритм применяется к коллекции документов, связанных гиперссылками (таких, как веб-страницы), и назначает каждому из них некоторое численное значение, измеряющее его вес или ранг среди остальных документов. Алгоритм может применяться не только к вебстраницам, но и к любому набору объектов, связанных между собой взаимными ссылками, то есть к любому графу. [4] 8 Рисунок 1 - Реализация алгоритма PageRanking с помощью технологии MapReduce. Алгоритм можно реализовать в фреймворке MapReduce, цепочкой последовательных применений map и reduce: map передаёт данные о текущей важности узла его соседям, reduce — находит новое значение по приведённой выше формуле. Вычисления заканчиваются после достижения достаточной сходимости, или выполнения заранее заданного количества итераций. Ключом для пар (ключ, значение) является идентификатор вершины (числовое значение). В связи с тем, что стандартная реализация MapReduce использует hash функцию для разделения промежуточных данных на блоки, соседние узлы с малой вероятностью попадут в один блок, что существенно замедляет работу программы. Для решения этой проблем можно успешно использовать, регулируемые механизмы MapReduce. Например описав свой метод разбивки данных (partitioner) – определяет какому редуктору послать пару (ключ, список), или комбинатора данных (combiner) – механизм локальной редукции. Наглядно этот алгоритм можно рассмотреть на рисунке 1. Рассмотрим потоки данных MapReduce. MapReduce задание(job) единицы работы, езультат которой хочет получить клиент: она состоит из входных данных, MapReduce программы и конфигураций. Hadoop выполняет 9 задание, разделив его на задачи(task), которые бывают двух типов: map-задачи и reduce-задачи. Есть два типа узлов, которые управляют процессом выполнения задания: JobTracker и некоторое количетсво TaskTracker. JobTracker координирует всю работу выполняющуюся в системе планирую задачи для TaskTracker-ов. Tasktrackers выполненяют задачи и отправляют данные о ходе выполнения JobTracker-у, который ведет учет общего прогресса каждого задания. Если выполнение задачи не удается, JobTracker может перенести его на другой TaskTracker. [8] Hadoop делит входные данные MapReduce на части фиксированного размера, называемые расщепления (split, альтернативные переводы принимаются). Hadoop создает одну map задачу для каждого расщепления. Задача, в свою очередь, запускает пользователескую (описанную нами в программе) map-функцию для каждой записи расщепления. При наличии большого количества расщеплений , время, затраченное на обработку каждого расщепления будет достаточно мало по сравнению со времени, затраченным на обработку всего ввода. Таким образом, если мы обрабатываем расщепления параллельно, вычислительная нагрузка будет лучше сбалансированна, если расщепления малы, так как более быстрая машина сможет обработать пропорционально больше расщеплений в течение задания, чем медленнее машина. Даже если машины одинаковые, проваленные задачи или посторонние задания выполняемые на машине делают балансировку нагрузки желательной, и качество балансировки нагрузки возрастает по мере уменьшения расщеплений. С другой стороны, если расщепления слишком малы, то накладные расходы на управление ими и время затрачиваемое на создание map-задач начинает доминировать над общим временем выполнения задания. Для 10 большинства заданий, лучший размер расщепления, равен размеру HDFS блока (64 Мб по умолчанию, может быть изменено в настройках кластера (для всех вновь создаваемых файлов), или указано при создании отдельного файла). Hadoop делает всё возможное, чтобы запустить map-задачу на узле, на котором находятся данные в HDFS. Это называется локализацией вычислений (data locality optimization). Теперь должно быть понятно, почему оптимальный размер расщепления равен размеру блока: это самый крупный размер данных, который гарантированно будет храниться на одном узле. Допустим расщепление охватывает два блока: маловероятно, что любой узел HDFS хранит оба необходимых блока, поэтому некоторые из расщеплений должны быть переданы по сети на узел, где работает map-задача, что наверняка менее эффективно, чем выполнение map-задачи используя локальных данных. Map-задача записывают обработанные данные на локальный диск, а не HDFS. Почему это происходит? Выходные данные map — это промежуточный результат: они обрабатываются reduce, для получения конгечного результата и после этого могут быть удалены. Поэтому хранение этих данных в HDFS, с репликацией, будет излишним. Если произошла ошибка в узде выполняющем map-задачу, до того как данные были использованы reduce, Hadoop автоматически перезапустит map на другом узле, чтобы воссоздать данные заново. Reduce-задачи не имеют преимущества локальности данных, так как используют результат полученный от многих map-задач. Допустим есть одна reduce-задача, тогда на её вход подаются результаты всех map. Отсортированые результаты map-задач должны быть переданы по сети на узел, где задача выполняется reduce. Там они сливаются (пары с одинаковым ключом сливаются в 1 список), и передаются на вход пользовательской функции reduce (выполнений будет столько, сколько различных ключей). Выход reduce-задач как правило для надежности хранится в HDFS. Для каждого блока выхода 11 редукции: первая реплика хранится на локальном узле, вторая в той же стойке, другом узле, третья — в узле из другой стойки. То есть запись выходных данных reduce потребляет пропускную способность сети так же как обычная запись блока данных в HDFS. Каркас MapReduce не позволяет задавать в качестве типа произвольный класс. В MapReduce определен некий способ сериализации пар (ключ, значение) для передачи их через границы машин в кластере, и только классы поддерживающие эту сериализацию, могут выступать в роли типов ключей и значений. Точнее классы реализующие интерфэйс Writable, могут быть типами значений, а классы реализующие WritableComparable типами ключей или значений. Требование сравнимости ключа выдвигается потому, что на этапе редукции они сортируются, тогда как значения просто передаются наприямую. В состав Hadoop входят ряд готовых классов реализующих WritableComparable, например BooleanWritable, ByteWritable, DoubleWritable, FloatWritable, IntWritable, LongWritable, Text. NullWritable (заглушка для случвая когда ключи или значения не нужны1). Можно самостоятельно описать тип, реализовав интерфейс Writable или WritableComparable. Способ разбиения входного файла на порции определяется реализацией интерфейса InputFormat. По умолчанию используется TextInputFormat — каждая текстовая строка считается записью, ключ — номер строки в файле. Другие популярные классы: KeyValueTextInputFormat — каждая строка в текстовом файле считается записью, при этом ключом считается содержимое строки до разделителя (разделитель по умолчанию — символ табуляции); SequenceFileInputFormat<K, V> - для чтения специфичных файлов последовательностей, NlineInputFormat — то же что TextInputFormat, но каждая порция гарантированно состоит из N строк. Отметим также, что Apache Hadoop поддерживают работу со сжатыми типами данных. (Классы CompressedCombineFileInputFormat, 12 CompressedCombineFileRecordReader, CompressedCombineFileWritable) Выходной формат данных также можно настраивать, с помощью интерфейса OutputFormat. KeyValueTextInputFormat. По умолчанию Другие классы: используется — NullOutputFormat, SequenceFileOutputFormat<K,V> (предпочтителен для создания цепочек задач MapReduce) 13 1.2 Фреимворк Apache Hadoop Hadoop — проект фонда Apache Software Foundation, свободно распространяемый набор утилит, библиотек и программный каркас для разработки и выполнения распределённых программ, работающих на кластерах из сотен и тысяч узлов. Язык реализации — Java. Hadoop состоит из 4 подпроектов: 1) Hadoop Common (связующее программное обеспечение — набор инфраструктурных программных библиотек и утилит, используемых для других подпроектов и родственных проектов), 2) HDFS (распределённая файловая система) 3) Hadoop YARN: Фреимворк для управления ресурсами кластера 4) Hadoop MapReduce Разработка была инициирована в начале 2005 года Дугом Каттингом с целью построения программной инфраструктуры распределённых вычислений для проекта Nutch — свободной программной поисковой машины на Java, её идейной основой стала публикация сотрудников GoogleДжеффри Дина и Санжая Гемавата о вычислительной концепции MapReduce. В апреле 2010 года корпорация Google предоставила Apache Software Foundation права на использование технологии MapReduce, через три месяца после её защиты в патентном бюро США, тем самым избавив организацию от возможных патентных претензий. Начиная с 2010 года Hadoop неоднократно характеризуется как ключевая технология «больших данных», прогнозируется его широкое распространение для массово-параллельной обработки данных, и, наряду с Cloudera, появилась 14 серия технологических стартапов, целиком ориентированных на коммерциализацию Hadoop. Среди пользователей Hadoop можно отметить: Facebook, Yahoo, Amazon.com, intuit, apple, eBay, Google, IBM, MicroSoft, The New York Times, Twitter. В Hadoop Common входят библиотеки управления файловыми системами, поддерживаемыми Hadoop и сценарии создания необходимой инфраструктуры и управления распределённой обработкой, для удобства выполнения которых создан специализированный упрощённый интерпретатор командной строки (FS shell, filesystem shell), запускаемый из оболочки операционной системы командой вида: hdfs dfs -command URI где command — команда интерпретатора, URI — список ресурсов с префиксами, указывающими тип поддерживаемой файловой системы. 15 Рис уно к2Стр укту ра HDF S Бол ьша я част ь команд интерпретатора реализована по аналогии с соответствующими командами Unix (таковы, например, cat, chmod, chown, chgrp, cp, du, ls, mkdir, mv, rm, tail, притом, поддержаны некоторые ключи аналогичных Unix-команд, например ключ рекурсивности -R для chmod, chown, chgrp), есть команды специфические для Hadoop (например, count подсчитывает количество каталогов, файлов и байтов по заданному пути, expunge очищает корзину, а setrep модифицирует коэффициент репликации для заданного ресурса). HDFS (Hadoop предназначенная для Distributed File хранения файлов System) — больших файловая размеров, система, поблочно распределённых между узлами вычислительного кластера. Все блоки в HDFS (кроме последнего блока файла) имеют одинаковый размер, и каждый блок может быть размещён на нескольких узлах, размер блока и коэффициент репликации (количество узлов, на которых должен быть размещён каждый блок) определяются в настройках на уровне файла. Благодаря репликации обеспечивается устойчивость распределённой системы к отказам отдельных 16 узлов. Файлы в HDFS могут быть записаны лишь однажды (модификация не поддерживается), а запись в файл в одно время может вести только один процесс. Организация файлов в пространстве имён — традиционная иерархическая: есть корневой каталог, поддерживается вложение каталогов, в одном каталоге могут располагаться и файлы, и другие каталоги. Развёртывание экземпляра HDFS предусматривает наличие центрального узла имён, хранящего метаданные файловой системы и метаинформацию о распределении блоков, и серии узлов данных, непосредственно хранящих блоки файлов. Узел имён отвечает за обработку операций уровня файлов и каталогов — открытие и закрытие файлов, манипуляция с каталогами, узлы данных непосредственно отрабатывают операции по записи и чтению данных. Узел имён и узлы данных снабжаются веб-серверами, отображающими текущий статус узлов и позволяющими просматривать содержимое файловой системы. Административные функции доступны из интерфейса командной строки. HDFS является неотъемлемой частью проекта, однако, Hadoop поддерживает работу и с другими распределёнными файловыми системами без использования HDFS. С другой стороны, HDFS может использоваться не только для запуска MapReduce-заданий, но и как распределённая файловая система общего назначения, в частности, поверх неё реализована распределённая NoSQL-СУБД HBase, в её среде работает масштабируемая система машинного обучения Apache Mahout. YARN (Yet Another Resource Negotiator)— модуль, появившийся с версией 2.0 (2013), отвечающий за управление ресурсами кластеров и планирование заданий. Если в предыдущих выпусках эта функция была интегрирована в модуль MapReduce, где была реализована единым компонентом (JobTracker), то в YARN функционирует логически самостоятельный демон — планировщик ресурсов (ResourceManager), абстрагирующий все вычислительные ресурсы кластера и управляющий их предоставлением приложениям распределённой 17 обработки. Работать под управлением YARN могут как MapReduce-программы, так и любые другие распределённые приложения, поддерживающие соответствующие программные интерфейсы; YARN обеспечивает возможность параллельного выполнения нескольких различных задач в рамках кластера и их изоляцию (по принципам мультиарендности). Разработчику распределённого приложения необходимо реализовать специальный класс управления приложением (ApplicationMaster), который отвечает за координацию заданий в рамках тех ресурсов, которые предоставит планировщик ресурсов; планировщик ресурсов же отвечает за создание экземпляров класса управления приложением и взаимодействия с ним через соответствующий сетевой протокол. YARN может быть рассмотрен как кластерная операционная система в том смысле, что ведает интерфейсом между аппаратными ресурсами кластера и широким классом приложений, использующих его мощности для выполнения вычислительной обработки.. Hadoop MapReduce — программный каркас для программирования распределённых вычислений в рамках парадигмы MapReduce. Разработчику приложения для Hadoop MapReduce необходимо реализовать базовый обработчик, который на каждом вычислительном узле кластера обеспечит преобразование исходных пар «ключ — значение» в промежуточный набор пар «ключ — значение» (класс, реализующий интерфейс Mapper, назван по функции высшего порядка Map), и обработчик, сводящий промежуточный набор пар в окончательный, сокращённый набор (свёртку, класс, реализующий интерфейс Reducer). Каркас передаёт на вход свёртки отсортированные выводы от базовых обработчиков, сведе́ние состоит из трёх фаз — shuffle (тасовка, выделение нужной секции вывода), sort (сортировка, группировка по ключам выводов от распределителей — досортировка, требующаяся в случае, когда разные атомарные обработчики возвращают наборы с одинаковыми ключами, 18 при этом, правила сортировки на этой фазе могут быть заданы программно и использовать какие-либо особенности внутренней структуры ключей) и собственно reduce (свёртка списка) — получения результирующего набора. Для некоторых видов обработки свёртка не требуется, и каркас возвращает в этом случае набор отсортированных пар, полученных базовыми обработчиками. Hadoop MapReduce позволяет создавать задания как с базовыми обработчиками, так и со свёртками, написанными без использования Java: утилиты Hadoop streaming позволяют использовать в качестве базовых обработчиков и свёрток любой исполняемый файл, работающий со стандартным вводом-выводом операционной системы (например, утилиты командной оболочки UNIX), есть также SWIG-совместимый прикладной интерфейс программирования Hadoop pipes на C++. Также, в состав дистрибутивов Hadoop входят реализации различных конкретных базовых обработчиков и свёрток, наиболее типично используемых в распределённой обработке. В первых версиях Hadoop MapReduce включал планировщик заданий (JobTracker), начиная с версии 2.0 эта функция перенесена в YARN, и начиная с этой версии модуль Hadoop MapReduce реализован поверх YARN. Программные интерфейсы по большей части сохранены, однако полной обратной совместимости нет (то есть для запуска программ, написанных для предыдущих версий API, для работы в YARN в общем случае требуется их модификация или рефакторинг, и лишь при некоторых ограничениях возможны варианты обратной двоичной совместимости). Одной из основных целей Hadoop изначально было обеспечение горизонтальной масштабируемости кластера посредством добавления недорогих узлов (оборудования массового класса, без прибегания к мощным серверам и дорогим сетям хранения данных. Функционирующие кластеры размером в тысячи узлов подтверждают осуществимость и экономическую 19 эффективность таких систем, так, по состоянию на 2011 год известно о крупных кластерах Hadoop в Yahoo (более 4 тыс. узлов с суммарной ёмкостью хранения 15 Пбайт каждый), Facebook (около 2 тыс. узлов на 21 Пбайт) и Ebay(700 узлов на 16 Пбайт).. Тем не менее, считается, что горизонтальная масштабируемость в Hadoop-системах ограничена, для Hadoop до версии 2.0 максимально возможно оценивалась в 4 тыс. узлов при использовании 10 MapReduce-заданий на узел. Во многом этому ограничению способствовала концентрация в модуле MapReduce функций по контролю за жизненным циклом заданий, считается, что с выносом её в модуль YARN в Hadoop 2.0 и децентрализацией — распределением части функций по мониторингу на узлы обработки — горизонтальная масштабируемость повысилась. Ещё одним ограничением Hadoop-систем является размер оперативной памяти на узле имён (NameNode), хранящем всё пространство имён кластера для распределения обработки, притом общее количество файлов, которое способен обрабатывать узел имён — 100 млн. Для преодоления этого ограничения ведутся работы по распределению узла имён, единого в текущей архитектуре на весь кластер, на несколько независимых узлов. Другим вариантом преодоления этого ограничения является использование распределённых СУБД поверх HDFS, таких как HBase, роль файлов и каталогов в которых с точки зрения приложения играют записи в одной большой таблице базы данных. Масштабируемость Hadoop-систем в значительной степени зависит от характеристик обрабатываемых данных, прежде всего, их внутренней структуры и особенностей по извлечению из них необходимой информации, и сложности задачи по обработке, которые, в свою очередь, диктуют организацию циклов обработки, вычислительную интенсивность атомарных операций, и, в конечном счёте, уровень параллелизма и загруженность кластера. В руководстве Hadoop (первых версий, ранее 2.0) указывалось, что приемлемым уровнем 20 параллелизма является использование 10—100 экземпляров базовых обработчиков на узел кластера, а для задач, не требующих значительных затрат процессорного времени — до 300; для свёрток считалось оптимальным использование их по количеству узлов, умноженному на коэффициент из диапазона от 0,95 до 1,75 и константу mapred.tasktracker.reduce.tasks.maximum. С большим значением коэффициента наиболее быстрые узлы, закончив первый раунд сведения, раньше получат вторую порцию промежуточных пар для обработки, таким образом, увеличение коэффициента избыточно загружает кластер, но при этом обеспечивает более эффективную балансировку нагрузки. В YARN вместо этого используются конфигурационные константы, определяющие значения доступной оперативной памяти и виртуальных процессорных ядер, доступных для планировщика ресурсов, на основании которых и определяется уровень параллелизма. [8] 21 2. Источники больших данных в системах моделирования Компьютерная модель или численная модель — компьютерная программа, работающая на одном или нескольких вычислительных узлах, реализующая представление объекта, системы или понятия в форме, отличной от реальной, но приближенной к алгоритмическому описанию, включающей и набор данных, характеризующих свойства системы и динамику их изменения со временем. Компьютерные модели стали обычным инструментом математического моделирования и применяются в физике, астрофизике, механике, химии, биологии, экономике, социологии, метеорологии, других науках и прикладных задачах в различных областях радиоэлектроники, машиностроения, автомобилестроения и проч. Компьютерные модели используются для получения новых знаний о моделируемом объекте или для приближенной оценки поведения систем, слишком сложных для аналитического исследования. Компьютерное моделирование является одним из эффективных методов изучения сложных систем. Компьютерные модели проще и удобнее исследовать в силу их возможности проводить т.н. вычислительные эксперименты, в тех случаях когда реальные эксперименты затруднены из-за финансовых или физических препятствий Логичность и или могут формализованность дать непредсказуемый компьютерных моделей результат. позволяет определить основные факторы, определяющие свойства изучаемого объектаоригинала (или целого класса объектов), в частности, исследовать отклик моделируемой физической системы на изменения ее параметров и начальных условий. Построение компьютерной модели базируется на абстрагировании от конкретной природы явлений или изучаемого объекта-оригинала и состоит из двух этапов — сначала создание качественной, а затем и количественной модели. Чем больше значимых свойств будет выявлено и перенесено на 22 компьютерную модель — тем более приближенной она окажется к реальной модели, тем большими возможностями сможет обладать система, использующая данную модель. Компьютерное же моделирование заключается в проведении серии вычислительных экспериментов на компьютере, целью которых является анализ, интерпретация и сопоставление результатов моделирования с реальным поведением изучаемого объекта и, при необходимости, последующее уточнение модели и т.д. К основным этапам компьютерного моделирования относятся: обработка концептуальной модели, выявление основных элементов системы и элементарных актов взаимодействия; формализация, то есть переход к математической модели; создание алгоритма и написание программы; планирование и проведение компьютерных экспериментов; анализ и интерпретация результатов. Различают аналитическом аналитическое моделировании и имитационное изучаются моделирование. математические При (абстрактные) модели реального объекта в виде алгебраических, дифференциальных и других уравнений, а также предусматривающих осуществление однозначной вычислительной процедуры, приводящей к их точному решению. При имитационном моделировании исследуются математические модели в виде алгоритма(ов), воспроизводящего функционирование исследуемой системы путем последовательного выполнения большого количества элементарных операций. 23 2.1. Процессы порождения информации в системах имитационного моделирования Имитационное моделирование (симуляция) – это распространенная разновидность аналогового моделирования, реализуемого с помощью набора математических средств, специальных компьютерных программ-симуляторов и особых IT, позволяющих создавать в памяти компьютера процессы-аналоги, с помощью которых можно провести целенаправленное исследование структуры и функций реальной системы в режиме ее «имитации», осуществить оптимизацию некоторых ее параметров. Имитационная модель должна отражать логику и закономерности поведения моделируемого объекта во времени (временная динамика) и пространстве (пространственная динамика). К имитационному моделированию прибегают, когда: дорого или невозможно экспериментировать на реальном объекте; невозможно построить аналитическую модель: в системе есть время, причинные связи, последствие, нелинейности, стохастические (случайные) переменные; необходимо сымитировать поведение системы во времени. Цель имитационного моделирования состоит в воспроизведении поведения исследуемой системы на основе результатов анализа наиболее существенных взаимосвязей между её элементами или другими словами — разработке симулятора исследуемой предметной области для проведения различных экспериментов. [5] Имитационное моделирование позволяет имитировать поведение системы во времени. При чём плюсом является то, что временем в модели можно управлять: замедлять в случае с быстропротекающими процессами и ускорять для моделирования систем с медленной изменчивостью. Можно имитировать 24 поведение тех объектов, реальные эксперименты с которыми дороги, невозможны или опасны. С наступлением эпохи персональных компьютеров производство сложных и уникальных изделий, как правило, сопровождается компьютерным трёхмерным имитационным моделированием. Эта точная и относительно быстрая технология позволяет накопить все необходимые знания, оборудование и полуфабрикаты для будущего изделия до начала производства. Компьютерное 3D-моделирование теперь не редкость даже для небольших компаний. Виды имитационного моделирования Агентное моделирование — относительно новое (1990-е-2000-е гг.) направление в имитационном моделировании, которое используется для исследования децентрализованных систем, динамика функционирования которых определяется не глобальными правилами и законами (как в других парадигмах моделирования), а наоборот, когда эти глобальные правила и законы являются результатом индивидуальной активности членов группы. Цель агентных моделей — получить представление об этих глобальных правилах, общем поведении системы, исходя из предположений об индивидуальном, частном поведении её отдельных активных объектов и взаимодействии этих объектов в системе. Агент — некая сущность, обладающая активностью, автономным поведением, может принимать решения в соответствии с некоторым набором правил, взаимодействовать с окружением, а также самостоятельно изменяться. Дискретно-событийное моделирование — подход к моделированию, предлагающий абстрагироваться от непрерывной природы событий и рассматривать только основные события моделируемой системы, такие, как: «ожидание», «обработка заказа», «движение с грузом», «разгрузка» и другие. Дискретно-событийное моделирование наиболее развито и имеет огромную сферу приложений — от логистики и систем массового 25 обслуживания до транспортных и производственных систем. Этот вид моделирования наиболее подходит для моделирования производственных процессов. Основан Джеффри Гордоном в 1960-х годах. Системная динамика — парадигма моделирования, где для исследуемой системы строятся графические диаграммы причинных связей и глобальных влияний одних параметров на другие во времени, а затем созданная на основе этих диаграмм модель имитируется на компьютере. По сути, такой вид моделирования более всех других парадигм помогает понять суть происходящего выявления причинно-следственных связей между объектами и явлениями. С помощью системной динамики строят модели бизнес-процессов, развития города, модели производства, динамики популяции, экологии и развития эпидемии. Метод основан Джеем Форрестером в 1950 годах. 26 2.2. Вычислительные алгоритмы обработки последовательностей Каждый из этих методов может порождать огромные объёмы данных, в зависимости от числа исследуемых параметров и временных промежутков. Не нарушая общности будем считать эти данные последовательностями, так как именно в таком виде они хранятся в компьютере. Строковая последовательность — это набор элементов, которые удовлетворяют правилам: Каждый элемент последовательности имеет уникальную метку. Каждый элемент с некоторой меткой х (за исключением не более одного элемента, который называется самый левый элемент) имеет единственный предшествующий элемент с меткой p(х). Каждый элемент с некоторой меткой х (за исключением не более одного элемента, который называется самый правый элемент) имеет единственный последующий элемент с меткой, s(х). Для любого элемента с меткой x, который не является самым левым, выполняется равенство х = s(p(х)). Для любого элемента с меткой х, который не является самым правым, выполняется равенство х = p(s(x)). Для двух различных элементов с метками х и у существует такое целое положительное число к, что х = sk(у) или х = pk(у). Эти правила охватывают сущность понятия сочленения и операции конкатенации, выполняющей это сочленение: каждый элемент последовательности, за исключением самого левого и самого крайнего 27 элементов, имеет единственный предшествующий и единственный последующий элементы. Самый левый и самый крайний элементы имеют или единственного последующего, или единственного предшествующего элемента. Более того, начиная с любого элемента с меткой х мы, перебирая конечную последовательность предшествующих и последующих элементов, можем достичь любого другого элемента с меткой x. Критическим (но не очевидным) фактором этого определения являются условия в правилах 1 и 2, что может быть не более одного самого левого и не более одного самого правого элементов. 28 2.3. Паттерны в последовательностях Вычисление паттернов в строковых последовательностях — это фундаментальная проблема, которая возникает во многих областях науки и информационных технологий. Манипулирование текстом в текстовых редакторах, лексический анализ компьютерных программ, работа конечных автоматов, извлечение информации из баз данных — это малая часть тех процессов, которые требуют нахождения или вычисления паттернов. Алгоритмы вычисления паттернов находят применение в таких областях, как сжатие данных, криптография, распознавание речи и компьютерное зрение, вычислительная геометрия и молекулярная биология. Тема вычисления паттернов в строковых последовательностях важна не только из-за своего практического применения. Она является частью комбинаторики, где, как известно, существует много просто формулируемых задач, для которых, однако, очень сложно найти решение, и интерпретация таких задач, как вычисление паттернов, часто позволяет найти элегантное и точное их решение. [1] Будем различать три основных типа паттернов — частные, характеристические и внутренние. Частный паттерн (specific pattern) — это единственный вид паттернов, который можно задать в виде списка символов в нужном порядке. Например, в строке х — abaababaabaab мы можем найти (трижды) паттерн и = abaab, но не найдем паттерн и = ababab. (Иногда паттерн может содержать специальные "символы замещения", и в этом случае возможно только "приближенное" (в некотором точно определенном смысле) сравнение паттерна и строки.) Характеристические паттерны (generic patterns) основаны на специальных представлениях структурной информации о строковых последовательностях. Например, мы можем говорить о "повторениях" в строке х — в этом случае в строке х есть несколько смежных одинаковых подстрок. Внутренние паттерны отображают внутреннюю 29 структуру строковых последовательностей. Паттерны формируют основу для эффективных процедур обработки строковых последовательностей. Пример классического алгоритма обработки паттернов: имеется строка (иногда называемая текстом) и требуется найти одно или все вхождения в нее другой заданной строки (которая называется паттерном). Такую операцию, например, многократно (за один сеанс работы) выполняют текстовые редакторы. Другой пример этой задачи не такой очевидный: молекулярные биологи получают из международной базы данных генетической информации сегменты ДНК длиной 65 5 млн комплиментарных пар оснований нуклеиновых кислот (в нашей терминологии — это строка из 5 млн букв) для определения местоположения в этом большом сегменте отдельных коротких сегментов ДНК, состоящих из 300 комплиментарных пар оснований нуклеиновых кислот. Во многих практических ситуациях сформулированные выше задачи поиска и сравнения строковых последовательностей не всегда адекватно отображают действительность. Например, при исследовании ДНК частичные паттерны частоповторяются в различных позициях, но эти повторяющиеся подстроки не совпадают абсолютно точно. Другими словами, в практических ситуациях представленный паттерн р может распознаваться на каких-либо подстроках исследуемой строки х, даже если между ними (между паттерном и сравниваемой подстрокой) нет полного совпадения. Например, если р = CGAT и допустима перестановка двух первых или двух последних букв, тогда р и GCAT и р% CGTA. Поэтому в строке х = ТСТ AGGCGATTCGGC AT ATTCGCGT AGCTCTА подчеркнутые подстроки будут считаться совпадающими с паттерном р. Основная идея в использовании аппроксимирующих 30 (приближенных) паттернов состоит в определении "расстояния" между двумя строками. В общем случае расстояние между строками p1 и р2 рассчитывается как взвешенное количество стандартных операций редактирования, необходимых для выполнения преобразования p1 в p2. Обычно рассматривают следующие операции редактирования: Вставка — например, вставка символа G в строку GCAT сформирует строку GCGAT. Удаление — например, удаление символа G из строки GCGAT сформирует строку CGAT. Подстановка — например, подстановка символа G вместо символа С из строки GCAT сформирует строку GGAT. Конечно, перечисленные операции определены только для непустых символов. На основе этих операций можно определить несколько типов расстояния между строками, некоторые из которых мы сейчас рассмотрим. 1. Если две строки x1 и x2 имеют одинаковую длину n, расстояние Хемминга dH{х1, x2) определяется как минимальное количество подстановок, необходимых для преобразования строки х1 в строку х2. Так, dH(GCAT, CGAT) = 2. Отметим, что для замены некоего символа x1 на какой-нибудь другой может потребоваться одна операция удаления этого символа и одна операция вставки нового символа после предыдущего символа. 2. Для произвольных строк х1 и х2 расстояние Левенштейна dL(x1,,x2) определяется как минимальное количество операций удаления и вставки, необходимых для преобразования строки х1 в строку х2. Так, dL(GCAT,CGAT) = 2, но 31 dL(GCGAT,CGAT) = dL{CAT,CGAT) = 1. Если строки x1 и x2 имеют одинаковую длину, то совсем не обязательно, что dH(х1,x2) = dL(x1, x2). Например, если х1 = CGA и x2 = AGT, то dH(CGA, AGT) = 2, тогда как dL(CGA,AG'T) = 4. Отметим, что последовательность операций удаления и вставки, преобразующих строку х1 в строку х2, может определяться неоднозначно, даже если общее количество таких операций одинаково. Например, строку GGATA можно преобразовать в строку ATACG путем применения четырех операций удаления символов CG и AT и последующих четырех вставок символов AT и CG либо путем применения двух операций удаления префикса CG и последующих двух вставок суффикса CG. 3. Для произвольных строк х1 и x2 расстояние преобразования dE{x1, x2) определяется как минимальное количество операций удаления, вставки и подстановки, необходимых для преобразования строки х1 в строку х2. Здесь предполагается, что подстановка одной буквы вместо другой выполняется за одну операцию, тогда как при вычислении расстояния dL подстановка выполняется за две операции: удаление и последующая вставка. Чтобы лучше понять, как dE соотносится с dH и dL, рассмотрим строки х1 = CGACG и x2 = GTCGA. Для этих строк dH{x1, x2) = 5, поскольку ни на одном месте в этих строках нет попарно совпадающих букв,и поэтому для получения из одной строки другой требуется ровно пять подстановок. Но dL(x1, x2) = 4, так как необходимо удалить префикс С, вставить суффикс А и заменить букву А на букву Т, для чего потребуется одна операция удаления и одна операция вставки. Однако dE(x1, x2) = 3, поскольку здесь для замены буквы А на букву Т требуется только одна операция. 4. Предыдущие определения расстояния основаны на том, что все операции редактирования подсчитываются с одинаковыми значениями. Однако 32 покрайней мере для операции подстановки одинаковые не всегда верно значения отражают условия решаемой задачи. Например, если некоторые подстановки (скажем, С —> G) выполняются чаще или с большей вероятностью, чем другие подстановки (например, С —> Т). Чтобы отобразить такие различия, разным подстановкам назначаются разные веса, которые представляются в виде матрицы весов W. (Так, например, делается в молекулярной биологии.) Матрица весов имеет размерность ахай состоит из не отрицательных действительных чисел, где число W[i, j] является весом замены (подстановки) j-й буквы 1-й буквой алфавита А. Для произвольных строк x1 и x2 взвешенное расстояние dW(x1, x2) определяется как минимальная сумма количества операций удаления и вставки и весов операций подстановок, необходимых для преобразования строки х1 в строку х1, при этом веса задаются матрицей весов W. . Обычно требуется, чтобы функция расстояния d, определенная на какойлибо области D, удовлетворяла условиям метрики: для любых u, v, w принадлежащих D: d(u, v) >= 0 - условие неотрицательности d(u, v) = 0 <=> +u = v - условие единственности d(u, v) = d(v, u) - условие симметричности d(u, v) <= d(u, v) + d(v, w) - неравенство треугольника Во многих практических приложениях матрица W не симметричная или же необходимо,чтобы функция расстояния учитывала не только веса операции подстановки, но и возможные веса операций вставки и удаления. 33 2.4 Онлайновые алгоритмы обработки последовательностей Просмотр строковых последовательностей естественно выполнять слева направо. Поэтому чрезвычайно привлекательным свойством строковых алгоритмов считается их онлайновость. Это означает, что если в процессе вычислений уже просмотрена позиция i в строковой последовательности, то алгоритм уже не вернется к этой позиции i снова. Другими словами, онлайновый алгоритм никогда не выполняет возврата к уже просмотренным позициям. Существует также более слабое определение онлайновых алгоритмов. Например, алгоритм называется онлайновым с окном размера k, если существует такая положительная константа k, что для выполнения вычислений в текущей позиции i требуется не более k строковых позиций из интервала i — k + 1..i Еще одно подобное слабое определение позволяет считать алгоритм онлайновым, если значение, вычисляемое алгоритмом для любой позиции i, никогда не пересчитывается, даже если потребуется заново обратиться к позициям меньше i. Из любого сделанного выше определения онлайновости следует, что строковый онлайновый алгоритм при решении определенной задачи для строки x = x[1..п] эффективно решает ту же задачу для каждого префикса x[1..i] этой строки. Таким образом, можно сказать, что онлайновый алгоритм фактически решает n задач по цене одной задачи. Например, онлайновым является алгоритм Кнута-Мориса-Пратта для вычисления всех вхождений шаблона p в шаблон x. Основная идея этого алгоритма заключается в последовательном сдвиге паттерна p вдоль строковой последовательности x и сравнении его с просматриваемым участком последовательности х так. При этом паттерн р сдвигается на следующую букву 34 вдоль строки х только в том случае, когда р не совпадает с текущим участком последовательности х. Рассмотрим этот алгоритм на примере x = an, p = am-1b, 2 <= m <= n В этом примере после сравнения с подстрокой x[1..m] мы будем располагать информацией, что x[1..m — 1] = p[1..m — 1] = am-1 Чтобы проверить, будет ли паттерн p совпадать с подстрокой x[2..m + 1], нет необходимости проводить сравнения в подстроке x[2..m — 1], поскольку уже известно, что x[2..m — 1] = am-2, поэтому следует провести только одно сравнение x[m] : p[m - 1], и в случае равенства этих букв, мы фиксируем несовпадение x[m + 1] ≠ b = p[m] Применяя эту стратегию в каждой позиции i <= n — m + 1, можно показать, что выполняется всего 2n - m буквенных сравнений,а не m(n - m + 1),, как можно было ожидать. На этом примере показана основная особенность алгоритма - сравнения x[i..i + h — 1] = p[1..h], 1 <= h <= m можно (частично или полностью) использовать для избежания дальнейшей проверки подстроки u = x[i..i + h - 1]. Если паттерн р входит в строку х в некоторой позиции i' принадлежащей i..i + h — 1, тогда строкa u = p[1..h] имеет не пустой собственный префикс p[1..h'], h' = i + h — i', 35 а также суффикс x[i'..i + h — 1]. Другими словами, подстрока p[l..h'] должна быть гранью строки u = p[l..h]. Таким образом, с помощью граней строки г надо определить только те позиции i', в которых может встретиться р. Но поскольку u — это подстрока p[l..h] паттерна р для некоторого h принадлежащего 1..m, то нет необходимости вычислять грани строки u в процессе выполнения алгоритма — можно вычислить их заранее и сохранить в массиве граней β = β[1..m]. Поэтому алгоритм Кнута-Мориса-Пратта имеет предварительный этап, на котором вычисляется массив B. [1] Фактически надо предварительно вычислить не сам массив граней, а его более слабый вариант. Обозначим через j позицию в паттерне р первого несовпадения. Тогда префикс паттерна р, который не требует проверки при следующем сравнении, — это наибольшая грань подстроки p[l..j — 1]. Поэтому следующей буквой для сравнения будет p[β[j — 1] + 1], где β[j — 1] — длина наибольшей грани подстроки p[1..j - 1], при этом, конечно, β[j - 1] < j - 1. Следовательно, в действительности для всех j принадлежащих 2..m + 1 надо вычислить β'[j] = β[j - 1] + 1, положив при этом β2'[1] =0. Отметим, что для j >= 2 β[j — 1] + 1 < (j — 1) + 1 = j, поэтому β'[j] < j. Если j = 1, тогда сравнивать нечего, и в этом случае необходимо изменить значение i, т.е. сдвинуть паттерн вдоль строки x. После этих пояснений мы можем записать алгоритм. Заметим, что оператор присвоения, выполняемый в результате несовпадения p[j] и x[i],соответствует сдвигу вправо вдоль строки х паттерна р на j - β'[j] позиций. Алгоритм Кнута-Морриса-Пратта нахождение всех вхождений паттерна р в строку x: i ← 1; j ← 1 36 while i ≤ n — m + j do (i, j) ← match(i, j, m) if j = m + 1 then output i - m if j = 1 then i ← j + 1 else j ← β'[j] Отметим, что в этом алгоритме процедура match (сравнить) выполняет сравнение "буква забуквой" слева направо начиная с заданной позиции j. Алгоритм Кнута-Морриса-Пратта корректно вычисляет все вхождения заданного непустого паттерна р в заданную строку х. 37 3. Параллельные алгоритмы обработки больших данных имитационного моделирования Пусть M – дискретная событийно-ориентированная модель некоторой системы, функционирующей во времени, Sim – симулятор (алгоритм, выполняющий сеанс имитационного моделирования), BD = Sim(M) – данные большого объема, порождаемые симулятором. Элементы данных могут быть представлены в виде (Statei , si), и естественным образом упорядочены по не убыванию параметра s – системного времени модели. Здесь si – момент системного времени, в который произошло i-е событие в модели, Statei – состояние системы в этот момент. Таким образом, BD может рассматриваться как последовательность (протокол) длины n, со значениями n для реальных моделей более 107. Задача анализа результатов сеанса имитации – это задача разработки алгоритмов, исходными данными для которых являются длинные последовательности. В этих условиях даже алгоритмы квадратичной сложности требуют большого времени исполнения, не говоря уже об алгоритмах переборного характера. Существенное ускорение в реализации может быть достигнуто при использовании вычислительных систем с массовым параллелизмом или больших распределенных систем. [2] В настоящей работе мы рассмотрим параллельные алгоритмы для вычисления расстояний Хемминга между последовательностями, а также поиск частного паттерна внутри длинной последовательности. Зачастую имитационное моделирование применяется для сравнения двух систем. Такое сравнение можно провести через сравнение двух последовательностей BD1 и BD2 , порождаемых этими системами. Совпадение последовательностей, BD1 = BD2 , говорит о тождестве систем (в пределах, позволяющих их различать при данном исследовании). Различие может 38 проявляться при отдельных событиях и тогда мерой различия систем можно считать различие (расстояние) между последовательностями. В литературе рассматриваются различные метрики. Мы рассмотрим параллельные алгоритмы вычисления расстояний Хемминга и алгоритм нахождения частного паттерна. Вычисление расстояния Хемминга представляет собой «жесткий» вариант сравнения протоколов моделируемых систем: учитывается только совпадение или отличие в одинаковых позициях. При этом интуитивно подобные, но с разными начальными условиями, протоколы будут давать значительное расстояние Хемминга, увеличивающееся с длиной протокола. Хотя интуитивно ясно, что в таком случае расстояние не должно увеличиваться с увеличением длины протокола. Этих недостатков лишено расстояние Левенштейна, представляющее собой более гибкий вариант сравнения протоколов, к тому же не требующий равенства их длин. [3] 39 3.1 Алгоритм поиска расстояния Хемминга Расстояния Хемминга может быть вычислено с использованием параллельно работающих p процессоров следующим образом: class Mapper method Map(pronum n, protocol s) Emit(pronum n, protocol s) class Reducer method Reduce(pronum n, [s1 , s2]) D ← HammingDistance(s1 , s2) Emit(1, D) method Reduce2(1, [d1, d2, d3, … ]) Distance ← 0 for all d in [d1, d2, ....] do Distance ← Distance + d Emit('Hamming distance:', Distance) Здесь HammingDistance(s1 , s2) — реализация последовательного поиска расстояния Хэмминга между протоколами s1 и s2. Реализация данного алгоритма в таком виде позволяет нам воспользоваться преимуществами MapReduce. Поиск расстояния между двумя длинными протоколами разбивается на 3 этапа. Первый этап: функция map считывая построчно оба протокола, помечает их номерами, по которому они группируются для передачи в Reduce. Второй этап: поиск расстояний между 40 короткими подпоследовательностями, который может выполняться параллельно на нескольких машинах. Третий этап: расчет суммы найденных расстояний. Асимптотическая оценка сложности этого алгоритма складывается из суммы оценок выполнения всех Map и Reduce заданий, и равна , где количество протоколов, (1) - количество параллельно выполняющихся map функций, параллельно выполняющихся reduce функций, – - длина – длина считываемой map последовательности, настраиваемый параметр. 41 3.2 Алгоритм поиска частного паттерна. Рассмотрим задачу поиска частного паттерна в протоколе, в контексте больших данных. Ниже приведён возможный алгоритм реализации данной задачи в терминах MapReduce. class Mapper method Map (pronum i, protocol S) Match ← FindPattern(S, Pattern) RequestPronum ← i + 1; RequestPatternpose ← Match.PatternPose + Prolength — Match.Propose Match.status ← Is; Emit(i:Patternpose, Match) Match.status ← Request; Emit(RequestPronum:RequestPatternpose, Match) class Reducer method Reduce (Pronum:Patternpose, [Match1, Match2]) if (Match1 and Match2) if ( Match1.Begin and not Match2.End) { RequestPronum ← Match2.Pronum + 1 RequestPatternpose ← Match2.Propose Match1.status ← Is; 42 Match2.PatternPose + Prolength — Emit(Match1.Propose:Match1.Patternpose, Match1) Match1.status ← Request; Emit(RequesrPronum:RequestPatternpose, Match1) } if (Match1.Begin and Match2.End) { Match1.Complited ← TRUE Match1.LastPronum ← Match2.Pronum Emit(Match1.Propose, Match1) } if (not Match1.Begin and Match2.End) { RequestPronum ← ProNum + 1 RequestPatternpose ← PatternPose + Prolength Match2.Propose Match1.status ← Is; Emit(Match1.Propose + Match1.PatternPose, Match1) Match1.status ← Is; Emit(RequestPronum + RequestPatternPose, Match1) Match2.status ← Is; Emit(Match2.Propose:Match2.PatternPose, Match2) } 43 — Здесь Pattern — глобальная переменная; под операцией « : » понимается операция конкатенации строк; Prolength - длина строки (предполагается что строки имеют одинаковую длину); объект Match имеет следующие поля: Begin, End — принимает значение TRUE если найденое совпадение содержит первый/последний символ паттерна соотвтественно, Propose, Pronumber — содержат номер строки и позицию в строке в которой найдено совпадение, PatternPose — позиция в шаблоне, с которой начинается совпадение, Status – принимает одно из возможных значений Request или Is, Complited — принмает значение TRUE если шаблон найден целиком, Lastpronum — принимает значение номера последней строки в которой найден шаблон; функция FindPattern(S, Pattern) — последовательный алгоритм поиска совпадения строки с шаблоном. Словесное описание алгоритма: Входной протокол разбивается на последовательности, длины , считываемые Map. Map ищет все совпадения между отрезками паттерна и входными последовательностями (так как паттерн в общем случае имеет длину больше ). Для каждого найденного совпадения, если только оно не содержит конец шаблона, Map возвращает 2 пары значений. Первая пара в качестве ключа содержит данные о позиции, в которой найдено совпадение, и в качестве значения – объект со статусом Is. Вторая пара содержит объект со статусом request и в качестве ключа имеет данные об позиции шаблона и номере последовательности в которой предположительно должно быть продолжение шаблона. Таким образом, получим на входе Reduce список из 1 или 2 объектов. Если объектов 2, это означает, что мы нашли 2 соседние последовательности содержащие шаблон. Далее Reduce повторяет выполнение до тех пор, пока не найден весь шаблон или не превышен лимит на количество итераций. Если шаблон помещается в 8 строк исходной последовательности, вывод map будет выглядеть как показано на рисунке 3. 44 Ри су но к3 В ыв од Re du ce при поиске частного шаблона. Для того чтобы полностью обнаружить шаблон потребовалось 3 этапа. На первом этапе формируются последовательности длины получаем 5 последовательности длины На втором шаге , 1 последовательность длины , и последовательность длины , содержащую конец шаблона. Необходимость всегда возвращать информацию о совпадении, содержащую конец отрезка в неизменном виде необходима для случая, когда паттерн делится на нечетное количество последовательностей. Как видно, Reduce имеет здесь избыточный выход, однако на последнем шаге гарантированно будет только 1 объект, содержащий информацию о всём шаблоне. Кроме того выполняемый в reduce код имеет константную оценку сложности. Самая сложная часть алгоритма выполняется в функции Map над последовательностями незначительной длины и может быть перенесена на сторону данных. Оценка сложности всего алгоритма 45 (2) где - количество параллельно выполняющихся map функций, количество протоколов, параллельно выполняющихся функций, – длина – длина считываемой Map строки, настраиваемый параметр, длина шаблона, – константы, – – количество повторений шаблона в протоколе. В этой формуле FindPattern(); reduce - - оценка сложности функции – количество выполняемых последовательно функций map, – количество этапов за которые в reduce попадёт полный шаблон, – грубая оценка количества reduce выполняемых последовательно на каждом шаге. 46 ЗАКЛЮЧЕНИЕ Изучена проблема больших данных имитационного моделирования и обработки больших строковых последовательностей. Освоена технология программирования для фреимворка MapReduce и свободно распространяемый инструмент для его реализации — Hadoop. Разработаны алгоритмы для поиска частного паттерна и вычисления расстояния Хемминга последовательностями в режиме offline генерируемыми и над длинными накапливаемыми строковыми в ходе имитационного моделирования. Проведена оценка алгоритмов. Из приведенных оценок видно, что их производительность для больших последовательностей многократно превосходит последовательные. Важно так же отметить, что использование технологии MapReduce не противоречит проблеме хранения больших данных, так как Apache Hadoop позволяет работать непосредственно со сжатыми данными. 47 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Смит Б. Методы и алгоритмы вычислений на строках // М.: ООО «И.Д. Вильямс», - 2006, - 496 стр 2. Миков А.И., Моспан Н.В. Распределённая обработка паттернов в больших данных имитационного моделирования. // ТРИС-2013: материалы конференции. Том 1, - Таганрог: Издательство Технологического института ЮФУ, - 2013, - С. 24-28; 3. Миков А.И., Моспан Н.В. Параллельная обработка паттернов в больших данных имитационного моделирования. // Информатизация и связь, 2013, - №2, - С. 141-143; 4. Миков А.И., Моспан Н.В. Обработка больших данных с помощью MapReduce. // Материалы конференции. Краснодар, 2013 Компьютерные технологии и вычислительная математика,- С. 13 - 14 5. Миков А.И., Замятина Е.Б. Инструментальные средства имитационного моделирования для анализа бизнес-процессов и управления рисками. // Информатизация и связь, — 2011, - № 3, - C. 14 – 16. 6. Замятина Е.Б., Миков А.И. Программные средства системы имитации Triad.NET для обеспечения ее адаптируемости и открытости. // Информатизация и связь, - 2012, - №5, - C. 130 – 133. 7. Миков А.И., Воробьев В.В. Моделирование агентов с деонтической логикой, функционирующих в распределенных системах. Информатизация и связь, — 2012, - № 5, — C. 82 – 85. 8. Tom W. Hadoop: The Definitive Guide. // O'Reilli, — 2011, - 504. 9. Jeffrey D., Sanjay G. MapReduce: Simplified Data Processing on Large Clusters. [электронный ресурс] URL: 48 // http://static.googleusercontent.com/media/research.google.com/ru//archive/mapreduceosdi04.pdf дата обращения: 25.10.2013 10. Lin J., Schatz M. Design Patterns for Efficient Graph Algorithms in [электронный MapReduce. ресурс] URL: https://cs.wmich.edu/gupta/teaching/cs5950/sumII10cloudComputing/graphAlgo%20in%20mapRe duce%20paper%20p78-lin.pdf дата обращения: 12.08.2013 11. Lammel R. Google’s MapReduce programming model — Revisited. // Science of Computer Programming, – 2008, – page 1 - 30 12. Bressan S., Cuzzocrea A., Karras P., Lu X., Heyrani Nobari S. An effective and efficient parallel approach for random graph. // Journal of Parallel and Distributed Computing, - 2013, – page 303 - 316 13. Черняк Л. Большие Данные — новая теория и практика // Открытые системы. СУБД, - 2011, — № 10. 14. Моррисон, Алан. Большие Данные: как извлечь из них информацию. // Технологический прогноз, - 2010, - № 3. 15. Gartner Says Solving 'Big Data' Challenge Involves More Than Just Managing Volumes of Data. [электронный Gartner. http://www.gartner.com/newsroom/id/1731916 ресурс] URL: дата обращения: 12.12.2013 16. Manyika, James. Big data: The next frontier for innovation, competition, and productivity. McKinsey Global Institute [электронный ресурс] URL: http://www.mckinsey.com/insights/business_technology/big_data_the_next_frontier_for_innovati on дата обращения: 6.12.2013 17. Хемди А. Глава 18. Имитационное моделирование // Введение в исследование операций — М.:«Вильямс», - 2007, - №7, — С. 697-737. 18. Строгалев В. П., Толкачева И. О. Имитационное моделирование. // МГТУ им. Баумана, - 2008, — С. 697-737. 49 19. Hellerstein, Joe. Parallel Programming in the Age of Big Data. [электронный ресурс] URL: programming/ http://gigaom.com/2008/11/09/mapreduce-leads-the-way-for-parallel- дата обращения: 01.12.2013 20. Segaran T., Hammerbacher J. Beautiful Data: The Stories Behind Elegant Data Solutions// O'Reilly Media, - 2012, - p. 257. 21. Oracle and FSN, "Mastering Big Data: CFO Strategies to Transform Insight into Opportunity" [электронный ресурс] URL: http://www.fsn.co.uk/channel_bi_bpm_cpm/mastering_big_data_cfo_strategies _to_transform_insight_into_opportunity дата обращения: 10.11.2013 22. Jacobs, A. The Pathologies of Big Data. [электронный ресурс] URL: http://queue.acm.org/detail.cfm?id=1563874 дата обращения: 21.11.2013 23. Magoulas R., Lorica B. Introduction to Big Data. Release [электронный ресурс] URL: http://radar.oreilly.com/r2/release2-0-11.html дата обращения: 23.12.2013 24. Snijders, C., Matzat, U. ‘Big Data’: Big gaps of knowledge in the field of Internet. // International Journal of Internet Science, - №7, - page 1-5. 25. Beyer, Mark. Gartner Says Solving 'Big Data' Challenge Involves More Than Just Managing Volumes of Data. Gartner. http://www.gartner.com/newsroom/id/1731916 26. [электронный ресурс] URL: дата обращения: 5.11.2013 "What is Big Data?". Villanova University. [электронный ресурс] URL: http://www.villanovau.com/university-online-programs/what-is-big-data/ 23.10.2013 50 дата обращения: