在配置单元中如何将数据插入单个文件中

时间:2015-06-08 10:54:15

标签: azure hadoop

INSERT OVERWRITE DIRECTORY' wasb:/// hiveblob /' SELECT *来自table1; 这项工作但是当我们给出命令时 INSERT OVERWRITE DIRECTORY' wasb:///hiveblob/sample.csv' SELECT *来自table1; 失败,异常无法重命名:wasb://incrementalhive-1@crmdbs.blob.core.windows.net/hive/scratch/hive_2015-06-08_10-01-03_930_4881174794406290153-1/-ext-10000 to:wasb:/ hiveblob / sample.csv

那么,我们是否可以将数据插入单个文件

2 个答案:

答案 0 :(得分:0)

默认情况下,您将拥有多个输出文件,等于reducer的数量。这是由Hive决定的。但是,您可以配置Reducer。看here。但是,如果我们减少减速器并且会遇到更多的执行时间,性能可能会受到影响。或者,一旦文件存在,您可以使用get merge,并将所有文件合并到一个文件中。

hadoop fs -getmerger / your / src / folder / your / dest / folder / yourFileName。 src文件夹包含要合并的所有文件。

答案 1 :(得分:0)

你可以通过强制reducers为1来强制hive构建来构建一个文件。这将复制一个表中的任何碎片文件,并将它们组合到HDFS中的另一个位置。当然迫使一个减速器破坏了并行性的好处。如果您打算进行任何数据转换,我建议先执行此操作,然后在最后一个单独的阶段执行此操作。

要使用配置单元生成单个文件,您可以尝试:

set hive.exec.dynamic.partition.mode=nostrict;
set hive.exec.compress.intermediate=false;
set hive.exec.compress.output=false;
set hive.exec.reducers.max=1;

create table if not exists db.table
stored as textfiel as
select * from db.othertable;

db.othertable是具有多个碎片文件的表。 db.table将包含一个包含组合数据的文本文件。