Hive插入覆盖目录仅覆盖生成文件而不是目录的直接路径


-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之前,它似乎工作正常。

它正在生成4个零件文件,因为您的还原数为4。在输出中仅生成一个部分文件

您可以在Hive终端设置Hive属性

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"设置hive.exec.reducers.bytes.per.ducer = 1000000"

相关内容

  • 没有找到相关文章

最新更新