sql >> Databáze >  >> NoSQL >> HBase

Hadoop InputFormat a typy InputFormat v MapReduce

V našem předchozím tutoriálu Hadoop , poskytli jsme vám podrobný popis Hadoop Mapper a Redukce. Nyní v tomto blogu pokryjeme další součást procesu MapReduce, tj. Hadoop InputFormat.

Budeme diskutovat o tom, co je InputFormat v Hadoop, jaké funkce poskytuje MapReduce InputFormat. Probereme také typy InputFormat v MapReduce a jak získat data z mapovače pomocí InputFormat.

Co je Hadoop InputFormat?

Hadoop InputFormat  popisuje specifikaci vstupu pro provádění úlohy Map-Reduce.

InputFormat popisuje, jak rozdělit a číst vstupní soubory. Při provádění úlohy MapReduce je prvním krokem InputFormat. Je také zodpovědný za vytváření vstupních rozdělení a jejich rozdělení do záznamů.

Vstupní soubory ukládají data pro úlohu MapReduce. Vstupní soubory jsou umístěny v HDFS . Ačkoli je formát těchto souborů libovolný, můžeme také použít řádkové soubory protokolu a binární formát. V MapReduce je tedy třída InputFormat jednou ze základních tříd, která poskytuje níže uvedené funkce:

  • InputFormat vybere soubory nebo jiné objekty pro vstup.
  • Také definuje rozdělení dat. Definuje jak velikost jednotlivých mapových úkolů, tak jejich potenciální server pro provedení.
  • Hadoop InputFormat definuje čtečku záznamů. Je také zodpovědný za čtení skutečných záznamů ze vstupních souborů.

Jak získáváme data z Mapperu?

Metody, jak získat data z mapovače, jsou:getsplits() a createRecordReader() které jsou následující:

public abstract class InputFormat<K, V>
{
public abstract List<InputSplit> getSplits(JobContext context)
throws IOException, InterruptedException;
public abstract RecordReader<K, V>
createRecordReader(InputSplit split,
TaskAttemptContext context) throws IOException,
InterruptedException;
}

Typy InputFormat v MapReduce

V Hadoopu existují různé typy MapReduce InputFormat, které se používají pro různé účely. Pojďme diskutovat o typech Hadoop InputFormat níže:

1. FileInputFormat

Je to základní třída pro všechny InputFormats založené na souborech. FileInputFormat také určuje vstupní adresář, který má umístění datových souborů. Když spustíme provádění úlohy MapReduce, FileInputFormat poskytne cestu obsahující soubory ke čtení.

Tento InpuFormat přečte všechny soubory. Poté tyto soubory rozdělí do jednoho nebo více InputSplits.

2. TextInputFormat

Je to výchozí InputFormat. Tento InputFormat považuje každý řádek každého vstupního souboru za samostatný záznam. Neprovádí žádnou analýzu. TextInputFormat je užitečný pro neformátovaná data nebo řádkové záznamy, jako jsou soubory protokolu. Proto,

  • Klíč – Je to bajtový offset začátku řádku v souboru (nikoli celý soubor a jeden rozdělení). Bude tedy jedinečný, pokud se zkombinuje s názvem souboru.
  • Hodnota – Je to obsah řádku. Nezahrnuje zakončení řádku.

3. KeyValueTextInputFormat

Je to podobné jako TextInputFormat. Tento InputFormat také považuje každý řádek vstupu za samostatný záznam. Rozdíl je v tom, že TextInputFormat považuje celý řádek za hodnotu, ale KeyValueTextInputFormat rozdělí samotný řádek na klíč a hodnotu pomocí znaku tabulátoru („/t“). Proto,

  • Klíč – Vše až po znak tabulátoru.
  • Hodnota – Je to zbývající část řádku za znakem tabulátoru.

4. SequenceFileInputFormat

Je to InputFormat, který čte sekvenční soubory. Sekvenční soubory jsou binární soubory. Tyto soubory také ukládají sekvence binárních párů klíč-hodnota. Ty jsou blokově komprimované a poskytují přímou serializaci a deserializaci několika libovolných dat. Proto,

Klíč i hodnota jsou definovány uživatelem.

5. SequenceFileAsTextInputFormat

Je to varianta SequenceFileInputFormat. Tento formát převádí hodnoty klíče souboru sekvence na textové objekty. Provádí tedy konverzi voláním „tostring() “ na klíčích a hodnotách. Proto SequenceFileAsTextInputFormat dělá sekvenční soubory vhodným vstupem pro streamování.

6. SequenceFileAsBinaryInputFormat

Pomocí SequenceFileInputFormat můžeme extrahovat klíče a hodnoty souboru sekvence jako neprůhledný binární objekt.

7. NlineInputFormat

Je to další forma TextInputFormat, kde jsou klíče bajtově posunuté od řádku. A hodnoty jsou obsahem řádku. Každý mapovač tedy obdrží proměnný počet řádků vstupu s TextInputFormat a KeyValueTextInputFormat.

Počet závisí na velikosti rozdělení. Také záleží na délce čar. Pokud tedy chceme, aby náš mapovač přijímal pevný počet řádků vstupu, pak použijeme NLineInputFormat.

N- Je to počet řádků vstupu, které obdrží každý mapovač.

Ve výchozím nastavení (N=1) obdrží každý mapovač přesně jeden řádek vstupu.

Předpokládejme, že N=2, pak každé rozdělení obsahuje dvě čáry. Takže jeden mapovač obdrží první dva páry klíč-hodnota. Jiný mapovač obdrží druhé dva páry klíč–hodnota.

8. DBInputFormat

Tento InputFormat čte data z relační databáze pomocí JDBC. Načítá také malé datové sady, například pro spojení s velkými datovými sadami z HDFS pomocí MultipleInputs. Proto,

  • Klíč – LongWritables
  • Hodnota – DBWritables.

Závěr

InputFormat tedy definuje, jak číst data ze souboru do instancí Mapperu. V tomto tutoriálu jsme se naučili mnoho typů InputFormat, jako je FileInputFormat, TextInputFormat atd.

Výchozí vstupní formát je TextInputFormat. Pokud máte jakýkoli dotaz týkající se MapReduce InputFormat, neváhejte se s námi podělit. Doufám, že je vyřešíme.


  1. Výčty v MongoDB

  2. Celery/Redis stejná úloha se provádí vícekrát paralelně

  3. mongoDB upsert na pole

  4. MongoDb:Rozdíl mezi $push/$addtoset