たとえば、豚のudfsをデバッグする場合は、次のように動作します。http://ben-tech.blogspot.ie/2011/08/how-to-debug-pig-udfs-in-eclipse.html
udfコードをステップ実行したいので失敗しているudafを使用するハイブスクリプトがあります。Javaで書かれたハイブのudf、udaf、udtfsは、EclipseのようなIDEでデバッグされますか?
2
A
答えて
2
JUNITはEclipse IDEからデバッグできます。、そのJavaクラス以来。
このUDFを検討してください。
例1
class SimpleHelloWorldUDFExample extends UDF {
public Text evaluate(Text input) {
if(input == null) return null;
return new Text("Hello " + input.toString());
}
}
JUnitテスト方法は次のようになるであろう...
@Test
public void testUDFNullCheck() {
SimpleHelloWorldUDFExample example = new SimpleHelloWorldUDFExample();
Assert.assertNull(example.evaluate(null));
}
例2
package com.hive.udftest
import java.util.List;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector;
class HiveUDFTest extends GenericUDF {
ListObjectInspector listOI;
StringObjectInspector elementOI;
@Override
public String getDisplayString(String[] arg0) {
return "arrayContainsExample()"; // this should probably be better
}
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
if (arguments.length != 2) {
throw new UDFArgumentLengthException("arrayContainsExample only takes 2 arguments: List<T>, T");
}
// 1. Check we received the right object types.
ObjectInspector a = arguments[0];
ObjectInspector b = arguments[1];
if (!(a instanceof ListObjectInspector) || !(b instanceof StringObjectInspector)) {
throw new UDFArgumentException("first argument must be a list/array, second argument must be a string");
}
this.listOI = (ListObjectInspector) a;
this.elementOI = (StringObjectInspector) b;
// 2. Check that the list contains strings
if(!(listOI.getListElementObjectInspector() instanceof StringObjectInspector)) {
throw new UDFArgumentException("first argument must be a list of strings");
}
// the return type of our function is a boolean, so we provide the correct object inspector
return PrimitiveObjectInspectorFactory.javaBooleanObjectInspector;
}
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
// get the list and string from the deferred objects using the object inspectors
List<String> list = (List<String>) this.listOI.getList(arguments[0].get());
String arg = elementOI.getPrimitiveJavaObject(arguments[1].get());
// check for nulls
if (list == null || arg == null) {
return null;
}
// see if our list contains the value we need
for(String s: list) {
if (arg.equals(s)) return new Boolean(true);
}
return new Boolean(false);
}
}
JUnitテストケースは
012あろうpackage com.hive.udftest
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredJavaObject;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF.DeferredObject;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.JavaBooleanObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.junit.Test;
public class HiveUDFTestTest {
@Test
public void testComplexUDFReturnsCorrectValues() throws HiveException {
// set up the models we need
HiveUDFTest example = new HiveUDFTest();
ObjectInspector stringOI = PrimitiveObjectInspectorFactory.javaStringObjectInspector;
ObjectInspector listOI = ObjectInspectorFactory.getStandardListObjectInspector(stringOI);
JavaBooleanObjectInspector resultInspector = (JavaBooleanObjectInspector) example.initialize(new ObjectInspector[]{listOI, stringOI});
// create the actual UDF arguments
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
// test our results
// the value exists
Object result = example.evaluate(new DeferredObject[]{new DeferredJavaObject(list), new DeferredJavaObject("a")});
Assert.assertEquals(true, resultInspector.get(result));
// the value doesn't exist
Object result2 = example.evaluate(new DeferredObject[]{new DeferredJavaObject(list), new DeferredJavaObject("d")});
Assert.assertEquals(false, resultInspector.get(result2));
// arguments are null
Object result3 = example.evaluate(new DeferredObject[]{new DeferredJavaObject(null), new DeferredJavaObject(null)});
Assert.assertNull(result3);
}
}
同様UDAF、UDTFは同様に...ここで
0
は、サンプルのテストケースとの素敵なブログです。
http://www.spryinc.com/blog/making-use-aspectj-test-hive-udtfs
+0
リンクのみの答えは良くありません。リンクはいつでも死んでしまう可能性があるからです。ここに答えに必要な部分を追加してください。 :レビュー –
関連する問題
- 1. ハイブでUDFのデバッグ情報
- 2. Eclipseでハイブをデバッグしますか?
- 3. Eclipse IDEでSparkでハイブを実行できますか?
- 4. pyspark EMR 5.xでJavaで書かれたハイブUDFを実行したときにエラーが発生する
- 5. ハイブUDFを書く方法
- 6. wiresharkをデバッグするためのIDEはどれですか?
- 7. PHPで書かれたIDEはどれですか?
- 8. ハイブUDFのログメッセージ
- 9. Eclipse IDEのJavaマニュアルまたはリファレンス
- 10. NetBeans IDEでClojureをどのようにデバッグしますか?
- 11. ハイブ、ImpalaのようなclouderaサービスがJavaコードで実行されているかどうかを確認するにはどうすればよいですか?
- 12. アプリケーションがEclipseでデバッグされない
- 13. eclipseまたはIntelliJ IDEでscalaリモートアプリケーションをデバッグできませんでした
- 14. PIG UDFでのデバッグ
- 15. Eclipse上でGradleによって生成されたプロジェクトのデバッグ
- 16. Eclipse IDEにインストールされているScalaのバージョンはどのようにして確認できますか?
- 17. eclipse/javaのネストされたプロジェクトは何ですか?
- 18. EclipseでのJavaコードのデバッグ。デバッグボタンがブロックされる
- 19. MacのEclipse IDEですか?
- 20. NetBeansやEclipseのような重量のあるIDEなしでMacOSXでPHPをデバッグするには?
- 21. eclipseでGWTプロジェクトをどのようにデバッグできますか?
- 22. EclipseでLiftアプリケーションをデバッグするにはどうすればよいですか?
- 23. Eclipseの「インストールされたプロジェクトファセット」のJavaバージョンを変更するにはどうすればよいですか?
- 24. Linuxで 'eclipse' cmdはEclipseインストールにどのようにマップされますか?
- 25. GeoLite2無料データベースのリクエスト制限はありますか? (ハイブUDF)
- 26. EclipseのAndroid JNI/NDKデバッグで、なぜブレークポイントが無視されていますか?
- 27. シェルスクリプトによるハイブudfの実行
- 28. Eclipse IDEでJava EE exeを利用できるのですか
- 29. 奇妙なのEclipse IDEエラーjavax.annotation.meta.When #Javaは
- 30. テンソルフローをデバッグするにはどのようなIDEを使用しますか?
私の回答は役に立ちましたか? –
これは私が行ったことですhttps://yibingshi1977.wordpress.com/2012/12/27/debug-hive-in-eclipse/またhttps://issues.apache.org/jira/browse/HIVE-2665を参照してください もう片方の子は子供の – shrewquest
でもいいから、オプトは輸出が必要です。しかし、私たちはまた、私たちがハイブでやったジュニットの方法の下で行う。あなたが望むなら、私はあなたにもGenericUDFを拡張することができるUDFでより多くのテストケースのサンプルを与えることができます –