Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

A dokumentum azt vizsgálja részletesen a példákban bizonyítja bővítése és megvalósítása CombineFileInputFormat osztály olvasni a tartalmát gzip fájlokat (ez az alapértelmezett codec) futásidőben. Meg fogja tanulni, hogyan kell alkalmazni a CombineFileInputFormat MapReduce technológia külön akkora, mint egy adat fogyasztott Mapper felület, a fájl mérete a blokk HDFS.

Sujan Som. Tanácsadó és fejlesztő nagy adatátviteli alkalmazások, az IBM

Apache Hadoop szoftver könyvtár lehetővé teszi, hogy manipulálják az adatokat különböző formátumokban, az egyszerű szöveges fájlok az adatbázisokhoz. A tenyésztéshez használt MapReduce InputFormat osztály megbecsülni a bemenet és felosztja a bemeneti fájlok logikai InputSplit tárgyak, amelyek mindegyike rendelünk egy adott esetben Mapper.

FileInputFormat. ami az alap osztály minden fájlformátum InputFormat. Ez a következő közvetlen alosztályok:

  • TextInputFormat
  • SequenceFileInputFormat
  • NLineInputFormat
  • KeyValueTextInputFormat
  • CombineFileInputFormat

Ezen osztályok mindegyike InputFormat egy általános eljárás megvalósítása getSplits (JobContext). amely szintén helyettesítő módszer isSplitable (JobContext. Path), hogy a bemeneti fájlok nem teljesen elkülönült, és a feldolgozott Mapper felület. Hajtja végre createRecordReader osztályban. org.apache.hadoop.mapreduce.InputFormat osztálytól örökölt. amelyet összegyűjteni bemeneti feljegyzések a logikai InputSplit objektum feldolgozásához Mapper felület.

InfoSphere BigInsights Quick Start Edition

De Hadoop hatékonyabban működik a kis számú nagy fájlokat, mint a nagyszámú kis fájlokat. (Ebben az esetben a „kis kép” azt jelenti, hogy a mérete sokkal kisebb, mint a méret Hadoop Distributed File System egység (HDFS)). A probléma megoldódott azáltal CombineFileInputFormat osztályban. amely hatékonyan működik a kisebb fájlokat FileInputFormat osztály létrehozott egy partíciót fájlokat. CombineFileInputFormat hozza a sok fájl minden eleme, minden Mapper például több adatot feldolgozni. Class CombineFileInputFormat is előnyöket biztosít a feldolgozás a nagy fájlokat. Tény, hogy elválasztja a darabok méretét, a fogyasztás Mapper felület, a fájl mérete a blokk HDFS.

Jelenleg CombineFileInputFormat egy absztrakt osztály az osztály könyvtári Hadoop (org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat) Anélkül, hogy különösebb végrehajtását. Ahhoz, hogy használni CombineFileInputFormat létre kell hozni egy külön alosztály CombineFileInputFormat és végrehajtása CombineFileInputFormat és végrehajtja a createRecordReader () metódust. hogy példányosít átruházó osztály CustomFileRecordReader. bővülő RecordReader. használja a speciális kivitelező. Ez a megközelítés azt is megköveteli, hogy CustomWritable jött létre, mint a kulcs az osztály Hadoop Mapper. Minden egyes sor CustomWritable kulcs tartalmazza a fájl nevét és a hossza az elmozdulás a sorban.

Fedezze például Hadoop. amely bizonyítja, hogyan kell használni CombineFileInputForma számolni előfordulásait szavak szöveges fájlokat a megadott bemeneti könyvtárban.

Itt megtudhatja, hogyan lehet kiterjeszteni és végrehajtása CombineFileInputFormat. kiegészíti azt a képességét, hogy olvassa el a tartalmát gzip fájlokat (ez az alapértelmezett codec) Runtime csomagolják. Mi fog az eredmény kulcs-érték, ahol a legfontosabb - ez a kombináció a fájlnév és ofszet és az érték - ez egy szöveges ábrázolása, hogy a húr. A példa ebben a cikkben használja CustomInputFormat a MapReduce környezetben. Mi lesz fejleszteni a következő főbb osztályok:

CompressedCombineFileInputFormat Kiterjeszti CombineFileInputFormat createRecordReader és értékesít transzfer a rekordokat olvasót, hogy elvégzi a logika az Egyesült CompressedCombineFileRecordReader Kiterjeszti RecordReader fájlokat és delegáló osztály CombineFileRecordReader CompressedCombineFileWritable Munkagépek Interface WritableComparable. tárolja a fájl nevét és ofszet, valamint helyettesíti a módszer compareTo. összehasonlítani az első fájl nevét, majd ellensúlyozni.

Példa CompressedCombineFileInputFormat használ MapReduce programot, amely a nyilvánosság számára történelmi időjárási adatok a Nemzeti Éghajlati Adatközpont (Nemzeti Éghajlati Adatközpont, NOAA). NOAA gyűjt az extrém teljesítmény az USA-állomások segítségével havi összefoglaló a három meteorológiai adatokat - hőmérséklet, a csapadék és a hó. Ahogy itt használjuk, egy példa kiszámítja a maximális hőmérséklet a meteorológiai adatok (Nemzeti Éghajlati Data Center), amelyek rendelkezésre állnak a tömörített (gzip) fájl. A források részben további információt ad, hogyan lehet megszerezni a meteorológiai adatokat.

A bemeneti formátuma sokféle tömörített fájlok

A megoldás a tömörített CombineFileInputFormat. amely három specifikus osztályokat

  • Abstract alosztály végrehajtás CombineFileInputFormat (org.apache.hadoop.mapreduce.lib.input. CombineFileInputFormat)
  • Beton alosztály RecordReader (org.apache.hadoop.mapreduce.RecordReader)
  • Special Class írható. amely végrehajtja WritableComparable és létrehozza a legfontosabb vonalak a fájlt, amely tartalmazza a fájl nevét és ofszet vonalak.

CompressedCombineFileInputFormat

CompressedCombineFileInputFormat.java - alosztálya CombineFileInputFormat. Hajtja végre InputFormat.createRecordReader (InputSplit, TaskAttemptContext) a létesítmények építése RecordReader algyűjteményből CombineFileSplit bemeneti fájlokat. Ellentétben FileSplit. CombineFileSplit osztály nem fájlmegosztást és a szétválás a bemeneti fájlok kisebb készletek. Válás tartalmazhat blokkok különböző fájlokat, de az összes blokkot azonos kell állítani a helyi, hogy egy adott üzenet. CombineFileSplit végrehajtásához alkalmazott RecordReader elolvassa egy sort minden fájlt. Felezik fájlok nem szükséges, így isSplitable () metódus helyett visszatér az értéket false (különben nem lenne true alapértelmezett). Egy példa látható az 1. lista.

1. listán CompressedCombineFileInputFormat.java

CompressedCombineFileRecordReader

CompressedCombineFileRecordReader.java - az átruházó osztály CombineFileRecordReader. Ez egy általános osztályt RecordReader, mely kiadási különböző esetekben RecordReader mindegyik blokk CombineFileSplit. CombineFileSplit Így darabot az adatok több fájlt. Ez lehetővé teszi, hogy különböző esetekben RecordReader feldolgozására darab adatokat a különböző fájlokat.

Ha a feladat az úgynevezett Hadoop, CombineFileRecordReader beolvassa a mérete az összes fájlt HDFS beviteli utat, amely szükséges, hogy feldolgozza, és eldönti, hogy mennyit szeretne részlege, értéke alapján MaxSplitSize. Minden készlet elválasztott (ami kell egy fájl, mint isSplitabe () metódus visszatérési értéke false, és helyébe érték) CombineFileRecordReader CompressedCombineFileRecordReader létrehoz egy példányt, és továbbítja CombineFileSplit. összefüggésben, és index CompressedCombineFileRecordReader kimutatására fájlok feldolgozásához.

Miután példányosítás CompressedCombineFileRecordReader határozza meg, hogy a bemeneti kép tartalmaz egy tömörítési kodeket (org.apache.hadoop.io.compress.GzipCodec). Ha igen, akkor a fájl kicsomagolása Runtime és használják feldolgozásra. Egyébként úgy vélik, hogy egy szöveges fájlt. Amikor CompressedCombineFileRecordReader fájl feldolgozása teremt CompressedCombineFileWritable kulcsfontosságú, hogy hívja az osztály Mapper. Minden olvasott sort CompressedCombineFileWritable tartalmaz fájlnevet és az ofszet E vonal hossza, amint azt a példában MapReduce.

A 2. lista mutat példát CompressedCombineFileRecordReader.java.

2. lista CompressedCombineFileRecordReader.java

CompressedCombineFileWritable

CompressedCombineFileWritable.java osztály megvalósítja az interfészt, és kiterjeszti WritableComparable org.apache.hadoop.io.Writable, java.lang.Comparable. amint azt a 3. listában.

Írható - Ez szerializált objektum, amely megvalósítja az egyszerű és hatékony protokoll sorszámozás alapján vonatkozó adatokbelépő és vonatkozó adatokKILÉPŐ. Bármilyen típusú kulcs vagy érték a MapReduce környezetben hajtja végre ezt a felületet. Megvalósításai jellemzően statikus módszer Read (vonatkozó adatokKILÉPŐ). amely létrehoz egy új példányt az okok readFields (vonatkozó adatokKILÉPŐ) módszer. és visszatér egy példányt.

Összehasonlítható - az interfész, amely része a Java ™ Collections Framework (J CF). Ő alkalmazza teljes elrendelő tárgyak minden osztály, amely végrehajtja azt. Ez rendelési nevezik természetes sorrendje kategóriában. osztály compareTo módszer az úgynevezett természetes összehasonlítást. Lista (tömbök) objektumok végre ezt a felületet lehet válogatni automatikusan Collections.sort (és Arrays.sort). Tárgyak, amelyek megvalósítják ezt a felületet lehet használni, mint kulcsot egy rendezett térkép gyűjtemény vagy elemek egy rendezett halmaz, anélkül, hogy adjon meg egy komparátor.

Ezen tulajdonságok, össze tudja hasonlítani CompressedCombineFileWritable segítségével komparátor. kivonat, () parancs gyakran használják elválasztására Hadoop kulcsokat. Fontos megjegyezni, hogy kivonat, () végrehajtása vissza ugyanazt az eredményt különböző JVM példányok. Az alapértelmezett végrehajtása kivonat, () az Objektum nem felel az ingatlan. Ezért Hash kód () módszerek. egyenlő () és a toString () helyébe az összhang biztosítása és a hatékonyság.

3. lista CompressedCombineFileWritable.java

például MapReduce

A jelen szakaszban azt mutatja, hogyan kell használni a CompressedCombineFileInputFormat MapReduce programot. MapReduce programot történeti adatokat a NOAA időjárás statisztikák kész extrém teljesítmény amerikai állomások formájában havi jelentések hőmérséklet, csapadék és a hótakaró vastagsága. Példa kiszámítja a maximális hőmérséklet meteorológiai adatok, amelyeket sűrített (gzip) fájl.

A példa tárgyalja a különböző aspektusait CompressedCombineFileInputFormat. Ahhoz, hogy futtatni a felhasznált minta platform InfoSphere BigInsights Quick Start Edition.

  • Telepített és fut Hadoop szerdán.
  • A mintához szükség adatok letölthetők a Nemzeti Éghajlati Adatközpont (Nemzeti Éghajlati Adatközpont. NCDC) NOAA kezelése.
  • A letöltött adatok a HDFS.
  • A kapott adatok statisztikai feldolgozása a InfoSphere BigInsights Quick Start Edition (a nem termelő közegben) platform.

Futás a példa

CompressedCombineFileInputFormat osztályok vannak csomagolva egy JAR fájlban (CompressedCombine-FileInput.jar), amely lehet hivatkozni más projektekben. Fogjuk használni külön program MapReduce, hogy megmutassa a különbséget a teljesítményt, ha az alapértelmezett beviteli formátum (org.apache.hadoop.io.Text) és egy speciális beviteli formátum (com.ssom.combinefile.lib.input. CompressedCombineFileInputFormat).

bemenet

NCDC adatok nyilvánosan hozzáférhetők. Az 1. táblázat mutatja az adatformátum NCDC mi példát.

1. táblázat adatai NCDC

Az adatfájlok által szervezett dátum, és az időjárás-állomások. Van egy könyvtár minden évben kezdve 1901 júliusban. Minden könyvtár tartalmaz egy tömörített fájl minden meteorológiai állomás adatait minden évben. Az 1. ábra az első bejegyzés 1947.

1. ábra Példa a fájlok listája

Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

Azért választottam az adatok 1901-ben 1902-ben és 1947-ben, amely tartalmazza több mint 1000 tömörített fájlokat. A teljes mennyiség a fájlok körülbelül 56 MB.

Az alapértelmezett beviteli formátum

Class Mapper - ez általános típus négyféle formális paraméterek, amelyek meghatározzák, hogy milyen típusú beviteli gombokkal, bemeneti érték kimeneti kapcsoló és egy kimeneti értéke egy függvény térkép, az alábbiak szerint.

Az alapértelmezett beviteli formátum:

  • Enter gomb - egy nagy egész eltolás értéke
  • Beviteli érték - sztring
  • Nyomtató gomb - idén
  • A kimeneti érték - az a hőmérséklet (egész)

térkép () metódus lesz a kulcs és az érték konvertáló szöveges érték beviteli sorban, a Java string. Ezután használja a substring () módszer a kivonat értékeket. Ebben az esetben Mapper rögzíti az év, mint az objektum Text (mert csak használja úgy, mint egy kulcs), és a hőmérsékletet rövidíteni IntWritable típusú objektumot. Kimeneti rekord kerül rögzítésre, ha a jelenlegi hőmérséklet és a minőség egy kód jelzi a megfelelő hőmérsékletet mutató.

Class szűkítő - ez is egy általános típus. Négy formális paramétert lehet megadni a bemeneti és kimeneti típusokat. Nyomtató típus csökkentése funkció szöveg és IntWritable. évben, és a maximális hőmérséklet, amelyet úgy kapunk iteráció hőmérséklet és összehasonlítjuk mindegyik rekord a legnagyobb a mért értékeket. Szűkítő osztály definíciója a következő:

Az eredmény fog kinézni, mint alább, ha van egy rekord egy pár évig.

2. és 3. ábra mutatja az eredményeket a program az alapértelmezett beviteli formátum (Text) az adminisztrációs konzolon InfoSphere BigInsights.

2. ábra: Tab alkalmazás állapota - alapértelmezés szerint végrehajtás

Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

A 4. ábra mutatja az eredmény a MapReduce programot.

4. ábra: A csomag tartalma a válasz fájl - az alapértelmezett végrehajtási

Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

A speciális beviteli formátum

Most ismét használhatja a leképező osztályt, ami egy általános típus, CompressedCombineFileWritable a bemeneti kulcs, az alábbiak szerint.

Szűkítő osztály ugyanaz marad, változtatások nélkül és a következő definíciót:

Annak meghatározására használjuk a beviteli formátum beállítás:

Példák kulcs és az érték:

5. és 6. ábra mutatja eredménye egy speciális beviteli formátum (CompressedCombineFileInputFormat) az adminisztrációs konzolba InfoSphere BigInsights.

5. ábra: Alkalmazás állapota panel - változat egy speciális formátumban

Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

A 7. ábra mutatja az eredmény a MapReduce programot.

7. ábra: A csomag tartalma a válasz fájl - változat egy speciális formátumban

Feldolgozása kis tömörített fájlok Hadoop combinefileinputformat osztály

következtetés

Ha lehetséges, akkor ajánlott, hogy elkerüljék kezelése sok kis fájlt MapReduce legjobban végezni abban az esetben, tud dolgozni lemez adatátviteli sebesség a fürt. Feldolgozása sok apró fájl számának növelése a keresési műveletek, amelyek szükségesek a feladat. Ha bármilyen okból, üzleti vagy stratégiai jellegű, van egy nagy számú kis fájlok és HDFS áll rendelkezésre, akkor CombineFileInputFormat osztályban. CombineFileInputFormat nem csak hasznos kis fájlokat, hanem javított teljesítményt feldolgozása közben nagy fájlokat.

Get termékek és technológiák