hiveua解析器udf给出ioexception

daolsyd0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(430)

我把useragent字符串存储在 String 格式。

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36

我想从用户代理字符串中提取浏览器。所以我使用了ua解析器java库。
配置单元自定义项代码如下:

public class BrowserInfo extends UDF{

    public Text evaluate(Text input) {

        if(input == null) return null;
        String uaString = input.toString();

        Parser uaParser= null;
        try 
        {
            uaParser = new Parser();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
         Client c = uaParser.parse(uaString);

        return new Text(c.userAgent.family);
      }
}

它给了我以下例外。

Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public org.apache.hadoop.io.Text dhruv.udf.BrowserInfo.evaluate(org.apache.hadoop.io.Text)  
on object dhruv.udf.BrowserInfo@5379d8 of class dhruv.udf.BrowserInfo 
with arguments {"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)":org.apache.hadoop.io.Text} of size 1

试用 String 而不是 Text 但也有同样的例外。没有Hive,这段代码工作得很好。更新:hadoop或hive的日志中没有关于这个的详细信息。

4uqofj5v

4uqofj5v1#

要解决错误,需要确保以下几点-
regexes.yaml存在于打包的.jar文件中,其路径在parser.java中是正确的
所有依赖的jar也打包在final.jar文件中。
希望这有帮助。

相关问题