2014-02-04 1 views
1

Недавно интервьюер задал мне вопрос:в Hadoop, «Как вы можете отдать весь файл в качестве входных данных для картографа?»

в Hadoop «Как вы можете отдать весь файл в качестве входных данных для картографа?»

Я сказал, задав размер блока или размер разделения равным размеру файла.

Он сказал, что это неправильно. Можете ли вы сказать мне правильный ответ. Я искал ее, но не получил ответа.

ответ

3

Ну, если вы так сказали, я думаю, что ему не понравилась часть «настройка размера блока».

EDIT: Как-то я думаю, что изменение размера блока - плохая идея, потому что это глобально для HDFS.

С другой стороны, решением для предотвращения расщепления было бы установить размер min split больше, чем самый большой файл для отображения.

Более чистым решением будет подкласс соответствующей реализации InputFormat. Особенно, переопределив метод isSpitable() для возврата false. В вашем случае вы могли бы сделать что-то подобное с FileInputFormat:

public class NoSplitFileInputFormat extends FileInputFormat 
{ 

    @Override 
    protected boolean isSplitable(JobContext context, Path file) 
    { 
     return false; 
    } 
} 
+0

Blocksize не является глобальным, его можно установить для каждого файла. –

+1

Нравится это: hadoop fs -D fs.local.block.size = 10000 -put local_name remote_location –

+0

Спасибо, что исправил мой пробел в знаниях. В этом случае я не понимаю, почему его ответ «неправильный». Я думаю, как вы сказали, он просто хотел услышать решение isSplitable. – Esquive

3

интервьюер хотел бы услышать, что вы можете сделать isSplitable вернуться ложным путем Gzip-сжатия файла ввода.

В этом случае MapReduce будет делать правильные вещи, а не пытаться разделить сжатые файлы, , так как он знает, что вход GZIP-сжат (посмотрев на расширении имени файла) и GZIP не поддерживает расщепление ,

Это будет работать, но за счет локальности: одна карта будет обрабатывать все блоки HDFS, большинство из которых не будут локальными для карты. Кроме того, при меньшем количестве карт задание менее гранулированное, и поэтому выполнение может занять больше времени.

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