Hadoop-1 と Hive-0.12 で問題なく動作する GenericUDF (以下のコードを参照) があります。しかし、Hive-0.13 + Hadoop-2 を使用して同じ GenericUDF をテストすると、以下のエラーが発生します。
頂点が失敗しました、頂点名 = マップ 12、頂点 ID = vertex_1409698731658_42202_1_00、診断 = [頂点入力: ccv 初期化子が失敗しました。、org.apache.hive.com.esotericsoftware.kry o.KryoException: クラスが見つかりません: com.xxx.xxx.Id1
これが私のUDFのコードです。
package com.xxx.xxx;
import org.apache.hadoop.hive.*;
public class Id1 extends GenericUDF {
private MapredContext context;
private long sequenceNum = 0;
private static final int padLength = 10;
StringBuilder sb = null;
public ObjectInspector initialize(ObjectInspector[] arguments)
throws UDFArgumentException {
sequenceNum = 0;
sb = new StringBuilder();
return PrimitiveObjectInspectorFactory.javaStringObjectInspector;
}
public Object evaluate(DeferredObject[] arguments) throws HiveException {
int sbLength = sb.toString().length();
if (sbLength > 0)
sb.replace(0, sbLength, "");
String taskId = null;
if (context.getJobConf() != null)
taskId = context.getJobConf().get("mapred.taskid");
sequenceNum++;
if (taskId != null) {
sb.append(taskId.replace("attempt_", ""));
}
int i = 0;
String seqStr = String.valueOf(sequenceNum);
sb.append(seqStr);
return sb.toString();
}
public String getDisplayString(String[] children) {
return "id1()";
}
@Override
public void configure(MapredContext context) {
this.context = context;
}
}
これは Hive-0.13 と関係があると確信していますが、このエラーに関連する投稿を見ることができません。