hive insert overwrite目录只覆盖生成文件的直接路径而不是目录

时间:2016-11-25 06:32:33

标签: hadoop hive hql cloudera-cdh

-bash-4.1$ hadoop fs -ls /mytest/warehouse/mytable/

Found 4 items
-------------

 - -rwxrwxrwx 3 myvm users 1163 2016-11-24 03:11 /mytest/warehouse/mytable/000000_0
 - -rwxrwxrwx 3 myvm users 0 2016-11-24 03:09 /mytest/warehouse/mytable/000000_1
 - -rwxrwxrwx 3 myvm users 0 2016-11-24 03:09 /mytest/warehouse/mytable/000000_2
 - -rwxrwxrwx 3 myvm users 0 2016-11-24 03:09 /mytest/warehouse/mytable/000000_3

问题

insert overwrite directory "/mytest/warehouse/mytable" select * from my_table

上面的命令只会覆盖它正在生成的文件:/mytest/warehouse/mytable/000000_0

我希望它删除路径下的所有文件并使用所需的输出创建1个文件。

在去hive-1.1.0-cdh5.5.1之前似乎工作正常。

1 个答案:

答案 0 :(得分:0)

它生成4个零件文件,因为减速器的数量是4。仅用于在输出中生成一个零件文件

您可以在配置终端中设置配置单元属性

  

set mapred.reduce.tasks=1

减速器数量还取决于输入文件的大小

默认情况下为1GB(1000000000字节)。你可以通过设置属性hive.exec.reducers.bytes.per.reducer来改变它:

通过更改hive-site.xml

<property>
   <name>hive.exec.reducers.bytes.per.reducer</name>
   <value>1000000</value>
</property>

或使用set

$ hive -e&#34;设置hive.exec.reducers.bytes.per.reducer = 1000000&#34;