Hi Sukhendu, The uri should point to the jar path on the local filesystem of HiveServer2, eg server=server1->uri=file:///data/hive/udf/uds.jar
Note that the uri starts with 'file:///' as shown in the above example. Please give it a try and let us know if you still run into the problem. thanks Prasad On Tue, Sep 23, 2014 at 10:31 AM, sukhendu chakraborty < [email protected]> wrote: > ---------- Forwarded message ---------- > From: sukhendu chakraborty <[email protected]> > Date: Tue, Sep 23, 2014 at 9:26 AM > Subject: create function issue using sentry > To: [email protected] > > > Hi, > We are using the cdh-4.5.0 package distribution and are running into the > following error while creating a temporary function using beeline: > > jdbc:hive2://localhost:10000> create temporary function arraytoString as > 'com.udfs.string.ArrayToStringUDF'; > Error: Error while processing statement: FAILED: SemanticException Error > retrieving udf class (state=42000,code=40000) > > The HS2 logs show the following: > > org.apache.hadoop.hive.ql.parse.SemanticException: Error retrieving udf > class > at > > org.apache.sentry.binding.hive.HiveAuthzBindingHook.preAnalyze(HiveAuthzBindingHook.java:186) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:457) > at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:349) > at > org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:355) > at > > org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:110) > at > > org.apache.hive.service.cli.operation.SQLOperation.prepare(SQLOperation.java:82) > at > > org.apache.hive.service.cli.operation.SQLOperation.run(SQLOperation.java:129) > at > > org.apache.hive.service.cli.session.HiveSessionImpl.executeStatement(HiveSessionImpl.java:209) > at > > org.apache.hive.service.cli.CLIService.executeStatement(CLIService.java:154) > at > > org.apache.hive.service.cli.thrift.ThriftCLIService.ExecuteStatement(ThriftCLIService.java:208) > at > > org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1373) > at > > org.apache.hive.service.cli.thrift.TCLIService$Processor$ExecuteStatement.getResult(TCLIService.java:1358) > at > org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39) > at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39) > at > > org.apache.hive.service.cli.thrift.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:38) > at > > org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:244) > at > > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > at > > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > Caused by: java.lang.ClassNotFoundException: > com.udfs.string.ArrayToStringUDF > at java.net.URLClassLoader$1.run(URLClassLoader.java:372) > at java.net.URLClassLoader$1.run(URLClassLoader.java:361) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:360) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) > at java.lang.ClassLoader.loadClass(ClassLoader.java:357) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:259) > at > > org.apache.sentry.binding.hive.HiveAuthzBindingHook.preAnalyze(HiveAuthzBindingHook.java:175) > ... 18 more > > The sentry file looks like (udfs.jar has the class above). I used the user > site542 to login using beeline. It respects all the table and db priv as > mentioned in the policy file below: > > [users] > site542 = group542 > [groups] > group542 = rsite542 > [roles] > rsite542 = > > server=server1->db=rr542->table=*->action=select,server=server1->db=work542,server=server1->uri=hdfs://cluster/tmp/udfs.jar->action=* > > I tried pointing to the local jar file instead of hdfs, resuling in the > same error. Let me know if I am missing something >
