我试图编写一个Hive UDF在Hbase表中进行查找。而不是做get()。我覆盖 loadAll(),并返回 cache [String,String] 。一旦loadAll()加载了所有 。
x refCache.getAll(ImmutableList.of(“ intial”)); //将所有密钥加载到缓存中。
然后加载后,我正在执行get(Key)以获取适当的Value。
xrefCache.get(key)
成功运行查询(1):
SELECT getVal("10","s1:ref_table","cf1:id") as idVal FROM testLook.dummy limit 1;
运行失败查询(2):
SELECT getVal(id,"s1:ref_table","cf1:id") as idVal FROM testLook.dummy limit 1;
注意:
当我运行Hive Query(1)时,它运行良好。但是当我运行Query(2)时, 在非本地模式下触发查询,出现以下NullPointer异常。
例外:
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException在 com.google.common.cache.LocalCache.loadAll(LocalCache.java:4056)在 com.google.common.cache.LocalCache.getAll(LocalCache.java:4014)在 com.google.common.cache.LocalCache $ LocalLoadingCache.getAll(LocalCache.java:4865) 在 com.go.udfs.HbaseLookup.getGUIDValue(HbaseLookup.java:250) 在com.go.udfs.HbaseLookup.evaluate(HbaseLookup.java:234) 在com.go.udfs.HbaseLookup.evaluate(HbaseLookup.java:33) 在 org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:186) 在 org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:77) 在 org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:65) 在 org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:77) 在org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815) 在 org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:98) 在 org.apache.hadoop.hive.ql.exec.MapOperator $ MapOpCtx.forward(MapOperator.java:157) 在 org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:497) 在 org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:170) 在org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)处 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:459)在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)在 org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:164)在 java.security.AccessController.doPrivileged(本机方法),位于 javax.security.auth.Subject.doAs(Subject.java:422)在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)导致 创建人:java.lang.NullPointerException com.go.udfs.HbaseLookup.access $ 300(HbaseLookup.java:33) 在 com.go.udfs.HbaseLookup $ 1.loadAll(HbaseLookup.java:146) 在com.google.common.cache.LocalCache.loadAll(LocalCache.java:4049) ...另外22个
任何指针都会有所帮助。在此先感谢