Можно ли это сделать? Вот тест UDF я попытался написания:Написание улей UDF с использованием jRuby
java_package "com.foo.hive.udf"
java_import org.apache.hadoop.hive.ql.exec.Description
java_import org.apache.hadoop.hive.ql.exec.UDF
java_annotation 'Description(name = "foo", value = "_FUNC_(string) - just returns test.")'
class Foo < UDF
def evaluate ts
"test"
end
end
Тогда я собрал это так:
jrubyc com/foo/hive/udf/Foo.rb
jar -cf Foo.jar com/foo/hive/udf/*.class /path/to/jruby-1.7.3/lib/jruby.jar
И тогда я пытаюсь использовать:
hive> ADD JAR path/to/Foo.jar;
Added /path/to/Foo.jar to class path
hive> CREATE TEMPORARY FUNCTION foo AS 'com.foo.hive.udf.Foo';
И это дает мне:
java.lang.NoClassDefFoundError: org/jruby/ast/executable/AbstractScript
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
...
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask
hive> ADD JAR /path/to/Foo.jar;
Эта же вещь, написанная в java , работает отлично. Значит, это похоже на проблему jRuby?