Hive ua解析器UDF提供IOException

时间:2016-04-15 09:49:45

标签: java hadoop hive hive-udf ua-parser

我以[{1}}格式存储的使用者字符串。

String

我想从用户代理字符串中提取浏览器。所以我使用了ua-parser-java库。

Hive UDF代码如下:

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

它给了我以下例外。

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,但获得相同的异常。 没有配置单元这个代码完美无缺。 更新: 在hadoop或hive的日志中没有关于此的详细信息。

1 个答案:

答案 0 :(得分:0)

要解决此错误,您需要确保一些事情 -

  1. regexes.yaml存在于打包的.jar文件中,其路径在parser.java中是正确的
  2. 所有相关的jar也包装在最终的.jar文件中。
  3. 希望这有帮助。