HBase
 sql >> Baza danych >  >> NoSQL >> HBase

Hadoop InputFormat i typy InputFormat w MapReduce

W naszym poprzednim samouczku Hadoop , udostępniliśmy Ci szczegółowy opis Mappera Hadoop i Reduktor. Teraz w tym blogu omówimy inny składnik procesu MapReduce, tj. Hadoop InputFormat.

Omówimy, co to jest InputFormat w Hadoop, jakie funkcje zapewnia MapReduce InputFormat. Omówimy również rodzaje InputFormat w MapReduce oraz sposób uzyskania danych z mapera za pomocą InputFormat.

Co to jest Hadoop InputFormat?

Hadoop InputFormat opisuje specyfikację danych wejściowych do wykonania zadania Map-Reduce.

InputFormat opisuje, jak dzielić i czytać pliki wejściowe. W wykonaniu zadania MapReduce InputFormat jest pierwszym krokiem. Jest również odpowiedzialny za tworzenie podziałów wejściowych i dzielenie ich na rekordy.

Pliki wejściowe przechowują dane dla zadania MapReduce. Pliki wejściowe znajdują się w HDFS . Chociaż format tych plików jest dowolny, możemy również użyć plików dziennika opartych na wierszach i formatu binarnego. Dlatego w MapReduce klasa InputFormat jest jedną z podstawowych klas, która zapewnia poniższą funkcjonalność:

  • InputFormat wybiera pliki lub inne obiekty do wprowadzenia.
  • Określa również podziały danych. Definiuje zarówno rozmiar poszczególnych zadań Mapy, jak i ich potencjalny serwer wykonawczy.
  • Hadoop InputFormat definiuje RecordReader. Jest również odpowiedzialny za odczytywanie aktualnych rekordów z plików wejściowych.

Jak otrzymujemy dane z Mappera?

Metody pobierania danych z programu mapującego to:getsplits() i createRecordReader() które są następujące:

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 w MapReduce

Istnieją różne typy MapReduce InputFormat w Hadoop, które są używane do różnych celów. Omówmy poniżej typy Hadoop InputFormat:

1. FileInputFormat

Jest to klasa bazowa dla wszystkich formatów InputFormat opartych na plikach. FileInputFormat określa również katalog wejściowy, który zawiera lokalizację plików danych. Kiedy rozpoczynamy wykonywanie zadania MapReduce, FileInputFormat zapewnia ścieżkę zawierającą pliki do odczytu.

Ten InputFormat odczyta wszystkie pliki. Następnie dzieli te pliki na jeden lub więcej InputSplits.

2. TextInputFormat

Jest to domyślny InputFormat. Ten InputFormat traktuje każdy wiersz każdego pliku wejściowego jako oddzielny rekord. Nie przeprowadza analizowania. TextInputFormat jest przydatny w przypadku niesformatowanych danych lub rekordów opartych na wierszach, takich jak pliki dziennika. Dlatego

  • Klucz – Jest to bajt offset początku linii w pliku (nie cały plik w jednym podziale). Będzie więc unikalny w połączeniu z nazwą pliku.
  • Wartość – To jest treść linii. Nie obejmuje terminatorów linii.

3. KeyValueTextInputFormat

Jest podobny do TextInputFormat. Ten InputFormat traktuje również każdy wiersz danych wejściowych jako osobny rekord. Chociaż różnica polega na tym, że TextInputFormat traktuje cały wiersz jako wartość, ale KeyValueTextInputFormat dzieli sam wiersz na klucz i wartość za pomocą znaku tabulacji („/t”). Dlatego

  • Klucz – Wszystko aż do znaku tabulacji.
  • Wartość – Jest to pozostała część linii po znaku tabulacji.

4. SequenceFileInputFormat

Jest to InputFormat, który odczytuje pliki sekwencji. Pliki sekwencji są plikami binarnymi. Te pliki przechowują również sekwencje binarnych par klucz-wartość. Są one kompresowane blokowo i zapewniają bezpośrednią serializację i deserializację kilku dowolnych danych. Dlatego

Zarówno klucz, jak i wartość są zdefiniowane przez użytkownika.

5. SequenceFileAsTextInputFormat

Jest to wariant SequenceFileInputFormat. Ten format konwertuje wartości kluczy pliku sekwencji na obiekty tekstowe. Wykonuje więc konwersję, wywołując „tostring() ’ na klawiszach i wartościach. Dlatego SequenceFileAsTextInputFormat sprawia, że ​​pliki sekwencji nadają się do przesyłania strumieniowego.

6. SequenceFileAsBinaryInputFormat

Używając SequenceFileInputFormat, możemy wyodrębnić klucze i wartości pliku sekwencji jako nieprzezroczysty obiekt binarny.

7. NlineInputFormat

Jest to kolejna forma TextInputFormat, w której klucze są przesunięte w bajtach linii. A wartości są zawartością wiersza. Tak więc każdy mapper otrzymuje zmienną liczbę linii wejściowych z TextInputFormat i KeyValueTextInputFormat.

Liczba zależy od wielkości podziału. Również zależy od długości linii. Tak więc, jeśli chcemy, aby nasz program mapujący otrzymał ustaloną liczbę linii danych wejściowych, używamy NLineInputFormat.

N- Jest to liczba linii danych wejściowych, które otrzymuje każdy mapujący.

Domyślnie (N=1) każdy program odwzorowujący otrzymuje dokładnie jedną linię danych wejściowych.

Załóżmy, że N=2, to każdy podział zawiera dwie linie. Tak więc jeden program mapujący otrzymuje pierwsze dwie pary klucz-wartość. Inny program odwzorowujący otrzymuje drugie dwie pary klucz-wartość.

8. DBInputFormat

Ten InputFormat odczytuje dane z relacyjnej bazy danych za pomocą JDBC. Ładuje również małe zestawy danych, być może w celu połączenia z dużymi zestawami danych z HDFS za pomocą wielu wejść. Dlatego

  • Klucz – Długopisywalne
  • Wartość – DBWritables.

Wniosek

Stąd InputFormat definiuje sposób odczytywania danych z pliku do instancji Mappera. W tym samouczku nauczyliśmy się wielu typów InputFormat, takich jak FileInputFormat, TextInputFormat itp.

Domyślnym formatem wejściowym jest TextInputFormat. Jeśli masz jakiekolwiek pytania związane z MapReduce InputFormat, podziel się z nami. Mam nadzieję, że je rozwiążemy.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Instrukcje:korzystanie z interfejsu HBase Thrift, część 1

  2. Jak HBase w CDP może wykorzystać S3 firmy Amazon?

  3. Jak naprawdę działa skalowanie w Apache HBase

  4. Hadoop Combiner Wprowadzenie, działanie i zalety

  5. Hadoop InputFormat i typy InputFormat w MapReduce