Co je Pružina pro Apache Hadoop?

Přehled: Jarní is one of the widely used frameworks in enterprise applications development. Jarní má různé komponenty jako Spring ORM, Spring JDBC atd podporovat různé funkce. Pružina pro Apache Hadoop je rámec určený k podpoře aplikací budovu s Hadoop komponenty, jako například HDFS, MapReduce a Hive etc. Jarní poskytuje rozhraní API pro práci se všemi těmito složkami. Jarní také podporuje integraci Hadoop s jinými Spring ekosystému projekty pro rozvoj reálném životě aplikací. V tomto článku se budeme diskutovat o využití Jarní u rámců Apache Hadoop.

Úvod:
Apache Hadoop je open source software framework, který se používá k ukládání a zpracování osobních údajů a dat soubory větší objem. Jaro je také open source framework, který je široce používán v Java / J2EE aplikací. vkládání závislostí Jarní (OF) nebo inverze kontroly (IO) Mechanismus se stal populární alternativou k Beans Enterprise Java (nebo EJB) model. Pružina má tu výhodu, že je dostatečně flexibilní, aby se snadno zapojen s jiným rámce rozvoje. Za použití této výhody pružiny, ho můžeme zapojit s Apache Hadoop, což nám pomáhá získat maximální přínos každého z těchto dvou rámců.

Začínáme:
V této části budeme hovořit o tom, jak vytvořit Hadoop MapReduce úlohu pomocí jaro. To zahrnuje následující kroky -

  • Step 1 - Získat potřebné závislosti pomocí Maven - Jak víme Maven je vysoce závislá na souboru pom.xml, vyrábíme následující položky v naší pom.xml souboru. Tyto položky se závislostmi jsou určeny pro Hadoop jádra a rámec Spring.

Listing1: Vzorové položky nastavení v pom.xml souboru

[kód]

< !– Jarní dat Apache Hadoop — >
< závislost >
< GroupID > org.springframework.data </ GroupID >
< artifactId > spring-data-Hadoop </ artifactId >
< version > 1.0.0.UVOLNĚNÍ </ version >
< /závislost >
< !– Apache Hadoop Jádro -- >
< závislost >
< GroupID > org.apache.hadoop </ GroupID >
< artifactId > Hadoop-core </ artifactId >
< version > 1.0.3 </version >
</závislost>

[/ kód]

  • Step 2 - Vytvoření součásti mapovač - Jak vědět mapovač komponenta se používá pro přerušení skutečný problém na menší komponenty. Tyto menší komponenty pak snadněji řešit. Můžeme mít svou vlastní přizpůsobenou komponentu mapovač rozšířením mapa Apache snížit třídu Mapper. Musíme přepsat mapu metodu této třídy. Třída mapper očekává, že následující čtyři parametry -

pro vstup: Následující parametry jsou pro vstup klíče a hodnoty

  • PAK - Tento parametr popisuje typ klíče, který je poskytován jako vstup do složky mapovače.
  • VALUEIN - Tento parametr popisuje typ hodnoty, který je poskytován jako vstup do složky mapovače.

pro výstup: Následující parametry jsou pro výstupní klíče a hodnoty

  • KEYOUT - Tento parametr popisuje typ se dal klíčový parametr ze součásti mapovače.
  • VALUEOUT - Tento parametr popisuje typ výstupní hodnoty z komponenty mapovače.

Každý z těchto parametrů musí implementovat zapisovatelný interface. V daném případě, jsme použili naše mapper ke čtení obsahu souboru jeden řádek najednou a připravit klíč-hodnota páry každém řádku. Naše implementace metody mapě plní tyto úkoly -

  • First, rozdělí každou jeden řádek do slov
  • Druhý, iterovat každé slovo a vyjmout ani všechny znaky Unicode, které nejsou ani písmena ani znaky.
  • Třetí, postavit pár klíč-hodnota metodou write Kontext třída, která je kompatibilní s výstupem očekává, že dvojice klíč-hodnota.

Listing2: Vzorek přizpůsobené třída Mapper

[Code]

public class MyWordMapper rozšiřuje Mapper<LongWritable, Text, Text, IntWritable> {
soukromého Text myword = new Text();

@ Override
protected void mapa(klíčovým LongWritable, hodnota Text, kontext kontext) hází IOException, InterruptedException {
Řetězec řádek = value.toString();
StringTokenizer lineTokenz = new StringTokenizer(line);
zatímco (lineTokenz.hasMoreTokens()) {
String cleaned_data = removeNonLettersNonNumbers(lineTokenz.nextToken());
myword.set(cleaned_data);
context.write(myword, nová IntWritable(1));
}
}

/**
* Nahradit všechny znaky Unicode, které nejsou ani čísla, ani písmena s prázdným řetězcem.
* @param originál, Jedná se o původní řetězec
* @return objekt řetězec, který obsahuje pouze písmena a číslice
*/
private String removeNonLettersNonNumbers (řetězec originál) {
vrátit original.replaceAll(“[^ \ P{L}\\p{N}]”, “”);
}
}

[/Code]

Step 3 - vytvoření Redukce Component - reduktoru je komponenta, která odstraní nežádoucí střední hodnoty a předává jen ty dvojice klíč hodnota, které jsou relevantní. Chcete-li mít své vlastní redukční, Naše třída by měla rozšířit Redukce třídy a více než jezdit na způsob snížení. Třída reduktor očekává, že následující čtyři parametry.

pro vstup: Následující parametry jsou pro vstup klíče a hodnoty

  • PAK - Tento parametr popisuje typ klíče, který je poskytován jako vstup do složky mapovače.
  • VALUEIN - Tento parametr popisuje typ hodnoty, který je poskytován jako vstup do složky mapovače.

pro výstup: Následující parametry jsou pro výstupní klíče a hodnoty

  • KEYOUT - Tento parametr popisuje typ se dal klíčový parametr ze součásti mapovače
  • VALUEOUT - Tento parametr popisuje typ výstupní hodnoty z komponenty mapovače.

Při realizaci musíme ujistit, že datový typ z "keyin" a parametry "keyout" jsou stejné. Také "valuein" a parametry valueout "by měly být stejného typu. Naše implementace této metody snížení provádí následující kroky -

  • First, zkontrolujte, zda vstupní klíč obsahuje požadované slovo.
  • Druhý, v případě, že výše uvedený krok je pravda, se počet výskytů slova.
  • Třetí, postavit nový pár klíč-hodnota voláním metody zápisu třídy reduktoru.

Listing3: Vzorek přizpůsobené třída Redukce

[Code]

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class MyWordReducer rozšiřuje Redukce<Text, IntWritable, Text, IntWritable> {
chráněné static final String MY_TARGET_TEXT = “Hadoop”;

@ Override
protected void snížit(Text keyTxt, Iterable<IntWritable> hodnoty, kontext kontext) hází IOException, InterruptedException {
jestliže (containsTargetWord(keyTxt)) {
int wCount = 0;
pro (IntWritable hodnota: hodnoty) {
wCount = value.get();
}
context.write(key, nová IntWritable(wCount));
}
}
soukromé boolean containsTargetWord(Text keyTxt) {
vrátit keyTxt.toString().rovná(MY_TARGET_TEXT);
}
}

[/Code]

  • Step 4 - Vytvoření kontextu aplikace - Dalším krokem je vytvoření kontextu aplikace pomocí XML. Můžeme nastavit kontextu aplikace naší aplikace pomocí následujících kroků -
    • Vytvořte soubor vlastností, který obsahuje hodnoty konfiguračních vlastností. Vzorek soubor vlastností aplikace je uvedeno níže -

[Code]
fs.default.name = hdfs://localhost:9000
mapred.job.tracker = localhost:9001
input.path = / cesta / k / input / souboru /
output.path = / cesta / k / výstup / file
[/Code]

  • Konfigurace držák nemovitost místem, které se používá k načtení hodnoty konfiguračních vlastností ze souboru vytvořeného vlastností. To lze provést přidáním následující v našem souboru aplikace kontext XML -

[Code]
<kontext:Lokalita-zástupný symbol =”classpath:application.properties” />

[/Code]

  • Konfiguraci Apache Hadoop a svou práci - můžeme nastavit výchozí systém souborů a svou práci tracker přidáním následující v naší aplikační kontextu souboru

[Code]

<HDP:konfigurace>
fs.default.name = ${fs.default.name}
mapred.job.tracker = ${mapred.job.tracker}
</HDP:konfigurace>

[/Code]

Měli bychom přidat následující v našem souboru aplikace kontext XML pro definování úlohy Tracker -

[Code]
<HDP:úlohy id =”wordCountJobId”
input-path =”${input.path}”
output-path =”${output.path}”
jar-by-class =”net.qs.spring.data.apachehadoop.Main”
mapper =”net.qs.spring.data.apachehadoop.MyWordMapper”
reduktor =”net.qs.spring.data.apachehadoop.MyWordReducer”/>

[/Code]

  • Konfigurace běžce pracovních míst, která běží vytvořený Hadoop práci. Běžec Job může být nakonfigurován přidáním následující v našem souboru aplikace kontext XML

[Code]
<HDP:job-runner id =”wordCountJobRunner” job-ref =”wordCountJobId” run-at-spuštění =”skutečný”/>
[/Code]

  • Step 5 – Zakládání kontextu aplikace při startu - Nyní můžeme provést vytvořený Hadoop práci načtením kontextu aplikace při spuštění aplikace nahoru. Můžeme to udělat tím, že vytvoří instanci objektu ClasspathXmlApplicationContext který přijímá jméno našeho aplikačního kontextu souboru jako vstupní parametr do konstruktoru. To může být provedeno jako v -

Listing4: Vzorek znázorňující zatížení kontextu aplikace

[Code]
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Hlavní {
public static void main(Řetěz[] argumenty) {
ApplicationContext CTX = new ClassPathXmlApplicationContext(“applicationContext.xml”);
}
}

[/Code]

  • Step 6 - Spusťte MapReduce práci - Můžeme začít náš mapreduce úlohy pomocí následujících kroků -
  • Nahrát vstupní soubor do HDFS - Můžeme to udělat spuštěním následujícího příkazu na příkazovém řádku -

[Code]

Hadoop DFS -put sample.txt /input/sample.txt

[/Code]

Následuje vstup vzorku soubor, který byl použit v tomto příkladu. Klíčovým slovem je cíl "Hadoop " je zvýrazněn ZELENÁ. Slovo 'Hadoop " existuje 4 časy ve vzorku.

Input

Vstup

Image1: Vzorový vstupní soubor

  • Zkontrolujte, zda soubor byl úspěšně nahrán pomocí následujícího příkazu. Ukáže vstupní soubor.

[kód]

Hadoop dfs -LS / input

[/kód]

  • Spusťte MapReduce práci. To lze provést spuštěním hlavní způsob našeho java souboru z IDE. Jsou-li všechny kroky fungovat podle očekávání pak vkládá bude výstup.

Výstup: Hadoop 4
Summary: Pojďme k závěru, co jsme diskutovali doposud v těchto střel –

  • Oba Jarní a Hadoop jsou užitečné rámce z open source komunitě.
  • Kombinací těchto můžeme dostat ku prospěchu obou rámců.
  • Vytvoření mapreduce úlohy pomocí pružiny je šest kroků, jak bylo vysvětleno výše.
Tagged on: ,
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share