解决了:

事实证明,这是我的UDTF中的一个错误。我找到了解决方法,但我不太明白为什么会起作用。在开始实现UDTF时,Eclipse建议不要使用initialize。但是如果我跳过它,则会出错,因此无论如何我都实现了它。我在该方法中放入了一个变量初始化,猜测初始化只能执行一次。该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分钟来跟踪该问题,他确实找到了一些lib版本的问题,但无法毕竟不能解决问题。 ...我只是猜想这一定是我做错了。

最佳答案

事实证明,这是我的UDTF中的一个错误。我找到了解决方法,但我不太明白为什么会起作用。在我开始实现UDTF时,Eclipse建议不要使用initialize。但是如果我跳过它,则会出错,因此无论如何我都实现了它。我在该方法中放入了一个变量初始化,猜测初始化只能执行一次。该jar可以在一些更简单的情况下工作,但是如果我将UDTF输出与UDF一起使用,然后使用UDF输出执行某些操作,例如作弊cluster byinsert,则会遇到前面提到的错误。我的工程师 friend 发现初始化实际上已经执行了不止一次。因此,我只是将初始化放在process中,用if检查变量是否为null,如果是则将其初始化。然后一切正常,我的作弊也奏效。不过,如果有人可以给我更具体的解释,我将不胜感激。

关于hadoop - hive 查询:有没有一种方法可以将UDTF与 `cluster by`一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42812744/

10-16 03:05