gpt4 book ai didi

hadoop - 配置单元覆盖目录移动过程作为 distcp?

转载 作者:可可西里 更新时间:2023-11-01 14:45:30 28 4
gpt4 key购买 nike

当我在配置单元中运行 INSERT OVERWRITE DIRECTORY 查询时,它似乎将结果存储在 .hivexxxx 暂存文件夹中,然后将文件从那里移动到该目录...

在 map reduce 过程结束时,显示如下:

Moving data to: hdfs://nameservice1/user/events/Click2/.hive-staging_hive_2015-11-21_08-32-49_909_6034680686432863037-1/-ext-10000
Moving data to: /user/events/Click2

这个移动过程运行得非常慢而且似乎没有使用distcp

有没有办法设置配置单元在那个过程中使用distcp,或者有没有办法设置它不把数据放到那个staging foler?我看不出那个暂存文件夹有什么意义...

最佳答案

除非您正在使用 HDFS 联合,并且您已将配置单元配置为将作业的 .staging* 目录放在与目标目录不同的 FS/命名空间上,(这在默认设置下不太可能发生)您可能希望 hive 执行 distcp。问题是 hive 现在正在做的是它正在将所有输出文件从 .staging 目录复制到最终目标目录,并且使用 distcp 将做同样的事情 - 复制 - 加上开销为每个文件 生成整个 mapreduce 作业(这是我在 Hive 1.1 中看到的行为),因此性能可能会很多。唯一可能的异常(exception)是如果您的输出文件非常大...

但如果没有必要,为什么要复制呢?这意味着读取和重写所有文件。 HDFS 移动/重命名只是更改文件的元数据并且几乎是即时的。

要获得该行为,我建议将以下(不幸的是未记录)属性添加到您的 hive-site.xml -

<property>
<name>hive.exec.stagingdir</name>
<value>${hive.exec.scratchdir}/${user.name}/.staging</value>
<description>
In Hive >= 0.14, set to ${hive.exec.scratchdir}/${user.name}/.staging
In Hive < 0.14, set to ${hive.exec.scratchdir}/.staging

You may need to manually create and/or set appropriate permissions on
the parent dirs ahead of time.
</description>
</property>

如果${hive.exec.scratchdir}不会在您的 Hive 版本中自动替换,只需查找它的值并在上面的值中手动替换它。例如,默认值为 hive.exec.scratchdirHive > 0.14 ,您可以将此值设置为 /tmp/hive/${user.name}/.stagingHive < 0.14 , 设置为 /tmp/hive-${user.name}/.staging (您不必使用 ${user.name} 执行此操作,并且出于与此答案无关的原因,这样做不是一个好主意)

关于hadoop - 配置单元覆盖目录移动过程作为 distcp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844381/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com