我从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./。
但是,我需要将内容作为单个文件。我该怎么办?
答案 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将开展工作。