hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alo alt <wget.n...@googlemail.com>
Subject Re: Error while executing program with Hive JDBC
Date Thu, 26 Apr 2012 07:39:36 GMT
You have to use fb303 and libthrift jars, and putting them into the classpath or export them.

- Alex 

--
Alexander Lorenz
http://mapredit.blogspot.com

On Apr 26, 2012, at 8:14 AM, Bhavesh Shah wrote:

> Hello all,
> I have written this small program But I am getting error.
> 
> Program:
> -------------
> import java.io.FileWriter;
> import java.io.InputStream;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.ResultSet;
> import java.sql.Statement;
> import java.text.DateFormat;
> import java.text.SimpleDateFormat;
> import java.util.Calendar;
> import java.util.Date;
> 
> 
> public class SampleHiveProgram 
> {
>     String lyear="";
>     String lquarter="";
>     String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
>     public static void main(String[] args) 
>     {
>         SampleHiveProgram s=new SampleHiveProgram();
>         s.startHiveThriftServer();
>         s.quarterTable();
>     }
> 
>     public void startHiveThriftServer()
>     {
>         try
>         {    
>             String cmd = "/home/hadoop/sqoop-1.3.0-cdh3u1/bin/StartHiveThriftServer.sh";
// this is the command to execute in the Unix shell            
>             // create a process for the shell
>             ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
>             pb.redirectErrorStream(true); // use this to capture messages sent to stderr
>             Process shell = pb.start();
>             InputStream shellIn = shell.getInputStream(); // this captures the output
from the command
>             // wait for the shell to finish and get the return code
>             // at this point you can process the output issued by the command
>             // for instance, this reads the output and writes it to System.out:
>             int c;
>             while ((c = shellIn.read()) != -1) 
>             {
>                 System.out.write(c);
>             }
>             int shellExitStatus = shell.waitFor(); 
>             // close the stream
>             shellIn.close();
>         }
>         catch(Exception e)
>         {
>             e.printStackTrace();
>             System.exit(1);
>         }
>     }
>     
>     public void quarterTable()
>     {
>         try
>         {
>             String start="2010-01-01";
>             String end="2011-01-01";
>             System.out.println("in quarter table...");
>             //create connection with database
>             Class.forName(driverName);
>             Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default",
"", "");
>             String sql=null;
>             Statement stmt = con.createStatement();
>             ResultSet res=null;
>             
>             sql="drop table TmpQuarterTable";
>             System.out.println("Dropping the Quarter Table...");
>             res = stmt.executeQuery(sql);
>             
>             //Creating Quarter Table
>             sql="create table TmpQuarterTable (year string, quarter string, quarterstart
string, quarterend string, quartername string)" +
>                 " ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\012'
STORED AS TEXTFILE ";
>             System.out.println("Creating the Quarter Table...");
>             res = stmt.executeQuery(sql);
>             
>             //create the file
>             FileWriter fw=new FileWriter("/home/hadoop/Quarter.txt");
>             
>             //convert string date to calendar date
>             DateFormat formatter =new SimpleDateFormat("yyyy-MM-dd");
>             Date sdate=(Date)formatter.parse(start);
>             Date edate=(Date)formatter.parse(end);
>             
>             Calendar c1=Calendar.getInstance();
>             Calendar c2=Calendar.getInstance();
>             
>             c1.setTime(sdate);
>             c2.setTime(edate);
>             
>             int q=0;
>             String QuarterEndDate=null;
>             int resultMonthCount=0; 
>             int resultYear =0;
>             int resultMonth =0;
>             
>             Calendar c3=Calendar.getInstance();
>             c3.setTime(c1.getTime());      
>             while(c3.compareTo(c2)<=0)
>             {
>                       if(c3.get(Calendar.MONTH)>=0 && c3.get(Calendar.MONTH)<=2)
>                       {
>                           q=1;
>                           QuarterEndDate=Integer.toString(c3.get(Calendar.YEAR))+"-04-01";
>                       }
>                       else if(c3.get(Calendar.MONTH)>=3 && c3.get(Calendar.MONTH)<=5)
>                       {
>                           q=2;
>                           QuarterEndDate=Integer.toString(c3.get(Calendar.YEAR))+"-07-01";
>                       }
>                       else if(c3.get(Calendar.MONTH)>=6 && c3.get(Calendar.MONTH)<=8)
>                       {
>                           q=3;
>                           QuarterEndDate=Integer.toString(c3.get(Calendar.YEAR))+"-10-01";
>                       }
>                       else if(c3.get(Calendar.MONTH)>=9 && c3.get(Calendar.MONTH)<=11)
>                       {
>                           q=4;
>                           QuarterEndDate=Integer.toString(c3.get(Calendar.YEAR)+1)+"-01-01";
>                       }
>                       //Got the QuarterEndDate (YYYY-MM-DD)
>                       //split the QuarterEndDate into qdate and create quarter_end_date
>                       String[] qdate=QuarterEndDate.split("-");
>                       Calendar quarter_end_date=Calendar.getInstance();
>                       quarter_end_date.set(Integer.parseInt(qdate[0]),Integer.parseInt(qdate[1]),Integer.parseInt(qdate[2]));
>                       System.out.println("quarter_end_date : "+quarter_end_date);
>                       
>                       //YY
>                       String YY=Integer.toString(c3.get(Calendar.YEAR));
>                       
>                       //quarter start date = quarter end date - 1 
>                       Calendar quarter_start_date=Calendar.getInstance();
>                       quarter_start_date.set(quarter_end_date.get(Calendar.YEAR),quarter_end_date.get(Calendar.MONTH),quarter_end_date.get(Calendar.DATE));
>                       quarter_start_date.add(Calendar.YEAR, -1);
>                       
>                       //year
>                       String year=Integer.toString(quarter_start_date.get(Calendar.YEAR));
>                       System.out.println("year : "+year);
>                       
>                       //month
>                       String months=null;
>                       if(quarter_start_date.get(Calendar.MONTH)<10)
>                           months="0"+Integer.toString(quarter_start_date.get(Calendar.MONTH));
>                       else
>                           months=Integer.toString(quarter_start_date.get(Calendar.MONTH));
>                       System.out.println("month : "+months);
>                       
>                       //day
>                       String day=null;
>                       if(quarter_start_date.get(Calendar.DATE)<10)
>                           day="0"+Integer.toString(quarter_start_date.get(Calendar.DATE));
>                       else
>                           day=Integer.toString(quarter_start_date.get(Calendar.DATE));
>                       System.out.println("day : "+day);
>                       
>                       
>                       //adding 3 months
>                       resultMonthCount = c3.get(Calendar.MONTH) + 3;
>                       resultYear =  c3.get(Calendar.YEAR);
>                       resultMonth = resultMonthCount - resultYear * 12;
>                       
>                       System.out.println("YEAR : "+resultYear);
>                       c3.set(Calendar.YEAR, resultYear);
>         
>                       System.out.println("MONTH : "+resultMonthCount);
>                       c3.set(Calendar.MONTH, resultMonthCount);     
>                       System.out.println("c3 : "+c3.getTime());
>                     
>                       //YY,q,startDate,endDate,quartername   ------->>   write
to file
>                       String QuarterStartDate=year+"-"+months+"-"+day;              
   
>                       String quarterName=YY+"\"Q\""+q;                  
>                       fw.write(YY+","+q+","+QuarterStartDate+","+QuarterEndDate+","+quarterName+"\n");
>                 
>             }//end of while
>             fw.close();
>         
>             String filepath = "/home/hadoop/Quarter.txt";
>             sql = "load data local inpath '" + filepath + "' overwrite into table TmpQuarterTable";
>             System.out.println("Running: " + sql);
>             stmt.executeUpdate(sql);
>         }
>         catch(Exception e)
>         {
>             e.printStackTrace();
>             System.exit(1);
>         }
> 
>     }
> }
> 
> Error as:
> xception in thread "main" java.lang.IncompatibleClassChangeError: class com.facebook.fb303.FacebookService$Client
has interface org.apache.thrift.TServiceClient as super class
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at java.lang.ClassLoader.defineClass1(Native Method)
>     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
>     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
>     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
>     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
>     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>     at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveConnection.java:93)
>     at org.apache.hadoop.hive.jdbc.HiveDriver.connect(HiveDriver.java:104)
>     at java.sql.DriverManager.getConnection(DriverManager.java:582)
>     at java.sql.DriverManager.getConnection(DriverManager.java:185)
>     at SampleHiveProgram.quarterTable(SampleHiveProgram.java:64)
>     at SampleHiveProgram.main(SampleHiveProgram.java:22)
> 
> -- 
> Regards,
> Bhavesh Shah
> 


Mime
View raw message