2013-04-29 3 views
1

Я рассматриваю варианты в программах Java, которые могут записывать файлы в HDFS со следующими требованиями.Программно записывать файлы в HDFS

1) Поддержка транзакций: каждый файл при написании полностью или полностью написан полностью или полностью без каких-либо частичных файловых блоков.

2) Поддержка сжатия/Форматы файлов: Можно указать тип сжатия или формат файла при записи содержимого.

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

Я наткнулся на Flume, который обеспечивает приемник HDFS, который может поддерживать транзакцию, сжатие, вращение файла и т. Д. Но это, похоже, не предоставляет API для использования в качестве библиотеки. Возможности Flume обеспечивают высокую связь с архитектурными компонентами Flume, такими как источник, канал и раковины и, похоже, не могут использоваться независимо. Все, что мне нужно, это просто часть загрузки HDFS.

Есть ли у кого-нибудь хорошие предложения?

ответ

0

Я думаю, что использование Flume как «шлюза» для HDFS было бы хорошим решением. Ваша программа отправляет данные в Flume (используя один из интерфейсов, предоставляемый его sources), Flume записывает в HDFS.

Таким образом, вам не нужно поддерживать кучу пользовательского кода для взаимодействия с HDFS. С другой стороны, вам необходимо установить и настроить Flume, но по моему опыту это намного проще (см. this comment для рекомендаций по установке).

Наконец, Flume HDFS-раковина является компонентом с открытым исходным кодом, поэтому вы можете повторно использовать его код в соответствии с условиями лицензии Apache. Получить источники здесь: https://git-wip-us.apache.org/repos/asf?p=flume.git;a=tree;f=flume-ng-sinks/flume-hdfs-sink;h=b9414a2ebc976240005895e3eafe37b12fad4716;hb=trunk

Смежные вопросы