从 HIVE UDF 读取 HDFS 文件 - 执行错误,返回代码 101 FunctionTask。无法初始化类

2023-12-30

我们一直在尝试创建一个简单的 Hive UDF 来屏蔽 Hive 表中的某些字段。我们使用外部文件(放置在 HDFS 上)来抓取一段文本,以便对屏蔽过程进行加盐。看起来我们一切正常,但是当我们尝试创建外部函数时,它会抛出错误:

org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask. Could not initialize class co.company.Mask

这是我们的 UDF 代码:

package co.company;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.commons.codec.digest.DigestUtils;

@Description( 
        name = "masker",
        value = "_FUNC_(str) - mask a string",      
        extended = "Example: \n" +
                " SELECT masker(column) FROM hive_table; "      
        )
public class Mask extends UDF  {

    private static final String arch_clave = "/user/username/filename.dat";
    private static String clave = null; 

    public static String getFirstLine( String arch ) {

        try {
            FileSystem fs = FileSystem.get(new Configuration());
            FSDataInputStream in = fs.open(new Path(arch));
            BufferedReader br = new BufferedReader(new InputStreamReader(in));    

            String ret = br.readLine();
            br.close();
            return ret;

        } catch (Exception e) { 

        System.out.println("out: Error Message: " + arch + " exc: " + e.getMessage());
        return null;
    } 
}

public Text evaluate(Text s) {

    clave = getFirstLine( arch_clave );

    Text to_value = new Text( DigestUtils.shaHex( s + clave) );
    return to_value;
}
}

我们正在上传 jar 文件并通过 HUE 的界面创建 UDF(遗憾的是,我们还没有对 Hadoop 集群的控制台访问权限。

在 Hue 的 Hive 界面上,我们的命令是:

add jar hdfs:///user/my_username/myJar.jar

然后创建我们执行的函数:

CREATE TEMPORARY FUNCTION masker as 'co.company.Mask';

遗憾的是,当我们尝试创建 UDF 时抛出的错误并没有多大帮助。这是创建UDF的日志。任何帮助是极大的赞赏。非常感谢。

14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=compile from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=parse from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO parse.ParseDriver: Parsing command: CREATE TEMPORARY FUNCTION enmascarar as 'co.bancolombia.analitica.Enmascarar'
14/12/10 08:32:15 INFO parse.ParseDriver: Parse Completed
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=parse start=1418218335753 end=1418218335754 duration=1 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=semanticAnalyze from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO parse.FunctionSemanticAnalyzer: analyze done
14/12/10 08:32:15 INFO ql.Driver: Semantic Analysis Completed
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=semanticAnalyze start=1418218335754 end=1418218335757 duration=3 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO ql.Driver: Returning Hive schema: Schema(fieldSchemas:null, properties:null)
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=compile start=1418218335753 end=1418218335757 duration=4 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=Driver.run from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=TimeToSubmit from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=acquireReadWriteLocks from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO lockmgr.DummyTxnManager: Creating lock manager of type org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager
14/12/10 08:32:15 INFO zookeeper.ZooKeeper: Initiating client connection, connectString=server1.domain:2181,server2.domain.corp:2181,server3.domain:2181 sessionTimeout=600000 watcher=org.apache.hadoop.hive.ql.lockmgr.zookeeper.ZooKeeperHiveLockManager$DummyWatcher@2ebe4e81
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=acquireReadWriteLocks start=1418218335760 end=1418218335797 duration=37 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=Driver.execute from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO ql.Driver: Starting command: CREATE TEMPORARY FUNCTION enmascarar as 'co.company.Mask'
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=TimeToSubmit start=1418218335760 end=1418218335798 duration=38 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=runTasks from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=task.FUNCTION.Stage-0 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 ERROR ql.Driver: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask. Could not initialize class co.company.MasK
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=Driver.execute start=1418218335797 end=1418218335800 duration=3 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO log.PerfLogger: <PERFLOG method=releaseLocks from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 INFO ZooKeeperHiveLockManager:  about to release lock for default
14/12/10 08:32:15 INFO ZooKeeperHiveLockManager:  about to release lock for colaboradores
14/12/10 08:32:15 INFO log.PerfLogger: </PERFLOG method=releaseLocks start=1418218335800 end=1418218335822 duration=22 from=org.apache.hadoop.hive.ql.Driver>
14/12/10 08:32:15 ERROR operation.Operation: Error running hive query: 
org.apache.hive.service.cli.HiveSQLException: Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.FunctionTask. Could not initialize class co.company.Mask
	at org.apache.hive.service.cli.operation.SQLOperation.runInternal(SQLOperation.java:147)
	at org.apache.hive.service.cli.operation.SQLOperation.access$000(SQLOperation.java:69)
	at org.apache.hive.service.cli.operation.SQLOperation$1$1.run(SQLOperation.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:415)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
	at org.apache.hadoop.hive.shims.HadoopShimsSecure.doAs(HadoopShimsSecure.java:502)
	at org.apache.hive.service.cli.operation.SQLOperation$1.run(SQLOperation.java:213)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:744)

该问题已解决,但与代码无关。上面的代码可以很好地从 HIVE UDF 读取 HDFS 中的文件(非常低效,因为它每次调用评估函数时都会读取该文件,但它设法读取该文件)。

事实证明,当通过 HUE 创建 Hive UDF 时,您上传 jar,然后创建函数。但是,如果您更改了函数并重新上传了 jar,它仍然保留该函数的先前定义。

我们在 jar 中的另一个包中定义了相同的 UDF 类,删除了 HIVE 中的原始函数,并通过 HUE 再次创建了该函数(使用新类):

add jar hdfs:///user/my_username/myJar2.jar;
drop function if exists masker;
create temporary function masker as 'co.company.otherpackage.Mask';

看来HIVE(或者HUE?,Thrift?)需要一个错误报告,我仍然需要更好地了解系统的哪一部分出了问题。

我希望它对将来的人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 HIVE UDF 读取 HDFS 文件 - 执行错误,返回代码 101 FunctionTask。无法初始化类 的相关文章

随机推荐

  • AngularJS 指令中没有值的属性

    我已经编写了一个具有隔离范围的指令 app directive myDirective function return restrict E scope attr1 attr2 noValueAttr what to put here li
  • Docker for Windows Kubernetes pod 在创建新部署后获取 ImagePullBackOff

    我已经成功构建了 Docker 镜像并在 Docker 群中运行它们 当我尝试构建映像并使用 Docker Desktop 的 Kubernetes 集群运行它时 docker build t myimage f myDockerFile
  • 如何比较两个字符串汇编

    谁能告诉我如何用汇编语言比较两个字符串 我写了以下内容 但它似乎不起作用 assume cs code ds data data segment sirlung db abcdjjj lungimelung equ sirlung sirs
  • 从 Mac 终端运行/打开 VSCode

    我想通过运行此命令从 Mac OSX 终端运行 打开 Visual Studio Codecode 我在这里找到了说明 https code visualstudio com Docs setup https code visualstud
  • AppBarLayout 和 Toolbar 的新 Android 设计库错误

    我正在使用基于此示例的新 Android 设计库克里斯班斯 奶酪广场 https github com chrisbanes cheesesquare在 github 和here http android developers blogsp
  • 未能在 SOAP 上加载外部实体错误

    我称为位于 https 协议上的 Web 服务 我在调用它时收到 无法加载外部实体 错误 正如我在 google 上搜索的那样 这是因为在 PHP5 中 SOAP 类不会解析位于安全 HTTPS 连接上的 WSDL 文件 解决办法是什么 我
  • iOS:检测我的SDK是否安装在设备上的其他应用程序上

    我正在为移动设备开发基于位置的问答 SDK 当询问有关特定位置的问题时 服务器端会定位最相关的用户并将问题发送给该用户 如果用户未能回答 问题将发送给第二好的用户 依此类推 问题是我的 SDK 可能安装在设备上的多个应用程序上 这意味着用户
  • 如何为 Rust 终端应用程序启用可编辑的用户输入?

    我正在用 Rust 编写一个带有经典的基于终端的 REPL 环境项目的最小 Lisp 如何从箭头键读取用户输入 允许他们至少在按下之前在当前输入行上来回移动enter 理想情况下 我将能够扩展功能 包括 返回 以检索旧输入 就像在任何终端或
  • 为什么我们需要其他 JVM 语言

    I see here http www is research de info vmlanguages index html除了 Java 之外 还有很多语言可以在 JVM 上运行 我对在 JVM 中运行的其他语言的整个概念有点困惑 所以
  • WPF Dispatcher.调用“挂起”

    我有一个有点复杂的 WPF 应用程序 当尝试使用调度程序在 UI 线程上调用调用时 该应用程序似乎 挂起 或陷入 Wait 调用中 一般流程是 处理按钮上的点击事件 创建一个新线程 STA 创建演示者和 UI 的新实例 然后调用该方法断开
  • 使用 JFileChooser 设置默认保存扩展名

    我正在尝试使用保存文件JFileChooser 但是 我似乎遇到了一些麻烦 这是我的代码 if e getSource saveMenu JFileChooser chooser new JFileChooser chooser setFi
  • 如何创建比屏幕更大的视图?

    是否可以创建比屏幕更大的视图 我需要一个比设备屏幕宽度更大的视图 我在旋转动画中使用此视图 在旋转过程中 在动画视图之前不在屏幕上的部分将变得可见 有没有办法用android框架实现这种效果 Update 我尝试将父布局设置为比屏幕大得多
  • OpenCV VideoCapture 无法打开许多视频文件

    我在使用 OpenCV 类 VideoCapture 循环打开许多视频文件 例如 200 个 时遇到问题 您可以在下面找到我的代码 更具体地说 我的程序成功打开一定数量的视频 通常是 171 173 但无法打开其他视频 我什至尝试始终打开相
  • Python 3.x - 使用文本字符串作为变量名

    我试图通过使用来避免在代码中增加函数 def Return Label self number 带参数 任何想法如何使用字符串来定义可用于的变量名称 set价值StringVar 示例代码如下 import tkinter as tk fr
  • 在自定义对象上添加事件监听器

    我创建了一个具有多种方法的对象 其中一些方法是异步的 因此我想使用事件以便能够在方法完成时执行操作 为此 我尝试将 addEventListener 添加到该对象 jsfiddle http jsfiddle net 9d7nN var i
  • 如何在 onSaveInstanceState() 中存储值并检索?

    我试图将数组列表的值存储在onSavedInstanceState 并在 onCreate 方法中获取数组列表中的值 但它会引发类似无法暂停活动的错误 这是我的代码 public void onSaveInstanceState Bundl
  • NServiceBus Bus.Send().Register(callback) 不适用于 IIS/Windows Server 2008

    我已经为这个问题苦苦挣扎了几天 但我似乎无法弄清楚 我有一个托管在 IIS 和 Windows Server 2008 R2 上的简单 WCF Web 服务 Web Service的实现如下 var completionResult new
  • 如何使用新的Spring Security AuthorizationManager?

    Spring Security 已将 AccessDecisionManager 和 AccessDecisionVoter 这两个类替换为 AuthorizationManager 很不错 不幸的是 Spring Security 团队再
  • 如何按顺序将计数器写入文件?

    我需要按照出现次数最多到最少出现的顺序向文件写入一个计数器 但我遇到了一些麻烦 当我打印计数器时 它会按顺序打印 但是当我打电话时counter items 然后将其写入一个文件 它会乱序写入它们 我正在尝试使其成为这样 word 5 wo
  • 从 HIVE UDF 读取 HDFS 文件 - 执行错误,返回代码 101 FunctionTask。无法初始化类

    我们一直在尝试创建一个简单的 Hive UDF 来屏蔽 Hive 表中的某些字段 我们使用外部文件 放置在 HDFS 上 来抓取一段文本 以便对屏蔽过程进行加盐 看起来我们一切正常 但是当我们尝试创建外部函数时 它会抛出错误 org apa