繁体   English   中英

在蜂巢中如何将数据插入单个文件

[英]In hive how to insert data into a single file

从表1插入覆盖目录'wasb:/// hiveblob /'SELECT *; 这项工作有效,但是当我们发出诸如INSERT OVERWRITE DIRECTORY'wasb:///hiveblob/sample.csv'之类的命令时,请从表1中选择*; 发生异常失败无法重命名:wasb://incrementalhive-1@crmdbs.blob.core.windows.net/hive/scratch/hive_2015-06-08_10-01-03_930_4881174794406290153-1/-ext-10000至:wasb:/ hiveblob / sample.csv

因此,有什么方法可以将数据插入单个文件

我认为您不能告诉蜂巢直接写入特定文件,例如wasb:///hiveblob/foo.csv

您可以做的是:

  • 在运行查询之前,告诉hive将输出文件合并为一个。 这样,您可以拥有任意数量的reduce,但仍然只有一个输出文件。

  • 运行您的查询,例如INSERT OVERWRITE DIRECTORY ...

  • 然后在hive中使用dfs -mv将文件重命名为任何内容。

这可能比使用Ramzy建议的使用单独的hadoop fs -getmerger /your/src/folder /your/dest/folder/yourFileName

根据您使用的运行时引擎,指示合并文件的方法可能会有所不同。

例如,如果在蜂巢查询中使用tez作为运行时引擎,则可以执行以下操作:

-- Set the tez execution engine
-- And instruct to merge the results
set hive.execution.engine=tez;
set hive.merge.tezfiles=true;

-- Your query goes here.
-- The results should end up in wasb:///hiveblob/000000_0 file.
INSERT OVERWRITE DIRECTORY 'wasb:///hiveblob/' SELECT * from table1;


-- Rename the output file into whatever you want
dfs -mv 'wasb:///hiveblob/000000_0' 'wasb:///hiveblob/foo.csv'

(以上版本对我适用于以下版本:HDP 2.2,Tez 0.5.2和Hive 0.14.0)

对于MapReduce引擎(默认设置),您可以尝试这些,尽管我自己还没有尝试过:

-- Try this if you use MapReduce engine.
set hive.execution.engine=mr;
set hive.merge.mapredfiles=true;

默认情况下,您将有多个输出文件,这些文件等于减速器的数量。 这是由Hive决定的。 但是,您可以配置减速器。 这里 但是,如果我们减少减速器,则会降低性能,并且会花费更多的执行时间。 另外,一旦文件存在,您就可以使用get merge并将所有文件合并为一个文件。

hadoop fs -getmerger /您的/ src /文件夹/您的/目的地/文件夹/您的文件名。 src文件夹包含所有要合并的文件。

您可以通过强制将reducer强制为一个来强制配置单元来构建一个文件。 这会将所有碎片文件复制到一个表中,并将它们合并到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将具有包含组合数据的单个文本文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM