Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 265

которое работало на отдельных или даже на нескольких машинах, не могло спра-

виться с тысячами.

Из-за объемов дискового пространства для баз данных и файлов для поиска

требовалось множество механических движений дисковой головки. (Подумайте

о виниловой пластинке и времени, которое требуется для того, чтобы переместить

иголку с одной дорожки на другую вручную. А также подумайте о скрипящем

звуке, который она издаст, если вы надавите слишком сильно, не говоря уже о зву-

ках, которые издаст хозяин пластинки.) Но передавать потоком последовательные

фрагменты диска вы можете быстрее.

Разработчики обнаружили, что гораздо быстрее было распространять и анали-

зировать данные на нескольких машинах, объединенных в сеть, чем на отдельных.

Они могли использовать алгоритмы, которые звучали просто, но на деле в целом

лучше работали с объемными распределенными данными. Один из таких алгорит-

мов называется 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).

Обратитесь к приложению В, чтобы увидеть связанные с нашей темой примеры

параллельного программирования, в которых объемные структурированные вы-

числения распространены между несколькими машинами.