Yea that sounds familiar. At my previous company we were trying to load JDBC drivers with a JDBC Storage Handler in Hive. We wanted it to be dynamic. To be completely honest, I don't know what the final solution we ended up with was though.
We looked at aux jars instead of ADD JAR. It think it also mattered if it was a local jar vs a jar on HDFS. Sorry I don't have more info for you :/ I wanted to make sure you knew you weren't crazy and I've seen similar things. Kevin Risden On Tue, Mar 5, 2019 at 6:37 PM Shawn Weeks <swe...@weeksconsulting.us> wrote: > Ok maybe this scenario will sound familiar. I’ve written a quick and dirty > groovy udf that prints out the current class path by iterating over > this.class.classLoader and here is what I’m seeing. > > > > 1. !connect – Class Path Printer shows no instances of the jar in the > class path > 2. Execute select using xml_explode – Class Path Printer shows a > single instance of the jar matching the one shown by list jars > 3. It works > 4. !reconnect – Class Path Printer shows 46 instances of the jar in > the class path > 5. Execute select using xml_explode > 6. NoClassDefFound > 7. !reconnect > 8. delete jars; - For some reason this has to be the first command run > 9. Execute select using xml_explode – Class path print shows 1 > instances of the jar. > 10. It works > > > > Thanks > > Shawn > > > > *From:* Shawn Weeks <swe...@weeksconsulting.us> > *Sent:* Tuesday, March 5, 2019 4:04 PM > *To:* user@hive.apache.org > *Subject:* RE: FW: Custom UDF Loses Depenencies > > > > I suspect it’s related to that. HIVE-11878 was for several of those issues > but it’s included in my build. The function has worked fine for months in > some environments and if we restart Hiveserver2 it will go back to working. > I suspect it has to do with how jar shading works but I didn’t want to > pollute the class path. > > > > Thanks > > > > Thanks > > Shawn > > > > > *From:* > *Kevin Risden* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > * <kris...@apache.org <kris...@apache.org>> Sent: Tuesday, March 5, 2019 > 3:49 PM To: user@hive.apache.org <user@hive.apache.org> Subject: Re: FW: > Custom UDF Loses Depenencies Different classloader potentially inside > HS2? I know there used to be some interesting cases of classloading when > trying to add custom UDFs. Not sure what the current state is. Kevin > Risden On Tue, Mar 5, 2019 at 4:46 PM Shawn Weeks > <swe...@weeksconsulting.us <swe...@weeksconsulting.us>> wrote: Didn't here > anything on the dev mailing list, has anyone here seen this scenario. > Custom Hive Function starts throwing class not found errors but only after > a while, the function runs fine most of the time and only has a single > dependency. Thanks Shawn -----Original Message----- From: Shawn Weeks > <swe...@weeksconsulting.us <swe...@weeksconsulting.us>> Sent: Monday, March > 4, 2019 1:17 PM To: d...@hive.apache.org <d...@hive.apache.org> Subject: > Custom UDF Loses Depenencies Are there any known gotchas with Hive UDFs > that included shaded dependencies in their jar. I've got an issue where > I've built a an xml udtf based on Saxon HE and after some period of time > the hive server starts raising this exception. The function is created > using the permanent function syntax referencing a jar in HDFS. The jar > works initially and then goes to failing after the instance has been up for > a few days. I've verified that the jar the function uses has these classes > in there. I'm on Hive 1.2.1 with HDP 2.6.5 patches Thanks Shawn Weeks > 2019-03-04 19:13:31,175 WARN [HiveServer2-HttpHandler-Pool: Thread-70490]: > servlet.ServletHandler (ServletHandler.java:doHandle(571)) - Error for > /cliservice java.lang.NoClassDefFoundError: net/sf/saxon/pattern/NodeTest$2 > at net.sf.saxon.pattern.NodeTest.getContentType(NodeTest.java:243) > at > net.sf.saxon.expr.AxisExpression.checkPlausibility(AxisExpression.java:292) > at > net.sf.saxon.expr.AxisExpression.typeCheck(AxisExpression.java:152) > at net.sf.saxon.expr.Operand.typeCheck(Operand.java:185) at > net.sf.saxon.expr.RawSlashExpression.typeCheck(RawSlashExpression.java:178) > at > net.sf.saxon.sxpath.XPathEvaluator.createExpression(XPathEvaluator.java:141) > at > net.sf.saxon.s9api.XPathCompiler.internalCompile(XPathCompiler.java:514) > at net.sf.saxon.s9api.XPathCompiler.compile(XPathCompiler.java:489) > at > xxx.xxx.xxxGenericUDTFXPathExplode.initialize(GenericUDTFXPathExplode.java:84) > at > org.apache.hadoop.hive.ql.udf.generic.GenericUDTF.initialize(GenericUDTF.java:56) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genUDTFPlan(SemanticAnalyzer.java:7037) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genSelectPlan(SemanticAnalyzer.java:3986) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genLateralViewPlan(SemanticAnalyzer.java:10077) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genLateralViewPlans(SemanticAnalyzer.java:10021) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9876) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9782) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9809) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:9795) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genOPTree(SemanticAnalyzer.java:10471) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:342) > at > org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10485) > at > org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:219) > at > org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:238) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:474) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:330) at > org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1233) > at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1227) > at > org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:146) > at > org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:228) > at > org.apache.hive.service.cli.operation.Operation.run(Operation.java:264) > at > org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementInternal(HiveSessionImpl.java:479) > at > org.apache.hive.service.cli.session.HiveSessionImpl.executeStatementAsync(HiveSessionImpl.java:466) > at > org.apache.hive.service.cli.CLIService.executeStatementAsync(CLIService.java:315) > at > org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:509) > at > org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1377) > at > org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1362) > at > org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) > at org.apache.thrift.server.TServlet.doPost(TServlet.java:83) at > org.apache.hive.service.cli.thrift.ThriftHttpServlet.doPost(ThriftHttpServlet.java:206) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) > at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) > at org.eclipse.jetty.server.Server.handle(Server.java:349) > at > org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449) > at > org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:925) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:857) > at > org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) > at > org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609) > at > org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:748) * >