Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法通过jdbc驱动程序从配置单元UDF内部执行SQL_Jdbc_Hive_Udf - Fatal编程技术网

无法通过jdbc驱动程序从配置单元UDF内部执行SQL

无法通过jdbc驱动程序从配置单元UDF内部执行SQL,jdbc,hive,udf,Jdbc,Hive,Udf,这是我的第一篇帖子!我一直在寻找解决这个问题的方法,但几个星期都没有结果(断断续续) 我有一个java配置单元UDF,我想在其中对配置单元表运行SQL,以映射内存中的数据,供以后使用。我有正确的连接信息,但它找不到HiveDriver。我已经尝试在配置单元中添加配置单元jdbc驱动程序jar,并将其导出到可运行的jar中 下面是错误,后面是相关代码 hive> add jar /tmp/xhUDFs.jar; Added [/tmp/xhUDFs.jar] to class path Ad

这是我的第一篇帖子!我一直在寻找解决这个问题的方法,但几个星期都没有结果(断断续续)

我有一个java配置单元UDF,我想在其中对配置单元表运行SQL,以映射内存中的数据,供以后使用。我有正确的连接信息,但它找不到HiveDriver。我已经尝试在配置单元中添加配置单元jdbc驱动程序jar,并将其导出到可运行的jar中

下面是错误,后面是相关代码

hive> add jar /tmp/xhUDFs.jar;
Added [/tmp/xhUDFs.jar] to class path
Added resources: [/tmp/xhUDFs.jar]
hive> CREATE TEMPORARY FUNCTION getRefdata as 'xhUDFs.GetRefdata';
OK
Time taken: 0.042 seconds
hive> select '06001',getRefdata('CBSAname','06001');
java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver 位于java.net.URLClassLoader.findClass(URLClassLoader.java:381) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:264) 位于xhUDFs.GetRefdata.getRefmap(GetRefdata.java:53) 在xhUDFs.GetRefdata.evaluate处(GetRefdata.java:35) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于org.apache.hadoop.hive.ql.exec.FunctionRegistry.invoke(FunctionRegistry.java:954) 位于org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge.evaluate(GenericUDFBridge.java:182) 位于org.apache.hadoop.hive.ql.udf.generic.GenericUDF.initializeAndFoldConstants(GenericUDF.java:168) 位于org.apache.hadoop.hive.ql.plan.exprnodegenericfundesc.newInstance(exprnodegenericfundesc.java:233) 位于org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.getXPathFuncExprNodedesc(TypeCheckProcFactory.java:1093) 位于org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory$DefaultExprProcessor.process(TypeCheckProcFactory.java:1312) 位于org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher.dispatch(DefaultRuleDispatcher.java:90) 在org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatchAndReturn上(DefaultGraphWalker.java:95) 在org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.dispatch(DefaultGraphWalker.java:79)上 位于org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.walk(DefaultGraphWalker.java:133) 位于org.apache.hadoop.hive.ql.lib.DefaultGraphWalker.startWalking(DefaultGraphWalker.java:110) 位于org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:209) 位于org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory.genExprNode(TypeCheckProcFactory.java:153) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genAllExprNodeDesc(semanticalyzer.java:10499) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genExprNodeDesc(semanticalyzer.java:10455) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genSelectPlan(semanticalyzer.java:3822) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genSelectPlan(semanticalyzer.java:3601) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genPostGroupByBodyPlan(semanticalyzer.java:8943) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genBodyPlan(semanticalyzer.java:8898) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genPlan(semanticalyzer.java:9743) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genPlan(semanticalyzer.java:9636) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.genOPTree(semanticalyzer.java:10109) 位于org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:329) 位于org.apache.hadoop.hive.ql.parse.semanticalyzer.analyzeInternal(semanticalyzer.java:10120) 位于org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:211) 位于org.apache.hadoop.hive.ql.parse.basesemanticalyzer.analyze(basesemanticalyzer.java:227) 位于org.apache.hadoop.hive.ql.Driver.compile(Driver.java:454) 位于org.apache.hadoop.hive.ql.Driver.compile(Driver.java:314) 位于org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1164) 位于org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1212) 位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:1101) 位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:1091) 位于org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:216) 位于org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:168) 位于org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:379) 位于org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:739) 位于org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:684) 位于org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:624) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:497) 位于org.apache.hadoop.util.RunJar.run(RunJar.java:221) 位于org.apache.hadoop.util.RunJar.main(RunJar.java:136)java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver

现在,代码片段:

    try {
            Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
            Connection wConn = DriverManager.getConnection("jdbc:hive2://172.20.2.40:10000/refdata", "", "");
            Statement sql = wConn.createStatement();
            ResultSet wResult = sql.executeQuery("select distinct zipcode5,cbsa_name,msa_name,pmsa_name,region,csaname,cbsa_div_name from refdata.zip_code_business_all_16_1_2016_orc where primaryrecord='P'");
            while (wResult.next()){
                censusMap.put(wResult.getString("zipcode5"), wResult.getString("cbsa_name"));
            }
        } catch (SQLException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

出于好奇,您是否尝试添加jar/where/my/distro/is/hive/hive-jdbc-xxxxxx-standalone.jar?而且,看起来您只是希望Java HashMap在UDF中执行查找,而不是运行配置单元映射联接。好吧,看到人们重新发明轮子总是很有趣的,尤其是当他们失败的时候。但为什么是JDBC?存储在HDFS上的好的旧CSV文件将更容易从Java代码中读取。你可以跑呀