Я хотел бы начать думать о том, как я могу расширить свои алгоритмы, которые я пишу для анализа данных, чтобы их можно было применять к произвольно большим наборам данных. Интересно, каковы соответствующие концепции (потоки, параллелизм, неизменные структуры данных, рекурсия) и инструменты (Hadoop/MapReduce, Terracota и Eucalyptus), чтобы это произошло, и как конкретно эти концепции и инструменты связаны друг с другом. У меня есть рудиментарный фон в сценариях R, Python и bash, а также программирование на C и Fortran, хотя я знаком с некоторыми базовыми концепциями функционального программирования. Мне нужно изменить способ программирования, использовать другой язык (Clojure, Haskell и т. Д.) Или просто (или не просто так!) Адаптировать что-то вроде R/Hadoop (HRIPE) ... или написать обертки для Python для включения многопоточного или Hadoop доступа? Я понимаю, что это может включать требования к дополнительным аппаратным средствам, и я хотел бы получить общее представление о возможностях/вариантах. Приношу свои извинения за этот довольно большой и все же неопределенный вопрос, но просто пытаюсь начать - спасибо заранее!Понятия и инструменты, необходимые для масштабирования алгоритмов
ответ
Хотя языки и связанные с ними технологии/каркасы важны для масштабирования, они имеют тенденцию бледны по сравнению с важностью алгоритмов, структуры данных и архитектур. Забудьте о потоках: количество ядер, которые вы можете использовать таким образом, слишком ограничено - вы хотите, чтобы отдельные процессы обменивались сообщениями, поэтому вы можете масштабировать, по крайней мере, небольшой кластер серверов в быстрой локальной сети (и, в идеале, большой кластер также!-).
Реляционные базы данных могут быть исключением из «технологий бледных» - они могут действительно зажать вас, когда вы пытаетесь увеличить масштаб на несколько порядков. Это ваша ситуация - вы беспокоитесь о нескольких десятках или не более сотни серверов, или вы начинаете думать о тысячах или мириадах? В первом случае вы можете растянуть реляционную технологию (например, по горизонтали и по вертикали), чтобы поддержать вас - в последнем вы находитесь в точке разлома или хорошо прошли, и должен начать думать с точки зрения хранилища ключей/значений.
Назад к алгоритмам - «анализ данных» охватывает широкий диапазон ... большая часть моей работы для Google за последние несколько лет приходится на этот диапазон, например. в программном обеспечении для управления кластерами и в настоящее время в сфере бизнес-аналитики. Нужен ли вам детерминированный анализ (например, для целей бухгалтерского учета, где вы не можете игнорировать одну копейку из 8-значных цифр), или вы можете стоить , но не-детерминизм? Большинство приложений «интеллектуального анализа данных» относятся ко второй категории: вам не нужна полная точность и детерминизм, просто хорошая оценка диапазона, в котором ваши результаты могут быть доказаны, например, с вероятностью 95%.
Это особенно важно, если вам когда-либо понадобится анализ данных «в реальном времени» - почти в режиме реального времени и 100% ограничений точности при одном и том же вычислении не счастливый выбор кемпера. Но даже при массовом/пакетном автономном анализе данных, если вы можете предоставить результаты, которые на 95% гарантированы на порядок быстрее, чем это займет 99,99% (я не знаю, может ли когда-либо добыча данных быть 100.00%! -), что может быть прекрасным компромиссом.
Работа, которую я делал в течение последних нескольких лет, предъявила несколько требований к «почти реальному времени» и многим другим требованиям для автономного «пакетного» анализа - и только в очень немногих случаях где абсолютная точность является абсолютной необходимостью. Постепенно уточненная выборка (когда полная гарантированная точность не требуется), особенно в сочетании со стратифицированной выборкой (разработанной с экспертом домена !!!), снова и снова доказывает, что это отличный подход; если вы не понимаете эту терминологию и все еще хотите увеличить масштаб, превышающий терабайты, до обработки exabytes и обработки петабайтов, вам отчаянно нужен хороший курс повышения квалификации в Stats 201 или какой-либо курс охватывает эти понятия в вашей части леса (или в Университете iTunes, или предложения YouTube в университетских каналах, или blip.tv, или что-то еще).
Python, R, C++, что угодно, только вступает в игру после вы освоили эти алгоритмические вопросы, архитектурные вопросы, которые идут с ними (вы можете создать архитектуру вычислений для «статистически выжить» смерть пару серверов из вашего несметного числа, оправившись от статистически достоверной точности без большой переделки ...?), а также с поддержкой дизайна и технологий хранения.
Главное для увеличения объема данных - избегать ситуаций, когда вы читаете огромные массивы данных сразу. В pythonic это обычно означает использование итераторов для использования набора данных в управляемых частях.
Я люблю итераторы! Не могу остановить usin'em. – hatmatrix
- 1. Инструменты для визуализации алгоритмов
- 2. Основы и математические требования, необходимые для алгоритмов
- 3. Инструменты, необходимые для разработки ОС и эмуляции
- 4. необходимые инструменты для программистов .net?
- 5. Инструменты, необходимые для работы с Silverlight
- 6. Каковы необходимые инструменты JBoss для jBPM?
- 7. Инструменты, необходимые для джейлбрейка Прикладные приложения
- 8. Команда распределенного развития - Необходимые инструменты
- 9. Каковы основные инструменты и шаги, необходимые для создания 3D-видеоигры?
- 10. Каковы инструменты и компоненты, необходимые для работы с Silverlight 3?
- 11. Инструменты и рамки, необходимые для нового веб-приложения Java
- 12. Можно ли хранить необходимые инструменты в артефактах
- 13. Ошибка: не удалось найти инструменты для сборки, необходимые для сборки
- 14. Руководства по использованию Необходимые инструменты Xcode
- 15. Средство для тестирования алгоритмов?
- 16. Процесс, инструменты, методы управления, необходимые для реорганизации Программный проект Java
- 17. Ошибка: Не удалось найти инструменты построения, необходимые для сборки dplyr
- 18. оптический поток работает для масштабирования и масштабирования
- 19. анимация масштабирования изображения и масштабирования для Android
- 20. Понятия семафоров и мьютексов
- 21. Сравнение алгоритмов Rete и последовательных алгоритмов
- 22. Сложность алгоритмов Prim и Kruskal
- 23. Моделирование и синтетическая генерация видео для оценки алгоритмов компьютерного зрения
- 24. Инструменты для резки для Eclipse
- 25. Понимание алгоритмов для измерения тенденций
- 26. Инструментарий Инструменты для C?
- 27. Угловые понятия 2 и MySQL
- 28. Измерение расстояния для алгоритмов
- 29. Сортировка алгоритмов для новичков
- 30. Визуализация алгоритмов для C#
Вау, я для меня большая честь! У меня есть ваша книга на Python ... Спасибо за подробный ответ. Мои желания все еще но абстрактны, но имеют дело с измерениями земной системы ... в настоящее время нет требований к реальным потребностям, а точность 100% не требуется (после модели обработки человека: быстрая и приблизительная. И да, я довольно хорошо знаком со стратифицированными методами выборки!). Похоже, что алгоритм сильно определяется аппаратным обеспечением (естественно), и первым шагом может быть рассмотрение сокращения данных посредством репрезентативной выборки. Больше необходимости. – hatmatrix
@ Стефен, да, начинаем с грубой сетки и утончаем ее и постепенно можем хорошо работать для вас (если геофизики согласны): мне лично удобнее с некоторой случайностью в выборке, но это не требование, если не возможно артефакты, исходящие из аспектов неслучайности («смещение выборки»), которые, как я подозреваю, в геофизике, могут не возникнуть. После того, как вы начнете масштабирование путем передачи сообщений, сокращение потребностей в синхронизации и обмене данными между узлами (например, непрерывные «обратные вызовы» и ожидания) становится первостепенным, и выборка пространственной сетки хорошо работает для этого! –