Я новичок в Hadoop & MapReduce. Мы разрабатываем инструмент сетевого мониторинга (в java). Мы собираем различную информацию о контролируемых устройствах периодически, скажем, каждые 5 секунд. и написать эту информацию HDFS через Java клиента каждую информацию в качестве нового файла (с we'r не использует HDFS добавить объект) .В HDFS наша организация данных будет выглядеть так:Объединение большого количества небольших файлов для ввода mapreduce
/monitored_info
/f1.txt
/f2.txt
.......
/f1020010.txt
Таким образом, каждый файл, как правило, меньше, чем 2KB в размере. Я знаю, что каждая задача карты может занимать до 1 файла, и она будет появляться так же, как и задание карты, и задание будет неэффективным. Чтобы избавиться от этого, мы использовали объект слияния FileUtil, прежде чем приступить к работе:
FileUtil.copyMerge(fileSystem, new Path("monitored_info"), fileSystem,
new Path("mapInputfile"), false, conf, null);
Это хорошая практика? Или существует ли какой-либо другой механизм, используемый для таких требований? Пожалуйста, помогите ...
не удалось объединить мелкие файлы перед входом в hadoop? Если вам не нужна немедленная обработка данных, это кажется более разумным ... – xhudik
Можем ли мы использовать функции добавления? Я использовал hadoop-1.0.4, и он не поддерживает это. –
хорошо, Куст может добавить (не уверен в Hbase). Мое предложение состояло в том, что если вам не нужны данные процесса сразу (например, один раз в 6 часов в порядке), я бы поместил данные в течение некоторого времени (например, 1 час) в один файл и затем поместил его в HDFS. Другими словами, я подготовил файл большего размера на отдельном компьютере, а затем переместил их в hadoop – xhudik