hive查询:有没有一种方法可以将udtf与“cluster by”一起使用?

lnlaulya  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(383)

解决了的:
结果证明这是我的udtf中的一个错误。我找到了一个解决办法,但我不太明白它为什么起作用。在开始实现udtf时,eclipse建议 initialize 已弃用。但是如果我跳过它,就会出错,所以我还是实现了它。我在该方法中放置了一个变量初始化,猜测init只需执行一次。jar适用于一些更简单的场景,但是如果要将udtf输出与udf一起使用,那么就使用udf输出来执行一些操作,比如欺骗 cluster by 或者 insert ,我得到了前面提到的错误。我的工程师朋友发现 initialize 实际上不止一次被处决。所以我把初始化放进去 process ,带有 if 检查变量是否为空,如果为空则初始化它。然后一切正常,我的作弊也起作用了。不过,如果有人能给我一个解释,我将非常感激。
以下是我最初的问题:
我知道我不应该使用 cluster by 在udtf之后,所以 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版本的问题,但终究无法解决这个问题。。。我猜一定是我做错了什么。

kognpnkq

kognpnkq1#

结果证明这是我的udtf中的一个错误。我找到了一个解决办法,但我不太明白它为什么起作用。在开始实现udtf时,eclipse建议 initialize 已弃用。但是如果我跳过它,就会出错,所以我还是实现了它。我在该方法中放置了一个变量初始化,猜测init只需执行一次。jar适用于一些更简单的场景,但是如果要将udtf输出与udf一起使用,那么就使用udf输出来执行一些操作,比如欺骗 cluster by 或者 insert ,我得到了前面提到的错误。我的一个工程师朋友发现初始化实际上执行了不止一次。所以我把初始化放进去 process ,带有 if 检查变量是否为空,如果为空则初始化它。然后一切正常,我的作弊也起作用了。不过,如果有人能给我一个更具体的解释,我将不胜感激。

相关问题