Mamy iskier, ale także losowo uruchomić zapytanie ula w obecnym klastrze Hadoop

Widziałem tę samą tabelę raty, ma inny wzór partycji, jak poniżej:

Tj. Jeśli tabela jest partycją według dnia, tak

hdfs dfs -ls /data/hive/warehouse/db_name/table_name/part_date=2019-12-01/

Wydał wynik

/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-00001
....
/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-06669
/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-06670

Jeśli jednak znajdź dane z różnych daty partycji

hdfs dfs -ls /data/hive/warehouse/db_name/table_name/part_date=2020-01-01/

Wymień pliki o różnym wzorzeniu nazwy

/data/hive/warehouse/db_name/table_name/part_date=2020-01-01/000007_0
/data/hive/warehouse/db_name/table_name/part_date=2020-01-01/000008_0
....
/data/hive/warehouse/db_name/table_name/part_date=2020-01-01/000010_0

Co mogę powiedzieć, że różnica nie tylko w jednej partycji pliki danych są prefiks part-, a drugi jest jak 00000n_0, również jest znacznie więcej plików dla part- plik Każdy plik jest dość mały.

Znalazłem również agregację na plikach part- są znacznie wolniejsze niż 00000n_0

Co może być możliwą przyczyną różnicy wzoru plików i co może być konfiguracja do zmiany od jednego do drugiego?

0
Dreamer 20 marzec 2020, 04:35

1 odpowiedź

Najlepsza odpowiedź

Gdy strumienie iskra pisze dane w ulu, tworzy dużo małych plików o nazwie part- w ule i które utrzymują się na wzrost. Daje to problem z wydajnością podczas zapytania o stół ula. Uwolnienie trwa zbyt wiele czasu na wynik z powodu dużych małych plików w partycji.

Kiedy zapisze zapisz dane w Hive, wygląda na to -

/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-00001
....
/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-06669
/data/hive/warehouse/db_name/table_name/part_date=2019-12-01/part-06670

Ale tutaj inny wzór pliku jest spowodowany logiką zagęszczania na pliku partycji, aby zwarty mały plik w duży. Tutaj n w {x0}} jest nie reduktora.

Przykładowy skrypt zagęszczania, który kompakuje mały plik do dużego pliku w ramach partycji na przykład bazy danych (próbki)

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.reducers.bytes.per.reducer=268435456; --256MB reducer size.

CREATE TABLE example_tmp
     STORED AS parquet
        LOCATION '/user/hive/warehouse/sample.db/example_tmp'
AS
  SELECT * FROM example

INSERT OVERWRITE table sample.example PARTITION (part_date) select * from sample.example_tmp;

DROP TABLE IF EXISTS sample.example_tmp PURGE;

Powyższy skrypt zwłóknie małe pliki w kilku dużym pliku w ramach partycji. I nazwa pliku będzie 00000N_0

Co może być możliwą przyczyną różnicy wzoru plików i co może być konfiguracja do zmiany od jednego do drugiego?

Może być ktoś uruchamiać logikę zagęszczającą na partycji za pomocą Hive. Lub może być przeładowywanie danych partycji za pomocą Hive. To nie jest problem, dane pozostają takie same.

1
Kishore 20 marzec 2020, 13:44