0

それはできますか?私が書いてみたテストUDFは次のとおりです。

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の問題のように思えますか?

4

1 に答える 1

0

java.lang.NoClassDefFoundError: org/jruby/ast/executable/AbstractScriptJRuby ランタイム jar が利用できないことを示しています。JRuby クラスをコンパイルすると、コンパイルに使用した JRuby.classのバージョンに依存するファイルが作成されます。

JRuby の完全な jar をダウンロードした場合は、次のように実行できると思います。

> ADD JAR jruby-complete-1.7.4.jar

次に、クラスに依存関係が構成されます。

于 2013-08-08T14:48:36.040 に答える