Я пытаюсь разделить файлы parquet / snappy, созданные hive INSERT OVERWRITE TABLE ... на границе dfs.block.size, поскольку импала выдает предупреждение, когда файл в разделе больше, чем размер блока.
Impala регистрирует следующие ПРЕДУПРЕЖДЕНИЯ:
Parquet files should not be split into multiple hdfs-blocks. file=hdfs://<SERVER>/<PATH>/<PARTITION>/000000_0 (1 of 7 similar)
Код:
CREATE TABLE <TABLE_NAME>(<FILEDS>)
PARTITIONED BY (
year SMALLINT,
month TINYINT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\037'
STORED AS PARQUET TBLPROPERTIES ("parquet.compression"="SNAPPY");
Что касается скрипта INSERT
hql:
SET dfs.block.size=134217728;
SET hive.exec.reducers.bytes.per.reducer=134217728;
SET hive.merge.mapfiles=true;
SET hive.merge.size.per.task=134217728;
SET hive.merge.smallfiles.avgsize=67108864;
SET hive.exec.compress.output=true;
SET mapred.max.split.size=134217728;
SET mapred.output.compression.type=BLOCK;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
INSERT OVERWRITE TABLE <TABLE_NAME>
PARTITION (year=<YEAR>, month=<MONTH>)
SELECT <FIELDS>
from <ANOTHER_TABLE> where year=<YEAR> and month=<MONTH>;
Проблема в том, что файлы захватываются повсюду:
partition 1: 1 file: size = 163.9 M
partition 2: 2 file: size = 207.4 M, 128.0 M
partition 3: 3 file: size = 166.3 M, 153.5 M, 162.6 M
partition 4: 3 file: size = 151.4 M, 150.7 M, 45.2 M
Проблема остается неизменной, независимо от того, увеличен ли параметр dfs.block.size
(и другие параметры, указанные выше) до 256M
, 512M
или 1G
(для разных наборов данных).
Есть ли способ / настройки убедиться, что разделение выходных файлов parquet / snappy чуть меньше размера блока hdfs?