1. 程式人生 > >Java程式碼通過JDBC連線Hiveserver2

Java程式碼通過JDBC連線Hiveserver2

      我們可以通過CLI、Client、Web UI等Hive提供的使用者介面來和Hive通訊,但這三種方式最常用的是CLI;Client 是Hive的客戶端,使用者連線至 Hive Server。在啟動 Client 模式的時候,需要指出Hive Server所在節點,並且在該節點啟動 Hive Server。 WUI 是通過瀏覽器訪問 Hive。今天我們來談談怎麼通過HiveServer來操作Hive。

在$HIVE_HOME/conf目錄下,新建一個hive-site.xml,配置Hive元資料的儲存方式(我用的是mysql儲存)注意下面配置的是hive預設的是mysql的hive資料庫,使用者名稱是hive,密碼是hive。所以在進行下列操作前要用root登入mysql建立hive資料庫並且分配給使用者hive。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
<property>
  <name>hive.metastore.local</name>
  <value>true</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>
 
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive</value>
</property>
<property>
  <name>datanucleus.fixedDatastore</name>
  <value>false</value>
</property>
 
</configuration>

  Hive提供了jdbc驅動,使得我們可以用Java程式碼來連線Hive並進行一些類關係型資料庫的sql語句查詢等操作。同關係型資料庫一樣,我們也需要將Hive的服務開啟;在Hive 0.11.0版本之前,只有HiveServer服務可用,你得在程式操作Hive之前,必須在Hive安裝的伺服器上開啟HiveServer服務,如下:

[[email protected] /home/q/hive-0.11.0]$ bin/hive --service hiveserver -p 10002
Starting Hive Thrift Server

上面代表你已經成功的在埠為10002(預設的埠是10000)啟動了hiveserver服務。這時候,你就可以通過Java程式碼來連線hiveserver,程式碼如下:

package com.wyp;

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
 
public class HiveJdbcTest {
    
  private static String driverName =
                   "org.apache.hadoop.hive.jdbc.HiveDriver";
	   
	    public static void main(String[] args)	                            throws SQLException {
	        try {
	            Class.forName(driverName);
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	            System.exit(1);
	        }
	 
	        Connection con = DriverManager.getConnection(
	                           "jdbc:hive://localhost:10002/default", "wyp", "");
	        Statement stmt = con.createStatement();
	        String tableName = "wyphao";
	        stmt.execute("drop table if exists " + tableName);
	        stmt.execute("create table " + tableName +
	                                     " (key int, value string)");
	        System.out.println("Create table success!");
	        // show tables
	        String sql = "show tables '" + tableName + "'";
	        System.out.println("Running: " + sql);
	        ResultSet res = stmt.executeQuery(sql);
	        if (res.next()) {
	            System.out.println(res.getString(1));
	        }
	 
	        // describe table
	        sql = "describe " + tableName;
	        System.out.println("Running: " + sql);
	        res = stmt.executeQuery(sql);
	        while (res.next()) {
	            System.out.println(res.getString(1) + "\t" + res.getString(2));
	        }
	 
	 
	        sql = "select * from " + tableName;
	        res = stmt.executeQuery(sql);
	        while (res.next()) {
	            System.out.println(String.valueOf(res.getInt(1)) + "\t"
	                                               + res.getString(2));
	        }
	 
	        sql = "select count(1) from " + tableName;
	        System.out.println("Running: " + sql);
	        res = stmt.executeQuery(sql);
	        while (res.next()) {
	            System.out.println(res.getString(1));
	        }
	    }
	}

編譯上面的程式碼,之後就可以執行(我是在整合開發環境下面執行這個程式的),結果如下:

Create table success!
Running: show tables 'wyphao'
wyphao
Running: describe wyphao
key                     int                
value                   string             
Running: select count(1) from wyphao
0 
Process finished with exit code 0

  如果你想在腳本里面執行,請將上面的程式打包成jar檔案,並將上面的依賴庫放在/home/wyp/lib/(這個根據你自己的情況弄)中,同時加入到執行的環境變數,指令碼如下:

#!/bin/bash
HADOOP_HOME=/home/q/hadoop-2.2.0
HIVE_HOME=/home/q/hive-0.11.0-bin
 
CLASSPATH=$CLASSPATH:
 
for i in /home/wyp/lib/*.jar ; do
    CLASSPATH=$CLASSPATH:$i
done
 
echo $CLASSPATH
/home/q/java/jdk1.6.0_20/bin/java -cp  \
   $CLASSPATH:/export1/tmp/yangping.wu/OutputText.jar  com.wyp.HiveJdbcTest

上面是用Java連線HiveServer,而HiveServer本身存在很多問題(比如:安全性、併發性等);針對這些問題,Hive0.11.0版本提供了一個全新的服務:HiveServer2,這個很好的解決HiveServer存在的安全性、併發性等問題。這個服務啟動程式在${HIVE_HOME}/bin/hiveserver2裡面,你可以通過下面的方式來啟動HiveServer2服務:

$HIVE_HOME/bin/hiveserver2

也可以通過下面的方式啟動HiveServer2

$HIVE_HOME/bin/hive --service hiveserver2

兩種方式效果都一樣的。但是以前的程式需要修改兩個地方,如下所示:

	private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
	改為
	private static String driverName = "org.apache.hive.jdbc.HiveDriver";

Connection con = DriverManager.getConnection(
	                           "jdbc:hive://localhost:10002/default", "wyp", "");
	改為
	Connection con = DriverManager.getConnection(
	                           "jdbc:hive2://localhost:10002/default", "wyp", "");

其他的不變就可以了。

  這裡順便說說本程式所依賴的jar包,一共有以下幾個:

hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar
$HIVE_HOME/lib/hive-exec-0.11.0.jar
$HIVE_HOME/lib/hive-jdbc-0.11.0.jar
$HIVE_HOME/lib/hive-metastore-0.11.0.jar 
$HIVE_HOME/lib/hive-service-0.11.0.jar  
$HIVE_HOME/lib/libfb303-0.9.0.jar  
$HIVE_HOME/lib/commons-logging-1.0.4.jar 
$HIVE_HOME/lib/slf4j-api-1.6.1.jar

  如果你是用Maven,加入以下依賴

<dependency>
	        <groupId>org.apache.hive</groupId>
	        <artifactId>hive-jdbc</artifactId>
	        <version>0.11.0</version>
	</dependency>
	 
	<dependency>
	        <groupId>org.apache.hadoop</groupId>
	        <artifactId>hadoop-common</artifactId>
        <version>2.2.0</version>
</dependency>

相關推薦

Java程式碼通過JDBC連線Hiveserver2

      我們可以通過CLI、Client、Web UI等Hive提供的使用者介面來和Hive通訊,但這三種方式最常用的是CLI;Client 是Hive的客戶端,使用者連線至 Hive Server。在啟動 Client 模式的時候,需要指出Hive Server所在節點,並且在該節點啟動 Hive Se

Hive:用Java程式碼通過JDBC連線Hiveserver

  寫在前面的話,學Hive這麼久了,發現目前國內還沒有一本完整的介紹Hive的書籍,而且網際網路上面的資料很亂,於是我決定寫一些關於《》序列文章,分享給大家。我會在接下來的時間整理有關Hive的資料,如果對Hive的東西感興趣,請關注本部落格。  我們可以通過CLI、Cli

Java程式碼通過JDBC連線Hiveserver

我們可以通過CLI、Client、Web UI等Hive提供的方式來和Hive通訊,但這三種方式中最常用的是CLI;Client是Hive的客戶端,使用者連線至Hive Server。在啟動Client模式的時候,需要指出Hive Server所在的節點,並且在該節點啟動H

Java程式通過JDBC連線遠端資料庫MySQL

程式碼如下: import java.sql.*; public class jdbc { @SuppressWarnings("unused") public static void main

java程式碼實現JDBC連線MySql以及引用驅動程式包

JDBC連結MySql   JDBC連結MySql的話題已經老掉牙了,這次我只想通過使用簡潔的程式碼實現,採用封裝的思想,將連結MySql的程式碼封裝在類的靜態方法中,供一次性呼叫返回java.sq

Java 資料庫】java工程通過JDBC連線到資料庫

(在原博文上有改動) 下面請一字一句地看,一遍就設定成功,比你設定幾十遍失敗,費時會少得多。 首先,在連線資料庫之前必須保證SQL Server 2012是採用SQL Server身份驗證方式而不是windows身份驗證方式。如果在安裝時選用了後者,則重新設定如下:

Java 通過JDBC連線並操作Mysql資料庫

使用Java連線資料庫需要使用JDBC驅動。JDBC(Java Data Base Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。以下是使用方

完整java開發中JDBC連線資料庫程式碼和步驟

宣告:來自Hongten(部落格園) JDBC連線資料庫 建立一個以JDBC連線資料庫的程式,包含7個步驟: 1、載入JDBC驅動程式: 在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器), 這通過java.lang

hadoop元件---資料倉庫(五)---通過JDBC連線hive的thrift或者hiveserver2

我們在上一篇文章中已經學習了Hive的常用命令,但是如果使用其他的語言如何跟Hive進行互動呢。 Thrift簡介 Hive擁有HiveServer(Thrift)或者Hiveserver2元件,提供了JDBC驅動服務,使得我們可以用Java程式碼或者Pyt

jsp/java程式碼中用jdbc驅動代替jdbc-odbc橋連線SQL Server資料庫

甲骨文公司主要技術人員、JDBC規範領導者Lance Andersen在部落格中稱,從Java SE 8起,JDK中將不再包含JDBC-ODBC橋。 JDBC-ODBC橋是Java提供的一種基於兩層模型的JDBC技術,使用JDBC-ODBC橋能對多種ODBC

java通過JDBC連線資料庫及增刪改查操作

1.實戰資料庫資料的準備    建立資料庫(newsmanager),然後建立表news(id,title,content,type)和newstype(id,name),其中news的type和newstype的id為主外來鍵關係,如下圖圖   2.JDBC的介紹  

Java 通過JDBC連線Mysql資料庫的方法和例項

  之前有兩篇文章講了安裝mysql(ubuntu和windows)和視覺化工具workbench的使用,這篇文章就講一下java程式是如何連線MySQL資料庫的。  Java是通過JDBC連線Mysql資料庫的。JDBC(Java Data Base Connectivi

Java通過JDBC連線資料庫的三種方式!!!並對資料庫實現增刪改查

前言 java連線資料庫完整流程為: 1,獲得驅動(driver),資料庫連線(url),使用者名稱(username),密碼(password)基本資訊的三種方式。 2,通過獲得的資訊完成JDBC實現連線資料庫。 注:連線前請匯入jar包,例:連線my

java本地使用JDBC連線Spark SQL(HiveServer2

根據Spark官網所述,Spark SQL實現了Thrift JDBC/ODBC server: The Thrift JDBC/ODBC server implemented here corresponds to the HiveServer2 in Hive 1.

Java通過JDBC連線Mysql

1. 官網下載 2. 解壓 3. 匯入驅動 1、右鍵工程,build path 2、Libraries–>Add External JARs–>選擇mysql安裝目錄下的jar包 3、此時在我們的工程下就有了

java通過jdbc連線impala和pom.xml以及增查操作

pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation=

解決JAVA通過JDBC連線Oracle資料庫出現的問題

Java連線Oracle步驟: 1.註冊載入驅動 驅動名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驅動類名"); 2.獲得連線 資料庫地址: URL="jdbc:oracle:thin:@1

怎樣將IDE的eclipse編寫的java appllication通過JDBC(java database connectivity)連線上Oracle資料庫 具體步驟

public class Test { public static void main(String[] args) { /** * JDBC使用過程 * 1.匯入jdbc驅動包 jar包 oracle sqlsever mysql * 2.載入jdbc驅動    &nbs

0459-如何使用SQuirreL通過JDBC連線CDH的Hive(方式一)

Fayson的github: https://github.com/fayson/cdhproject 推薦關注微信公眾號:“Hadoop實操”,ID:gh_c4c535955d0f,或者掃描文末二維碼。 1.文章編寫目的 SQuirreL SQL Clien

Android通過jdbc連線mySQL資料庫時,資料庫拒絕連線

原因: mysql伺服器出於安全考慮,預設只允許本機使用者通過命令列登入。 解決方案: 先通過localhost登入mysql伺服器 將mysql伺服器的mysql資料庫的user表中root使用者的Host欄位改為"%"。 操作如下: window+r 輸