我正在使用HDP 2.5和hive服务。当我使用下面的查询创建hive表;
create table Sample_table
row format delimited
fields terminated by '|'
stored as textfile
AS
select *
from sample_table_unique
where state='AL';
我可以创建具有特定位置的外部表。
我的问题是当我创建表/外部表时,存储的文件已被拆分,即。喜欢下面明智的文件已被拆分。
/应用/蜂巢/仓库/ SAMPLEDB / sample_table: 00000_0, 00001_0, 00002_0, 00003_0,
我不想要那些拆分文件,我想要一个像00000_0这样的合并文件。我不知道它是怎么发生的。请告诉我如何解决这个问题。
答案 0 :(得分:2)
SELECT
语句运行mapper / mapreduce(取决于select查询)作业,将数据从源表sample_table
写入目标表sample_table_unique
。
根据任务数量,生成的文件数可能会有所不同。
要将它们合并为一个,您可以在hive-site.xml
hive> SET hive.merge.mapfiles=true;
hive> SET hive.merge.mapredfiles=true;
hive> SET hive.merge.smallfiles.avgsize=16000000;
hive> SET hive.merge.size.per.task=256000000;
如果是TEZ
执行引擎,请使用
hive> SET hive.merge.tezfiles=true;
而不是mapfiles
和mapredfiles
。
当作业的平均输出文件大小小于此hive.merge.smallfiles.avgsize
数时,Hive将启动另一个map-reduce作业,以将输出文件合并为更大的文件。
hive.merge.smallfiles.avgsize
和hive.merge.size.per.task
的值是默认值,请根据输入大小进行相应更改。