[ 
https://issues.apache.org/jira/browse/HIVE-372?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689578#action_12689578
 ] 

Richard Lee commented on HIVE-372:
----------------------------------

I've also noticed this problem.   based on the thread dump i saw... it looks 
like there's some bigtime indirect recursion... i'm guessing the parser is 
implemented recursive descent and each time we recurse into the next level of 
function some sizable amount of memory is used up.

Here's a stacktrace of a select with 8 nested trims:
       at org.antlr.runtime.CommonTokenStream.LB(CommonTokenStream.java:289)
        at org.antlr.runtime.CommonTokenStream.LT(CommonTokenStream.java:244)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14723)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13624)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163_fragment(HiveParser.java:16523)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163(HiveParser.java:16734)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14059)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13624)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14289)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred155_fragment(HiveParser.java:16479)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred155(HiveParser.java:16804)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13537)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14289)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13624)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163_fragment(HiveParser.java:16523)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163(HiveParser.java:16734)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14059)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13624)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163_fragment(HiveParser.java:16523)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163(HiveParser.java:16734)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14059)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13624)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163_fragment(HiveParser.java:16523)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163(HiveParser.java:16734)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14059)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.function(HiveParser.java:12888)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred155_fragment(HiveParser.java:16479)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred155(HiveParser.java:16804)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.atomExpression(HiveParser.java:13537)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceFieldExpression(HiveParser.java:13728)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163_fragment(HiveParser.java:16523)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.synpred163(HiveParser.java:16734)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceUnaryExpression(HiveParser.java:14059)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseXorExpression(HiveParser.java:14394)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceStarExpression(HiveParser.java:14538)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedencePlusExpression(HiveParser.java:14682)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAmpersandExpression(HiveParser.java:14819)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceBitwiseOrExpression(HiveParser.java:14956)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceEqualExpression(HiveParser.java:15100)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceNotExpression(HiveParser.java:15264)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceAndExpression(HiveParser.java:15367)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.precedenceOrExpression(HiveParser.java:15504)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.expression(HiveParser.java:13455)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.selectExpression(HiveParser.java:10075)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.selectItem(HiveParser.java:9655)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.selectList(HiveParser.java:9536)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.selectClause(HiveParser.java:9284)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.regular_body(HiveParser.java:7893)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.queryStatement(HiveParser.java:7527)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.queryStatementExpression(HiveParser.java:7332)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:583)
        at 
org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:369)
        at 
org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:355)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:184)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:174)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:207)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:306)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:165)
        at org.apache.hadoop.mapred.JobShell.run(JobShell.java:54)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
        at org.apache.hadoop.mapred.JobShell.main(JobShell.java:68)


> Nested UDFs cause _very_ high memory usage when processing query
> ----------------------------------------------------------------
>
>                 Key: HIVE-372
>                 URL: https://issues.apache.org/jira/browse/HIVE-372
>             Project: Hadoop Hive
>          Issue Type: Bug
>          Components: Query Processor
>         Environment: Fedora Linux, 10x Amazon EC2 (Large Instance w/ 8GB Ram)
>            Reporter: Steve Corona
>
> When nesting UDFs, the Hive Query processor takes a large amount of 
> time+memory to process the query. For example, I ran something along the 
> lines of:
> select trim( trim( trim(trim( trim( trim( trim( trim( trim(column))))))))) 
> from test_table;
> This query needs 10GB+ of memory to process before it'll launch the job. The 
> amount of memory increases exponentially with each nested UDF.
> Obviously, I am using trim() in this case as a simple example that causes the 
> same problem to occur. In my actual use-case I had a bunch of nested 
> regexp_replaces.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to