java.lang.NullPointerException 合并输出文件时
java.lang.NullPointerException when merging output files
我有一个 table 有 3 个分区列
create table tn(
col1 string,
etc...
)
partitioned by (
time_key date,
region string,
city string
)
stored as orc
tblproperties ("orc.compress"="ZLIB");
城市分区可以有几mb到几百mb。我正在尝试优化存储,以便将所有小文件合并为一个等于 128mb 块大小的文件,并相应地拆分更大的文件。
来源 table 有 200 个文件,每个文件大约 150 MB。没有分区。
我为此做了一个简单的插入语句。
INSERT INTO TABLE tn PARTITION (time_key, region, city)
SELECT * FROM source_tn;
使用以下设置并得到此错误NullPointerException
。
set hive.merge.tezfiles=true;
set hive.merge.smallfiles.avgsize=128000000;
set hive.merge.size.per.task=128000000;
set hive.merge.orcfile.stripe.level=true;
set hive.auto.convert.join=false;
如果我在没有这些设置的情况下尝试插入,它会正常工作,所以数据没有任何问题。这种情况下的问题是每个 city
子分区包含大约 200 个文件。 time_key
分区文件总数达到30-4万。
有什么问题,我该怎么办?
我正在使用 hive tez。
将此设置为 false 有帮助。
set hive.merge.orcfile.stripe.level=false;
我有一个 table 有 3 个分区列
create table tn(
col1 string,
etc...
)
partitioned by (
time_key date,
region string,
city string
)
stored as orc
tblproperties ("orc.compress"="ZLIB");
城市分区可以有几mb到几百mb。我正在尝试优化存储,以便将所有小文件合并为一个等于 128mb 块大小的文件,并相应地拆分更大的文件。
来源 table 有 200 个文件,每个文件大约 150 MB。没有分区。
我为此做了一个简单的插入语句。
INSERT INTO TABLE tn PARTITION (time_key, region, city)
SELECT * FROM source_tn;
使用以下设置并得到此错误NullPointerException
。
set hive.merge.tezfiles=true;
set hive.merge.smallfiles.avgsize=128000000;
set hive.merge.size.per.task=128000000;
set hive.merge.orcfile.stripe.level=true;
set hive.auto.convert.join=false;
如果我在没有这些设置的情况下尝试插入,它会正常工作,所以数据没有任何问题。这种情况下的问题是每个 city
子分区包含大约 200 个文件。 time_key
分区文件总数达到30-4万。
有什么问题,我该怎么办?
我正在使用 hive tez。
将此设置为 false 有帮助。
set hive.merge.orcfile.stripe.level=false;