В предишния ни блог изучавахме Hadoop Брои подробно. Сега в този урок ще обсъдим RecordReader в Hadoop.
Тук ще разгледаме въведението в Hadoop RecordReader, работещ на RecordReader. Също така ще обсъдим типовете RecordReader в MapReduce, размерът на единичния запис в Hadoop MapReduce в този урок за MapReduce.
Какво е RecordReader в MapReduce?
RecordReader преобразува байт-ориентирания изглед на входа в изглед, ориентиран към запис за Mapper и Редуктор задачи за обработка.
За да разберем Hadoop RecordReader, трябва да разберем MapReduce Dataflow. Нека научим как протича потокът от данни:
MapReduce е прост модел за обработка на данни. Входовете и изходите за функциите за карта и намаляване са двойки ключ-стойност . Следва общата форма на картата и функциите за намаляване:
- Карта: (K1, V1) → списък (K2, V2)
- Намаляване: (K2, списък (V2)) → списък (K3, V3)
Сега, преди да започне обработката, трябва да знае кои данни да обработи. И така, InputFormat клас помага да се постигне това. Този клас избира файла от HDFS това е входът към функцията map. Той също така е отговорен за създаването на входните разделения.
Освен това ги разделете на записи. Той разделя данните на броя на разделянето (обикновено 64/128mb) в HDFS. Това е известно като InputSplit. InputSplit е логическото представяне на данни. В задание MapReduce броят на изпълнението на задачите за карта е равен на броя на InputSplits.
Чрез извикване на ‘getSplit ()’ клиентът изчислява сплитовете за заданието. След това се изпраща до главната на приложението. Той използва местоположенията им за съхранение, за да планира задачи за картографиране, които ще ги обработват в клъстера.
След тази задача за карта предава разделянето на createRecordReader () метод. От това той получава RecordReader за разделянето. RecordReader генерира запис (двойка ключ-стойност). След това преминава към функцията map.
Hadoop RecordReader при изпълнение на задание MapReduce използва данните в границите, които се създават от входното разделяне. И след това създава двойки ключ-стойност за картографа. „Началото“ е позицията на байта във файла.
В началото Hadoop RecordReader започва да генерира двойки ключ/стойност. „Краят“ е мястото, където RecorReader спира да чете записи. В RecordReader данните се зареждат от своя източник.
След това данните се преобразуват в двойки ключ-стойност, подходящи за четене от Mapper. Той комуникира с inputsplit, докато четенето на файла не приключи.
Как работи RecorReader в Hadoop?
Това е повече от итератор над записите. Задачата за карта използва един запис за генериране на двойка ключ-стойност, която предава на функцията map. Можем също да видим това, като използваме функцията за изпълнение на картографа, дадена по-долу:
public void run(Context context ) throws IOException, InterruptedException{ setup(context); while(context.nextKeyValue()) { map(context.setCurrentKey(),context.getCurrentValue(),context) } cleanup(context); }
Въпреки че не е задължително RecordReader да остава между границите, създадени от inputsplit, за да генерира двойки ключ-стойност, той обикновено остава. Освен това персонализираната реализация може дори да чете повече данни извън разделянето на входа.
След това, след като стартирате setup() , nextKeyValue() ще се повтори в контекста. Това попълва ключовите и стойностните обекти за картографа. Като контекст, рамката извлича ключ-стойност от четеца на записи. След това преминете към map() метод да свърши своята работа.
Следователно, въвеждане (ключ-стойност) към процесите на функцията на картата съгласно логиката, спомената в кода на картата. Когато записът стигне до края на записа, nextKeyValue() метод връща false.
Типове Hadoop RecordReader
InputFormat дефинира екземпляра на RecordReader в Hadoop. По подразбиране с помощта на TextInputFormat ReordReader преобразува данните в двойки ключ-стойност. TextInputFormat също така предоставя 2 типа RecordReaders, които както следва:
1. LineRecordReader
Това е по подразбиране RecordReader. TextInputFormat предоставя този RecordReader. Той също така третира всеки ред от входния файл като нова стойност. Тогава свързаният ключ е байтовото изместване. Винаги пропуска първия ред в разделянето (или част от него), ако не е първият.
В крайна сметка винаги чете един ред след границата на разделянето (ако има налични данни, значи не е последното разделяне).
2. SequenceFileRecordReader
Този Hadoop RecorReader чете данни, посочени от заглавката на файл с последователност.
Максималният размер на единичния запис
С помощта на параметъра по-долу ние задаваме максимална стойност.
conf.setInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);
Заключение
В заключение, Hadoop RecorReader създава входа (ключ-стойност) към Mapper. Той също така използва TextInputFormat за преобразуване на данни в двойка ключ-стойност.
Надявам се, че сте харесали този блог, ако имате някакви въпроси, свързани с Hadoop RecordReader, не се колебайте да споделите с нас. Ще се радваме да ги разрешим.