Hi All,

I am trying to add UDF jar from the JDBC Java Client program but somehow 
getting some errors.

I am using HiveServer2 and here is my conf/hive-site.xml
<configuration>
<property>  <name>hive.metastore.uris</name>  
<value>thrift://localhost:9083</value> </property>

<property>
        <name>hive.server2.enable.doAs</name>
        <value>false</value>
   <description>Setting this property to true will have hive server2 execute 
hive operations as the user making the calls to it.</description></property>
</configuration>

Here is my Java JDBC Client code snippet:

Statement stmt = null;
ResultSet res = null;
Connection con = getHiveConnection(host, port, db);
try {
                stmt = con.createStatement();

String[] args = new String[2];
args[0] = "add jar /home/nirmal/Teradata/udf/hiveUDF-1.0-SNAPSHOT.jar";
args[1] = "CREATE TEMPORARY FUNCTION zeroifnull AS 
'com.impetus.ilabs.etloffload.ZeroIfNullUDF'";
for (String queryUDF : args) {
stmt.execute(queryUDF);
                }
}

java.sql.SQLException: org.apache.thrift.protocol.TProtocolException: Required 
field 'statement' is unset! 
Struct:TExecuteStatementReq(sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:A1
 4A 70 6F BE 4F 48 FE 89 00 44 95 3C 5E D6 ED, secret:FB 5D D5 DE 9D 3C 46 C3 
93 9E AF 2A 47 D5 7A DD)), statement:null, confOverlay:{}, runAsync:true)
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:236)
at 
org.impetus.etloffload.hive.HiveJdbcClient.executeExplain(HiveJdbcClient.java:57)
at org.impetus.etloffload.hive.HiveJdbcClient.main(HiveJdbcClient.java:26)
Caused by: org.apache.thrift.protocol.TProtocolException: Required field 
'statement' is unset! 
Struct:TExecuteStatementReq(sessionHandle:TSessionHandle(sessionId:THandleIdentifier(guid:A1
 4A 70 6F BE 4F 48 FE 89 00 44 95 3C 5E D6 ED, secret:FB 5D D5 DE 9D 3C 46 C3 
93 9E AF 2A 47 D5 7A DD)), statement:null, confOverlay:{}, runAsync:true)
at 
org.apache.hive.service.cli.thrift.TExecuteStatementReq.validate(TExecuteStatementReq.java:562)
at 
org.apache.hive.service.cli.thrift.TCLIService$ExecuteStatement_args.validate(TCLIService.java:4055)
at 
org.apache.hive.service.cli.thrift.TCLIService$ExecuteStatement_args$ExecuteStatement_argsStandardScheme.write(TCLIService.java:4112)
at 
org.apache.hive.service.cli.thrift.TCLIService$ExecuteStatement_args$ExecuteStatement_argsStandardScheme.write(TCLIService.java:4081)
at 
org.apache.hive.service.cli.thrift.TCLIService$ExecuteStatement_args.write(TCLIService.java:4032)
at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:63)
at 
org.apache.hive.service.cli.thrift.TCLIService$Client.send_ExecuteStatement(TCLIService.java:219)
at 
org.apache.hive.service.cli.thrift.TCLIService$Client.ExecuteStatement(TCLIService.java:211)
at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:230)
... 2 more

When I use stmt.executeQuery(queryUDF); instead of stmt.execute(queryUDF); in 
the above code I get the below error:

java.sql.SQLException: The query did not generate a result set!
at org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:356)
at 
org.impetus.etloffload.hive.HiveJdbcClient.executeExplain(HiveJdbcClient.java:57)
at org.impetus.etloffload.hive.HiveJdbcClient.main(HiveJdbcClient.java:26)

I also tried putting the UDF jar in HDFs and then referring by absolute hdfs 
path but still same error:
add jar hdfs://localhost:9000/udfjars/hiveUDF-1.0-SNAPSHOT.jar


I also verified both from Hive CLI and Beeline and able to add jars and test 
the UDF function:

Hive CLI
hive> ADD JAR /home/nirmal/Teradata/udf/hiveUDF-1.0-SNAPSHOT.jar;
Added /home/nirmal/Teradata/udf/hiveUDF-1.0-SNAPSHOT.jar to class path
Added resource: /home/nirmal/Teradata/udf/hiveUDF-1.0-SNAPSHOT.jar
hive> CREATE TEMPORARY FUNCTION zeroifnull AS 
'com.impetus.ilabs.etloffload.ZeroIfNullUDF';
OK
Time taken: 0.064 seconds
hive> select name,zeroifnull(age) from employeeudf;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1407273867669_0006, Tracking URL = 
http://nirmal-Vostro-3560:8088/proxy/application_1407273867669_0006/
Kill Command = /home/nirmal/hadoop/hadoop-2.1.0.2.0.5.0-67/bin/hadoop job  
-kill job_1407273867669_0006
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2014-08-06 13:30:06,600 Stage-1 map = 0%,  reduce = 0%
2014-08-06 13:30:11,931 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.33 
sec
MapReduce Total cumulative CPU time: 1 seconds 330 msec
Ended Job = job_1407273867669_0006
MapReduce Jobs Launched:
Job 0: Map: 1   Cumulative CPU: 1.33 sec   HDFS Read: 271 HDFS Write: 43 SUCCESS
Total MapReduce CPU Time Spent: 1 seconds 330 msec
OK
John 25
Smith 25
Bush 0
Joan 35
reena 0
0
Time taken: 11.851 seconds, Fetched: 6 row(s)

Beeline
nirmal@nirmal-Vostro-3560 ~/hadoop/apache-hive-0.13.1-bin $ bin/beeline
Beeline version 0.13.1 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000 scott tiger 
org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://localhost:10000
Connected to: Apache Hive (version 0.13.1)
Driver: Hive JDBC (version 0.13.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> ADD JAR 
/home/nirmal/Teradata/udf/hiveUDF-1.0-SNAPSHOT.jar;
No rows affected (0.05 seconds)
0: jdbc:hive2://localhost:10000> CREATE TEMPORARY FUNCTION zeroifnull AS 
'com.impetus.ilabs.etloffload.ZeroIfNullUDF';
No rows affected (0.597 seconds)
0: jdbc:hive2://localhost:10000> select name,zeroifnull(age) from employeeudf;
+--------+------+
|  name  | _c1  |
+--------+------+
| John   | 25   |
| Smith  | 25   |
| Bush   | 0    |
| Joan   | 35   |
| reena  | 0    |
|        | 0    |
+--------+------+
6 rows selected (50.319 seconds)

Kindly provide me some pointers.

Thanks,
-Nirmal


________________________________






NOTE: This message may contain information that is confidential, proprietary, 
privileged or otherwise protected by law. The message is intended solely for 
the named addressee. If received in error, please destroy and notify the 
sender. Any use of this email is prohibited when received in error. Impetus 
does not represent, warrant and/or guarantee, that the integrity of this 
communication has been maintained nor that the communication is free of errors, 
virus, interception or interference.

Reply via email to