что вызвало другую картину в разделе таблицы улья? - PullRequest
0 голосов
/ 20 марта 2020

У нас есть искро задание, но также случайным образом выполнялся запрос улья в текущем, было oop кластер

Я видел, что в той же таблице кустов используется другой шаблон разбиения, как показано ниже:

, т. Е. Если таблица является разделом по дате, поэтому

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

дал результат

/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

однако, если найти данные с другой датой раздела

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

перечислить файлы с другим именем patter

/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

Что я могу сказать, разница не только в одном разделе, файлы данных поставляются с префиксом part-, а в другом - как 00000n_0, также существует гораздо больше файлов для part- файл, но каждый файл довольно мал.

Я также обнаружил, что агрегация на part- файлах намного медленнее, чем 00000n_0 files

, что может быть возможной причиной различий в шаблонах файлов и какая может быть конфигурация для перехода с одного на другой?

1 Ответ

1 голос
/ 20 марта 2020

Когда потоковая запись в режиме искры записывает данные в Hive, в Hive создается множество небольших файлов с именем part-, число которых постоянно увеличивается. Это приведет к проблемам с производительностью при выполнении запросов к таблице Hive. Hive занимает слишком много времени, чтобы получить результат из-за большого количества мелких файлов в разделе.

При работе с искрой записывать данные в Hive это выглядит так -

/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

Но здесь другой шаблон файла происходит из-за логики сжатия c в файле раздела для сжатия маленького файла в большой. Здесь n в 00000n_0 - это номер редуктора.

Пример сценария сжатия, который сжимает маленький файл в большой файл внутри раздела, например, в таблице базы данных под образцом -

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;

Приведенный выше скрипт сжимает маленькие файлы в какой-то большой файл внутри раздела. И имя файла будет 00000n_0

в чем может быть причина различий в шаблонах файлов и какая конфигурация может быть изменена с одного на другой?

Может быть кто-то запустил логи сжатия c на разделе, используя Hive. Или может быть перезагрузить данные раздела с помощью Hive. Это не проблема, данные остаются прежними.

...