Hadoop для обработки очень больших двоичных файлов - PullRequest
2 голосов
/ 08 марта 2011

У меня есть система, которую я хочу распространять, где у меня есть несколько очень больших нерасщепляемых двоичных файлов, которые я хочу обрабатывать распределенным способом.Это порядка нескольких сотен Гб.По ряду фиксированных, специфичных для реализации причин, эти файлы не могут обрабатываться параллельно, но должны обрабатываться последовательно одним и тем же процессом до конца.

Приложение разработано на C ++, поэтому я хотел бы рассмотреть Hadoopканалы для потоковой передачи данных в и из.Каждый экземпляр должен будет обрабатывать порядка от 100 ГБ до 200 ГБ последовательно своих собственных данных (в настоящее время хранящихся в одном файле), и в настоящее время (вероятно) IO приложения ограничено, поэтому важно, чтобы каждое задание выполнялось полностью локально.

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

Я знаю, что для представления моих данных можно генерировать неразделимые файлы или, альтернативно, создавать огромные файлы последовательности (в моем случае, они будут порядка 10Tb для одного файла - я должен упаковать все мои данные в один).И поэтому можно обрабатывать мои данные с помощью Hadoop.Однако, похоже, что моя модель не очень подходит для Hadoop: согласны ли сообщества?Или есть предложения по оптимальному размещению этих данных?Или даже для других кластерных вычислительных систем, которые могли бы лучше соответствовать модели?

Этот вопрос, возможно, является дубликатом существующих вопросов по hadoop, но за исключением того, что моей системе требуется на порядок или два больше данных на человекафайл (ранее я видел вопрос об отдельных файлах размером несколько Гб).Так что простите, если на этот вопрос уже был дан ответ - даже для данных такого размера.

Спасибо,

Алекс

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

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

Поскольку вы работаете только с несколькими файлами, пробовали ли вы более простой механизм распространения, например, запуск процессов на нескольких машинах с использованием ssh или GNU Parallel ? Я имел большой успех, используя этот подход для простых задач. Использование смонтированного диска NFS на всех ваших узлах может ограничить количество копий, которое вам также придется делать.

2 голосов
/ 08 марта 2011

Вы можете написать собственный InputSplit для своего файла, но, как сказал bajafresh4life, он на самом деле не будет идеальным, потому что, если ваш размер куска HDFS не совпадает с размером вашего файла, ваши файлы будут распространяться повсюду, и будетсетевые издержки.Или, если вы сделаете так, чтобы размер HDFS соответствовал размеру файла, тогда вы не получите преимущества от всех дисков вашего кластера.Суть в том, что Hadoop не может быть лучшим инструментом для вас.

...