[英]Hive2 JDBC Error
我正在嘗試連接到Hive2數據庫,但出現以下錯誤:
java.lang.NoSuchFieldError:HIVE_SERVER2_TRANSPORT_MODE
這是我要運行的代碼。 基本上,我只是嘗試連接到hive2數據庫,並使用用戶定義的查詢結果填充jTable:
import java.sql.Connection;
import org.apache.hadoop.hive.jdbc.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import javax.swing.JTable;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.Cursor;
import javax.swing.*;
import net.proteanit.sql.DbUtils;
import org.apache.hive.jdbc.*;
import org.apache.hive.jdbc.Utils;
import org.apache.hive.*;
import org.apache.hive.service.*;
import org.apache.http.*;
import org.apache.hive.service.CompositeService;
import org.apache.hive.service.cli.CLIService;
import org.apache.hive.service.cli.thrift.*;
import org.apache.hive.service.server.*;
import org.apache.hadoop.hive.conf.HiveConf;
public class SQLSelect extends javax.swing.JFrame {
/**
* Creates new form SQLSelect
*/
ResultSet r;
Statement s;
public SQLSelect() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Cursor cursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
setCursor(cursor);
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
//Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.getMessage();
}
try {
String locationString = "jdbc:hive2://" + jTextField1.getText() + ":" + jTextField2.getText();
String userString = jTextField3.getText();
char password[] = jPasswordField1.getPassword();
String pString = new String(password);
System.out.println(locationString + userString + pString);
Connection conn = DriverManager.getConnection(locationString,userString,pString);
//Connection conn = DriverManager.getConnection("jdbc:hive://76.99.192.2:9999","user","password");
s = conn.createStatement();
r = s.executeQuery(jTextArea1.getText());
//System.out.println(r.getNString(1));
}
catch (Exception e)
{
setCursor(Cursor.DEFAULT_CURSOR);
JOptionPane.showMessageDialog(null, e.getMessage(), "SQL Error", JOptionPane.ERROR_MESSAGE);
jLabel9.setText(e.getMessage());
}
try {
MainPanel resultsPanel = new jdbctohive.MainPanel();
resultsPanel.jTable1.setModel(DbUtils.resultSetToTableModel(r));
resultsPanel.setTitle("Hive SQL Management Studio");
resultsPanel.setVisible(true);
setCursor(Cursor.DEFAULT_CURSOR);
this.setVisible(false);
}
catch (Exception e)
{
setCursor(Cursor.DEFAULT_CURSOR);
}
任何幫助將非常感激!
我終於可以連接了。 我之前的聲明建議使用“; auth = noSasl”,事實證明這是錯誤的。 經過多次嘗試,這才是最終成功的代碼。 在Windows中工作時,我遇到了需要winutils.exe的Hadoop Win版本的問題。 由於HortonWorks在其產品1.3中具有Win實施,因此我下載了該產品並將其從.MSI文件中提取出來。 如果在Linux中工作,則可能不需要此功能。 我發現的關鍵之一是實現jdbc和hadoop日志記錄,因為沒有這些,我簡單地陷入了getConnection永不返回的問題。但是,存在一些潛在的錯誤,我只是以單詞return作為stacktrace,但沒有這樣做。 祝好運。
要記錄的文件:C:/temp/log.properties .level =嚴重
oracle.jdbc.level = INFO
oracle.jdbc.handlers = java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level =信息
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
Logger logger = org.apache.log4j.Logger.getRootLogger();
logger.setLevel(Level.INFO);
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
} catch (Exception e){
e.printStackTrace();
}
try{
File propFile = new File("C:/temp/log.properties");
LogManager logManager = LogManager.getLogManager();
logManager.readConfiguration(new FileInputStream(propFile));
DriverManager.setLogWriter(new PrintWriter(System.err));
Logger l2 = Logger.getLogger("org.apache.hadoop.util.Shell");
Logger l3 = Logger.getLogger("java.sql.DriverManager");
Layout simple = new SimpleLayout();
Appender newAppender = new ConsoleAppender(simple);
logger.addAppender(newAppender);
logger.setLevel(Level.ALL);
l2.setLevel(Level.ALL);
l2.addAppender(newAppender);
l3.setLevel(Level.ALL);
l3.addAppender(newAppender);
System.setProperty("HADOOP_HOME", "C:\\Development\\hadoopCore\\hadoop-2.2.0");
logger.debug("Logging works");
Connection con = DriverManager.getConnection("jdbc:hive2://192.168.218.152:10000/default", "", "");//Hortonworks Hive ODBC Driver
if (con != null)
con.close();
System.out.println("got the connection");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.