---------- 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

Reply via email to