виться с тысячами.
Из-за объемов дискового пространства для баз данных и файлов для поиска
требовалось множество механических движений дисковой головки. (Подумайте
о виниловой пластинке и времени, которое требуется для того, чтобы переместить
иголку с одной дорожки на другую вручную. А также подумайте о скрипящем
звуке, который она издаст, если вы надавите слишком сильно, не говоря уже о зву-
ках, которые издаст хозяин пластинки.) Но передавать потоком последовательные
фрагменты диска вы можете быстрее.
Разработчики обнаружили, что гораздо быстрее было распространять и анали-
зировать данные на нескольких машинах, объединенных в сеть, чем на отдельных.
Они могли использовать алгоритмы, которые звучали просто, но на деле в целом
лучше работали с объемными распределенными данными. Один из таких алгорит-
мов называется MapReduce, он может распределить вычисления между несколь-
кими компьютерами и затем собрать результат. Это похоже на работу с очередями.
После того как компания Google опубликовала полученные результаты, компа-
ния Yahoo! вслед за ней создала пакет с открытым исходным кодом, написанный
на Java, который называется Hadoop (назван в честь игрушечного плюшевого
слона, принадлежавшего сыну главного разработчика).
Здесь вступают в действие слова «большие данные». Зачастую это просто озна-
чает, что «данных слишком много, чтобы они поместились на мою машину»: данные,
объем которых превышает дисковое пространство, память, время работы процес-
сора или все перечисленное. Для некоторых организаций решением вопроса боль-
ших данных является Hadoop. Hadoop копирует данные среди машин, пропускает
их через программы масштабирования и сжатия и сохраняет на диск результаты
после каждого шага.
Этот процесс может быть медленным. Более быстрым методом является от-
правка потоком с помощью Hadoop, которая работает как каналы Unix, посылая
данные между программами и не требуя записи на диск после выполнения каждо-
Сети
341
го шага. Вы можете писать программы, использующие отправку потоком с помощью
Hadoop, на любом языке, включая Python.
Множество модулей Python были написаны для Hadoop, некоторые из них
рассматриваются в статье блога A Guide to Python Frameworks for Hadoop (http://
bit.ly/py-hadoop). Компания Spotify, известная передачей потоковой музыки, от-
крыла исходный код своего компонента для отправки потоком с помощью Hadoop,
Luigi, написанного на Python. Порт для Python 3 все еще не готов.
Конкурент по имени Spark (http://bit.ly/about-spark) был разработан для того,
чтобы превысить скорость работы Hadoop в 10–100 раз. Он может читать и обра-
батывать любой источник данных и формат Hadoop. Spark включает в себя API для
Python и других языков. Вы можете найти документацию по установке онлайн
(http://bit.ly/dl-spark).
Еще одной альтернативой Hadoop является Disco (http://discoproject.org/), кото-
рый использует Python для обработки MapReduce и язык программирования Erlang
для коммуникации. К сожалению, вы не можете установить его с помощью pip —
загляните в документацию (http://bit.ly/get-disco).
Обратитесь к приложению В, чтобы увидеть связанные с нашей темой примеры
параллельного программирования, в которых объемные структурированные вы-
числения распространены между несколькими машинами.