2013-04-22 4 views
0

할 수 있습니까?jRuby를 사용하여 하이브 UDF 작성

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 

을 그리고 내가 그것을 사용하려고 :

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 

가 그럼 난 이런 식으로 컴파일 :

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

을 그리고 그 날을 제공 여기에 내가 쓰는 시도했다 테스트 UDF는 다음과 같습니다

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 문제처럼 보입니다.

답변

0

java.lang.NoClassDefFoundError: org/jruby/ast/executable/AbstractScript은 JRuby 런타임 jar을 사용할 수 없다고 알려줍니다. JRuby 클래스를 컴파일하면 컴파일 된 JRuby의 버전에 따라 .class 파일이 생성됩니다.

난 당신이 JRuby를 완료 항아리를 다운로드 한 경우, 당신은

> ADD JAR jruby-complete-1.7.4.jar 

를 실행할 수 다음 클래스는 종속성이 구성되어있는 것 같은데요.