Hi James,
Thanks for your email! I have set the hbase-site.xml configs. I tried removing
the dependent jars from the UDF jar and instead included the dependencies in
the classpath, but that didn't help.
Is there anything else that I could be missing, or could I try out some other
debug steps?
Thank you,Anchal
On Friday, July 24, 2015 3:29 PM, James Taylor <[email protected]>
wrote:
I don't believe you'd want to bundle the dependent jars iniside your jar - I
wasn't completely sure if that's what you've done. Also there's a config you
need to enable in your client-side hbase-site.xml to use this
feature.Thanks,James
On Friday, July 24, 2015, Anchal Agrawal <[email protected]> wrote:
Hi all,
I'm having issues getting a UDF to work. I've followed the instructions and
created a jar, and I've created a function with the CREATE FUNCTION command.
However, when I use the function in a SELECT statement, I get a
ClassNotFoundException for the custom class I wrote. I'm using v4.4.0.
Here's some debugging information:1. The UDF jar includes the dependency jars
(phoenix-core, hbase, hadoop-common, etc.), in addition to the UDF class
itself. There are no permission issues with the jar.
2. I've tried putting the jar on the local FS, on my custom DFS, and also in
the HBase dynamic jar dir (as specified in hbase-site.xml).3. I've tried the
CREATE FUNCTION command without giving the jar path (the jar is present in the
HBase dynamic jar dir).
4. The Phoenix client doesn't report any syntax errors with my CREATE FUNCTION
command I'm using:create function GetValue(VARBINARY) returns UNSIGNED_LONG as
'org.apache.phoenix.expression.function.GetValue' using jar 'path_to_jar';
5. Here's part of the stack trace for the query SELECT GetValue(pk) FROM
"table_name"; (full stack trace here)
Error: java.lang.reflect.InvocationTargetException (state=,code=0)
...
Caused by: java.lang.ClassNotFoundException:
org.apache.phoenix.expression.function.GetValue
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
org.apache.hadoop.hbase.util.DynamicClassLoader.loadClass(DynamicClassLoader.java:147)
at
org.apache.phoenix.expression.function.UDFExpression.constructUDFFunction(UDFExpression.java:164)
... 28 more
Am I missing something? I've studied the UDF documentation and searched around
for my issue but to no avail. The GetValue class is present in the UDF jar, so
I'm not sure what the root problem is. I would greatly appreciate any help!
Thanks,Anchal