【问题标题】:When to set hive parameters during a session?会话期间何时设置 hive 参数?
【发布时间】:2019-11-12 13:37:55
【问题描述】:

我是新角色,其中一部分需要在托管和外部配置单元表中创建/插入数据。我们在 hive 会话开始时运行了几行“设置”参数,但我遇到了一些情况,例如,文件被合并为某些分区(文件数量很少),但不是其他人(许多较小的文件),似乎是随机的日子。

我的问题是:什么时候需要输入我的所有 Hive 设置参数?是否需要为我正在运行的每一个插入/命令/语句完成?还是只在 Hive 会话开始时启动 Hive 一次?

这些是我们一直在使用的标准设置参数:

SET mapred.job.queue.name=yometrics;
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions=2000;
SET hive.exec.max.dynamic.partitions.pernode=2000;
SET hive.merge.tezfiles=true;

【问题讨论】:

    标签: hadoop hive parameters hiveql hive-configuration


    【解决方案1】:

    您可以将配置放在文件的开头,它将适用于整个会话。

    或者,您可以将公共参数放在单独的文件params.hql 和每个脚本调用中

    source /local/path/to/the/file/params.hql 开头。

    你也可以把它们放在hive-site.xml

    如果您在 Qubole/AWS 上,您也可以使用 bootstrap:https://docs.qubole.com/en/latest/user-guide/hive/bootstrap-script.html

    【讨论】:

    • 谢谢您-您能澄清一下“会话”的含义吗?例如,它是否只运行一个 INSERT 语句?那是一个会话吗?如果我在初始化 Hive 时运行 set 参数,并说分别运行 10 个 INSERT 语句,我是否需要每次运行 set 语句?还是一开始只有一次?
    • @phenderbender 会话它是一个使用脚本文件(-f 选项)的配置单元调用,它可以使用 SOURCE 命令或内联(-e 选项)包含其他文件。整个脚本都是一个会话。对于特定语句,您可以在语句之前覆盖同一脚本中的设置。
    • @phenderbender 看看这个关于合并的答案:stackoverflow.com/a/48303807/2700344 和这个:stackoverflow.com/a/45266244/2700344
    • 谢谢@leftjoin 你知道SET hive.merge.tezfiles=true;与设置 hive.merge.mapfiles=true;更适合外部表?我只是尝试使用这两种方法运行,它使我的文件计数急剧下降。我只用 hive.merge.mapfiles=true 再次尝试,因为添加它似乎可以解决问题,但我无法在网上找到任何可用于外部和托管的东西
    • @phenderbender 在这种情况下,托管或外部无关紧要。如果作业是 map-only,没有 reducer,hive.merge.mapfiles 将起作用。通过添加order by 强制减速器,你会看到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2013-11-24
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多