Hive查询 - INSERT OVERWRITE LOCAL DIRECTORY为单个表创建多个文件

时间:2015-02-02 07:04:38

标签: hive

我从hive表myTable中执行以下操作。

INSERT OVERWRITE LOCAL DIRECTORY'/ myDir / out'SELECT concat_ws('',NAME,PRODUCT,PRC,field1,field2,field3,field4,field5)FROM myTable;

所以,这个命令会在文件夹里面生成2个文件000000_0和000001_0./。

但是,我需要将内容作为单个文件。我该怎么办?

3 个答案:

答案 0 :(得分:6)

目录中有多个文件,因为每个reducer都在写一个文件。如果您确实需要将内容作为单个文件,请仅使用 1 reducer 运行map reduce作业,该作业将写入单个文件。

但是,根据您的数据大小,这可能不是运行单个reducer的好方法。

编辑:不是强制配置单元运行1减少任务并输出单个reduce文件,最好使用hadoop fs操作将输出合并到单个文件中。 例如

hadoop fs -text /myDir/out/* | hadoop fs -put - /myDir/out.txt

答案 1 :(得分:4)

游戏稍晚,但我发现使用LIMIT large_number,其中large_number比查询中的行大。它迫使蜂巢使用至少一个减速器。例如:

set mapred.reduce.tasks=1; INSERT OVERWRITE LOCAL DIRECTORY '/myDir/out' SELECT * FROM table_name LIMIT 1000000000

完美无缺地工作。

答案 2 :(得分:0)

CLUSTER BY将开展工作。