Концепции и инструменты, необходимые для расширения алгоритмов - PullRequest
5 голосов
/ 10 марта 2010

Я хотел бы начать думать о том, как я могу расширить свои алгоритмы, которые я пишу для анализа данных, чтобы их можно было применять к произвольно большим наборам данных. Интересно, каковы соответствующие концепции (потоки, параллелизм, неизменяемые структуры данных, рекурсия) и инструменты (Hadoop / MapReduce, Terracota и Eucalyptus), чтобы это произошло, и как конкретно эти концепции и инструменты связаны друг с другом. У меня есть базовые знания в области сценариев R, Python и bash, а также программирования на C и Fortran, хотя я также знаком с некоторыми основными концепциями функционального программирования. Нужно ли мне изменить способ программирования, использовать другой язык (Clojure, Haskell и т. Д.) Или просто (или не так просто!) Адаптировать что-то вроде R / Hadoop (HRIPE) ... или написать обертки для Python включить многопоточность или доступ Hadoop? Я понимаю, что это может повлечь за собой требования к дополнительному оборудованию, и мне хотелось бы получить некоторую базовую идею о возможных требованиях / опциях. Приношу свои извинения за этот довольно большой и в то же время неопределенный вопрос, но просто пытаюсь начать - заранее спасибо!

Ответы [ 2 ]

9 голосов
/ 10 марта 2010

Хотя языки и связанные с ними технологии / структуры важны для масштабирования, они, как правило, бледнеют по сравнению с важностью алгоритмов, структуры данных и архитектур. Забудьте о потоках: количество ядер, которые вы можете использовать таким образом, слишком ограничено - вы хотите, чтобы отдельные процессы обменивались сообщениями, чтобы вы могли масштабироваться как минимум до небольшого кластера серверов в быстрой локальной сети (и в идеале - большой). кластер тоже! -).

Реляционные базы данных могут быть исключением из «бледных технологий» - они действительно могут ограничить вас, когда вы пытаетесь увеличить масштаб на несколько порядков. Это ваша ситуация - вы беспокоитесь о десятках или сотнях серверов, или вы начинаете думать о тысячах или мириадах? В первом случае вы все еще можете растянуть реляционную технологию (например, с помощью горизонтального и вертикального шардинга), чтобы поддержать вас - во втором случае вы находитесь на точке разрыва или уже прошли ее, и должен начать мышление с точки зрения хранилищ ключей / ценностей.

Возвращаясь к алгоритмам - «анализ данных» охватывает широкий диапазон ... большая часть моей работы в Google за последние несколько лет попадает в этот диапазон, например. в программном обеспечении управления кластером, и в настоящее время в бизнес-аналитике. Вам нужен детерминистический анализ (например, для целей бухгалтерского учета, когда вы не можете пропустить ни одной копейки из 8-значных цифр), или вы можете выдержать некоторый не -детерминизм? Большинство приложений для «интеллектуального анализа данных» попадают во вторую категорию - вам не нужна полная точность и детерминизм, просто хорошая оценка диапазона, в котором могут оказаться ваши результаты, скажем, с вероятностью 95%.

Это особенно важно, если вам когда-либо понадобится выполнить анализ данных «в реальном времени» - ограничения почти в реальном времени и 100% точности для одного и того же вычисления делают не счастливым отдыхом , Но даже при массовом / пакетном извлечении данных в автономном режиме, если вы можете получить результаты, которые на 95% гарантированно на порядки быстрее, чем это потребовалось бы на 99,99% (я не знаю, может ли когда-либо извлечение данных быть 100,00%! -), это может быть замечательным компромиссом.

Работа, которую я выполнял в течение последних нескольких лет, предъявляла несколько требований к «почти в реальном времени» и намного больше требований для автономного, «пакетного» анализа - и только в очень немногих случаях, когда абсолютная точность является абсолютной необходимостью. Постепенно улучшенная выборка (когда полная гарантированная точность не требуется), особенно в сочетании с многослойной выборкой (разработанной в тесном сотрудничестве с экспертом в области !!!), снова и снова доказывает, что это отличный подход; если вы не понимаете эту терминологию и по-прежнему хотите увеличить объем, превышающий терабайты, до уровня обработки в экзабайтах и ​​петабайтах, вам крайне необходим хороший курс повышения квалификации в Stats 201 или любой другой курс, охватывающий эти понятия в вашей части Вудс (или в Университете iTunes, или в предложениях YouTube на университетских каналах, или в blip.tv, или в любом другом месте).

Python, R, C ++, что угодно, только вступают в игру после того, как вы освоили эти алгоритмические проблемы, архитектурные проблемы, которые с ними связаны (можете ли вы разработать вычислительную архитектуру для «статистического выживания» смерть нескольких серверов из вашего множества, восстановление со статистически значимой точностью без большого количества переделок ...?), а также поддержка выбора дизайна и технологии хранения.

3 голосов
/ 10 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...