gpt4 book ai didi

hadoop - hive 查询 : Is there a way to use UDTF with `cluster by` ?

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

已解决:

原来是我的UDTF出错了。我找到了一个修复程序,但我不太明白为什么它会起作用。当初我实现UDTF的时候,Eclipse提示initialize is deprecated。但是如果我跳过它就会出错,所以我还是实现了它。我在那个方法里放了一个变量初始化,猜测init只做一次。该 jar 适用于一些更简单的场景,但如果我要将 UDTF 输出与 UDF 一起使用,则使用 UDF 输出来做一些事情,例如作弊的 cluster byinsert,我得到了前面提到的错误。我的工程师 friend 发现 initialize 实际上被执行了不止一次。所以我只是将初始化放在 process 中,使用 if 检查变量是否为 null,如果是则初始化它。然后一切正常,我的作弊也奏效了。尽管如此,如果有人能给我一个解释,我将不胜感激。


以下是我原来的问题:


我知道我不应该在 UDTF 之后使用 cluster by,所以 select myudtf("stringValue") cluster by rand() 不起作用。

但是由于我的udtf每小时输出7000+行并且还在增长,所以我确实需要将后续处理分发到我所有的hadoop集群从属单元。

而且我想如果不使用 cluster by rand() 就无法做到这一点,所以我尝试了以下作弊:

首先,我用另一个表来包装结果,select key from (select myudtf("stringValue") as key) t limit 1; 它给出了正确的结果,

OK
some/key/value/string
Time taken: 0.035 seconds, Fetched: 1 row(s)

然后我添加 cluster by 部分,select key from (select myudtf("stringValue") as key) t cluster by rand() limit 1,然后我得到错误:

WARNING: Hive-on-MR is deprecated in Hive ...
....

Task with the most failures(4):
-----
Task ID:
task_....

URL:
http:....
....
-----
Diagnostic Messages for this Task:
Error: tried to access class sun.security.ssl.SSLSessionContextImpl from class sun.security.ssl.SSLSessionContextImplConstructorAccess

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1 Reduce: 1 HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec

我这样做是为了欺骗 hive 以将临时表 t 视为“普通”表,我可以将 cluster by 应用于该表,希望它将分发所有 hadoop 从站的工作负载,但不幸的是,hive 足够聪明,可以识破我尝试的拙劣技巧。

那么,有人可以帮我澄清我的误解,或者给我一些正确的方法吗?

仅供引用,我向我公司一位经验丰富的工程人员寻求帮助,他认为这可能是一个更深层次的系统级错误,他在下类前尝试跟踪问题 20 分钟左右,他确实发现了一些库版本问题但终究无法解决问题。 ......我只是猜想这一定是我做错了什么。

最佳答案

原来是我的UDTF出错了。我找到了一个修复程序,但我不太明白为什么它会起作用。当初我实现UDTF的时候,Eclipse提示initialize is deprecated。但是如果我跳过它就会出错,所以我还是实现了它。我在那个方法里放了一个变量初始化,猜测init只做一次。该 jar 适用于一些更简单的场景,但如果我要将 UDTF 输出与 UDF 一起使用,则使用 UDF 输出来做一些事情,例如作弊的 cluster byinsert,我得到了前面提到的错误。我的工程师 friend 发现初始化实际上被执行了不止一次。所以我只是将初始化放在 process 中,使用 if 检查变量是否为 null,如果是则初始化它。然后一切正常,我的作弊也奏效了。尽管如此,如果有人能给我更具体的解释,我将不胜感激。

关于hadoop - hive 查询 : Is there a way to use UDTF with `cluster by` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42812744/

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