2009-10-19 3 views
16

написали стохастическое моделирование в Java, которое загружает данные из нескольких CSV-файлов на диске (всего около 100 МБ) и записывает результаты в другой выходной файл (не так много данных, просто логическое и несколько чисел). Существует также файл параметров, и для разных параметров ожидается, что изменение результатов моделирования будет изменяться. Чтобы определить правильные/наилучшие входные параметры, мне нужно запустить несколько симуляций, через несколько конфигураций входных параметров и посмотреть распределение выходов в каждой группе. Каждое симуляция занимает 0,1-10 мин в зависимости от параметров и случайности.Является ли Hadoop правильным для запуска моих симуляций?

Я читал о Hadoop и задавался вопросом, может ли он помочь мне запустить множество симуляций; В ближайшем будущем у меня может быть доступ к примерно 8 сетевым настольным компьютерам. Если я правильно понял, функция карты могла бы запустить мою симуляцию и выплюнуть результат, а редуктор может быть идентичным.

Вещь, о которой я беспокоюсь, - это HDFS, который, как представляется, предназначен для огромных файлов, а не для небольших файлов CSV (ни один из которых не будет достаточно большим, чтобы даже составить минимальный рекомендуемый размер блока 64 МБ). Кроме того, каждому симуляции будет нужна только идентичная копия каждого из файлов CSV.

Является ли Hadoop неправильным инструментом для меня?

ответ

20

Я вижу здесь несколько ответов, которые в основном говорят: «Нет, вы не должны использовать Hadoop для моделирования, потому что он не был создан для моделирования». Я считаю, что это довольно недальновидная точка зрения и будет сродни тому, кто говорит в 1985 году: «Вы не можете использовать ПК для обработки текстов, ПК для электронных таблиц!»

Hadoop - это фантастический каркас для построения имитационного двигателя. Я использую его для этой цели в течение нескольких месяцев и имел большой успех с небольшими проблемами с данными/большими вычислениями. Вот лучшие 5 причин, почему я мигрировал в Hadoop для моделирования (с использованием R, как мой язык для моделирования, кстати):

  1. Доступ: я могу арендовать кластеры Hadoop либо через Amazon Elastic Map Сокращения и я не имею инвестировать любое время и энергию в управление кластером. Это означало, что я мог бы начать делать симуляции на распределенной основе без необходимости получать административное одобрение в моей организации!
  2. Администрирование: Hadoop обрабатывает проблемы управления работой, такие как сбой узла, невидимо. Мне не нужно кодировать эти условия.Если узел выходит из строя, Hadoop гарантирует, что симы, запланированные для этого узла, будут запущены на другом узле.
  3. Обновление: Будучи довольно общей картой, уменьшите двигатель с помощью большой распределенной файловой системы, если у вас возникнут проблемы с большими данными, если вы привыкли использовать Hadoop, вам не нужно переходить на новое решение. Таким образом, Hadoop дает вам платформу для моделирования, которая также будет масштабироваться до большой платформы данных (почти) бесплатно!
  4. Поддержка: Будучи открытым исходным кодом и используется многими компаниями, количество ресурсов, как на линии, так и вне, для Hadoop многочисленное. Многие из этих ресурсов написаны с предположением о «больших данных», но они по-прежнему полезны для того, чтобы научиться мыслить на карте.
  5. Переносимость: Я построил анализ на западе проприетарных двигателей, используя проприетарные инструменты, которые получили значительное обучение для работы. Когда я позже сменил работу и оказался в фирме без того же запатентованного стека, мне пришлось изучить новый набор инструментов и новый стек моделирования. Больше никогда. Я торгую в SAS для R и нашей старой сеткой для Hadoop. Оба являются с открытым исходным кодом, и я знаю, что я могу приземлиться на любую работу в будущем и сразу же иметь инструменты под рукой, чтобы начать пинать задницу.

Если вы заинтересованы услышать больше о моем опыте с использованием Hadoop с R, вот в мае 2010 года video of a presentation I gave at the Chicago Hadoop User Group:

+1

Я думаю, что это больше похоже, вы не должны использовать электронную таблицу для баз данных. Конечно, вы * можете * использовать электронную таблицу в качестве базы данных, и многие люди делают это, но могут (или не могут) вводить проблемы для вас из-за несоответствия между тем, что она предназначена для создания и для чего вы ее используете. Тем не менее, некоторые люди не имеют доступа к базам данных, поэтому для них лучший вариант. –

+0

Это действительно хорошая аналогия Эмиль. Очень хорошая точка. Но что, если использование Hadoop для симуляции действительно напоминает сохранение чисел в базе данных. Можно сказать, «хранение столбцов чисел? Это проблема с электронными таблицами! Таблицы были предназначены для чисел!» Но тогда, когда у вас есть 1000-миллиметровые цифры .. э-э, это проблема с базой данных. Но хранение 1000-миллиметровых чисел НЕ является тем, для чего были созданы базы данных. БД хранят текст, капли и т. Д. Простое хранение номеров - это не то, для чего они должны использоваться! ;) –

+0

Не могли бы вы обновить ссылку на видео, если он все еще доступен? – Stefan

2

В то время как вы можете использовать MapReduce с Hadoop, похоже, что то, что вы делаете, может быть лучше подходит для планировщика сетки/заданий, такого как Condor или Sun Grid Engine. Hadoop больше подходит для выполнения чего-то, когда вы берете один (очень большой) вход, разбиваете его на куски для рабочих машин для обработки, а затем уменьшаете его для получения результата.

+1

Вы правы, что Hadoop был построен с «большими данными» проблемами в виде. Что такое Hadoop, что делает его непригодным для моделирования? –

0

Поскольку вы уже используете Java, я предлагаю взглянуть на GridGain, который, я думаю, особенно хорошо подходит для вашей проблемы.

3

Hadoop можно сделать, чтобы выполнить вашу симуляцию, если у вас уже есть кластер Hadoop, но это не лучший инструмент для такого приложения, которое вы описываете. Hadoop построен, чтобы сделать работу над большими данными возможными, и у вас нет больших данных - у вас большие вычисления.

Мне нравится Gearman (http://gearman.org/) для такого рода вещей.

0

Проще говоря, хотя Hadoop может решить вашу проблему здесь, это не правильный инструмент для вашей цели.