1. 程式人生 > >Hive之Java操作jdbc以及指令碼實現

Hive之Java操作jdbc以及指令碼實現

原部落格地址:http://blog.csdn.net/evankaka

    摘要:本文主要講了如何通過java來連線Hive,以及如何執行hive指令碼

一、Hive連線

1.1、通過shell

1、Hive 命令列模式,直接輸入#/hive/bin/hive的執行程式,或者輸入#hive --service cli


2、 hive web介面的 (埠號9999) 啟動方式
#hive --service hwi
用於通過瀏覽器來訪問hive
http://hadoop0:9999/hwi/
3、 hive 遠端服務 (埠號10000) 啟動方式

#hive --service hiveserver

注意:hiveserver不能和hwi服務同時啟動使用。

4、使用dbveare工具

需要將presto的jar新增進來並配置連線


1.2 通過java程式碼

使用Java程式碼來連線hive時,驅動可以選擇使用jdbc,也可以選擇使用presto

HiveServer使用thrift服務來為客戶端提供遠端連線的訪問埠,在JDBC連線Hive之前必須先啟動HiveServer。

  1. hive --service hiveserver    

hiveserver預設埠是10000,可以使用hive --service hiveserver -p 10002,更改預設啟動埠,此埠也是JDBC連線埠。


1、直接通過jdbc

  1. package com.lin.bdp.common.utils;  
  2. import java.lang.reflect.Field;  
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.ResultSetMetaData;  
  8. import java.sql.SQLException;  
  9. import java.sql.Statement;  
  10. import java.util.ArrayList;  
  11. import java.util.List;  
  12. import org.slf4j.Logger;  
  13. import org.slf4j.LoggerFactory;  
  14. import com.lin.bdp.common.vo.Visitor;  
  15. /** 
  16.  *  
  17.  * 功能概要:hive客戶端工具 
  18.  *  
  19.  * @author linbingwen 
  20.  * @since  2016年10月20日 
  21.  */
  22. publicclass HiveJdbcClient {  
  23.     privatestaticfinal Logger logger = LoggerFactory.getLogger(HiveJdbcClient.class);  
  24.     publicstaticfinalchar UNDERLINE = '_';  
  25.     privatestatic String driverName;  
  26.     privatestatic String url;  
  27.     privatestatic String user;  
  28.     privatestatic String password;  
  29.     privatestaticclass LazyHolder {  
  30.         privatestaticfinal HiveJdbcClient INSTANCE = new HiveJdbcClient();  
  31.     }  
  32.     publicstaticfinal HiveJdbcClient getInstance() {  
  33.         return LazyHolder.INSTANCE;  
  34.     }  
  35.     /** 
  36.      * 初始化引數 
  37.      * @author linbingwen 
  38.      * @since  2016年10月20日 
  39.      */
  40.     privatevoid init() {  
  41.         driverName = ConfigLoader.getProperty("hive.jdbc.driverName");  
  42.         url = ConfigLoader.getProperty("hive.jdbc.url");  
  43.         user = ConfigLoader.getProperty("hive.jdbc.user");  
  44.         password = ConfigLoader.getProperty("hive.jdbc.password");  
  45.     }  
  46.     privatevoid initPresto() {  
  47.         driverName ="com.facebook.presto.jdbc.PrestoDriver";  
  48.         url = "jdbc:presto://10.78.104.5:8080/hive/ods_uba";  
  49.         user = "presto";  
  50.         password = "[email protected]";  
  51.     }  
  52.     private HiveJdbcClient() {  
  53.         init();  
  54.     }  
  55.     /** 
  56.      * 獲取連線 
  57.      * @author linbingwen 
  58.      * @since  2016年10月20日  
  59.      * @return 
  60.      * @throws ClassNotFoundException 
  61.      * @throws SQLException 
  62.      */
  63.     private Connection getConnection() throws ClassNotFoundException, SQLException {  
  64.         Class.forName(driverName);  
  65.         Connection conn = DriverManager.getConnection(url, user, password);  
  66.         return conn;  
  67.     }  
  68.     /** 
  69.      * 按條件查詢 
  70.      * @author linbingwen 
  71.      * @since  2016年10月20日  
  72.      * @param clazz 
  73.      * @param sql 
  74.      * @return 
  75.      * @throws Exception 
  76.      */
  77.     public <T> List<T> find(Class<T> clazz, String sql) throws Exception {  
  78.         if (sql == null || sql.length() == 0) {  
  79.             logger.warn("查詢sql語句不能為空");  
  80.             returnnew ArrayList<T>();  
  81.         }  
  82.         Connection connection = null;  
  83.         PreparedStatement preState = null;  
  84.         ResultSet rs = null;  
  85.         try {  
  86.             connection = getConnection();  
  87.             Statement stmt = connection.createStatement();    
  88.             rs = stmt.executeQuery(sql);  
  89.             return (List<T>) handler(clazz, rs);  
  90.         } catch (Exception e) {  
  91.             logger.error("sql = {}執行出錯,Exception = {}", sql, e.getLocalizedMessage());  
  92.             throw e;  
  93. 相關推薦

    HiveJava操作jdbc以及指令碼實現

    原部落格地址:http://blog.csdn.net/evankaka     摘要:本文主要講了如何通過java來連線Hive,以及如何執行hive指令碼 一、Hive連線 1.1、通過shell 1、Hive 命令列模式,直接輸入#/hive

    java操作JDBCOracle工具類

    /** * JDBC之Oracle工具類 * * @author: Rodge * @time: 2018年10月4日 下午4:06:15 * @version: V1.0.0 */ public class JDBCUtilForOracle { private static fi

    java操作JDBCMySQL工具類

    /** * JDBC之MySQL工具類 * * @author: Rodge * @time: 2018年10月4日 下午4:03:42 * @version: V1.0.0 */ public class JDBCUtilForMySQL { private static fin

    Hive Java API 操作

    Java 想要訪問Hive,需要通過beeline的方式連線Hive,hiveserver2提供了一個新的命令列工具beeline,hiveserver2 對 之前的hive做了升級,功能更加強大,它增加了許可權控制,要使用beeline需要先啟動hiverse

    Java學習篇--用純JavaJDBC驅動程式實現與資料庫連線

    用純Java的JDBC驅動程式實現與資料庫連線         最近在研究JAVA中資料庫的連線,將知識整理一下分享給大家:         Java程式可以用純Java的JDBC驅動程式實現與資料庫連線。這種方法應用較廣泛,但是需要下載相應的驅動程式包,因為不同的資

    Java操作數據庫實現"增刪改查"

    mysq 新的 rom 可用 erp catch next() value eight 本文主要講解JDBC操作數據庫 主要實現對MySql數據庫的"增刪改查" 綜合概述: JDBC的常用類和接口 一 DriverManager類 DriverManage類用

    Elasticsearch學習Java操作1

    默認 time field java客戶端 OS should timeval nodes spa 1. Elasticsearch為Java用戶提供了兩種內置客戶端 1.1 節點客戶端(node client): 節點客戶端以無數據節點(none data nod

    編程開發--Java集合類繼承與實現必備知識

    編程開發 next() int end long dha cos dHash IV 1、LinkedHashSet有序鏈式集合 舉例: long startTime=System.currentTimeMillis(); LinkedHashSet oprTypeSe

    第一次使用java操作Redis以及錯誤小結

    目錄 java操作Redis的流程: 1.匯入jedis依賴包:  2.匯入junit依賴包: 3.寫測試方法:  關於testJedis( )執行時控制檯報錯分析: 1.redis.clients.jedis.exceptions.JedisConnec

    java操作pdf——擴充套件功能實現

    正經學徒,佛系記錄,不搞事情 基於上一個專案:https://blog.csdn.net/qq_31748587/article/details/84550356 新增的提供的方法: 圖片轉pdf 讀取pdf文字 pdf轉圖片 批量pdf合成一份pdf並生成目

    java操作pdf——基礎功能實現

    正經學徒,佛系記錄,不搞事情 itextpdf 是java用於操作pdf檔案的工具,速度極快,目前測試上千頁的pdf檔案都不在話下 下面編寫的工具類,可看作是將pdf檔案轉成類似list的集合,通過對list的CURD操作,最終生成一個新的list集合,即生成一個新的pdf檔案 提供

    高併發-【搶紅包案例】四:使用Redis+Lua指令碼實現搶紅包並非同步持久化到資料庫

    文章目錄導讀概述 導讀 概述 上面三篇博文是使用的MySql資料庫來作為資料的載體資料最終會將資料儲存到磁碟中,而Redis使用的是記憶體,記憶體的速度比磁碟速度肯定要快很多. 對於使用 Redis實現搶紅包,首先需要知道的是Redis的功能不如資料庫

    springAOP操作(基於aspectJ實現)--配置檔案和註解兩種方式實現

    AOP概念   1 aop:面向切面(方面)程式設計,擴充套件功能不修改原始碼實現     2  AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼     3 aop底層使用動態代理實現     (1)第一種情況,有介面情況,使用動態代理建立介面實現類代理物

    Java 利用 JDBC 連線 Sqlsever2012 實現 增刪改查

    所需驅動檔案下載 http://download.csdn.net/detail/u012320991/9378730 資料表如下: 執行結果如下: 解決過程(預設SqlSever  已安裝並配置好): 下載  JDBC 4.0 For SqlSever --->

    以CSV檔案匯入MySQL的批量資料插入操作Java操作

    最近工作涉及將excel中的資料匯入到MySQL資料庫,由於Excel中資料並不規範,需要進行二次加工。將excel中資料加工後,通過mybatis批量插入mySQL資料庫,其相關聯的技術點比較簡單,經過半天的編寫,算是把任務完成了。但測試時效能太差,處理2W條資料的exc

    Kafka筆記三java操作

    maven依賴,我使用的是版本是0.8.22,scala是2.11 <dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka_2.11&l

    java封裝優點——以及如何實現案例

    Java 封裝 在面向物件程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式介面的實現細節部份包裝、隱藏起來的方法。 封裝可以被認為是一個保護屏障,防止該類的程式碼和資料被外部類定義的程式碼隨機訪問。 要訪問該類的程式碼和資料,必須通過嚴格的介面控制。

    Elasticsearch筆記五java操作es

    Java操作es叢集步驟1:配置叢集物件資訊;2:建立客戶端;3:檢視叢集資訊 1:叢集名稱       預設叢集名為elasticsearch,如果叢集名稱和指定的不一致則在使用節點資源時會報錯。 2:嗅探功能        通過client

    Android多執行緒Java 8中ThreadLocal內部實現機制詳解

    前言:ThreadLocal是執行緒內部的儲存類,通過它可以實現在每個執行緒中儲存自己的私有資料。即資料儲存以後,只能在指定的執行緒中獲取這個儲存的物件,而其它執行緒則不能獲取到當前執行緒儲存的這個物件。ThreadLocal有一個典型的應用場景,即我們在前文中

    ESJAVA操作

    連線Client// 按叢集名稱建立 /** * clusterName需要跟elasticsearch.yml裡的clusterName相同 */ Settings settings = Settings.builder().put("cluster.n