JDBCによるHive Server 2の接続

13406 ワード

JDBCでHive Server 2を接続するには、まずJDBC接続に必要なJARパッケージを用意します.
C:\Program Files\DbVisualizer\jdbc\hive\commons-logging-1.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hadoop-common-2.3.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hive-common-0.12.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hive-exec-0.12.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hive-jdbc-0.12.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hive-metastore-0.12.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\hive-service-0.12.0-cdh5.1.3.jar
C:\Program Files\DbVisualizer\jdbc\hive\libfb303-0.9.0.jar
C:\Program Files\DbVisualizer\jdbc\hive\log4j-1.2.16.jar
C:\Program Files\DbVisualizer\jdbc\hive\slf4j-api-1.7.5.jar
C:\Program Files\DbVisualizer\jdbc\hive\slf4j-log4j12-1.7.5.jar
C:\Program Files\DbVisualizer\jdbc\hive\httpclient-4.2.5.jar
C:\Program Files\DbVisualizer\jdbc\hive\httpcore-4.2.5.jar

最後の2つを追加しないと、次のエラーが発生する可能性があります.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpRequestInterceptor
     at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)
     at java.sql.DriverManager.getConnection(DriverManager.java:571)
     at java.sql.DriverManager.getConnection(DriverManager.java:215)
     at com.simon.HiveJDBCTest.main(HiveJDBCTest.java:33)
Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpRequestInterceptor
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
     ... 4 more

ステップ1:JDBC接続にはドライバ、urlなどの情報を設定する必要があります.
private static String driverName = "org.apache.hive.jdbc.HiveDriver";

リンクURL
private static String url = "jdbc:hive2://:/";

        
private static String url = "jdbc:hive2://:/?mapred.job.queue.name=";

      
private static String url = "jdbc:hive2://:/?mapred.job.queue.name=;hive.mapred.mode=nonstrict";

Apache公式wikiでは、接続URLの詳細についてのヘルプがあります
The HiveServer2 URL is a string with the following syntax:
jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list

where : ,: is a server instance or a comma separated list of server instances to connect to (if dynamic service discovery is enabled). If empty, the embedded server will be used.
dbName is the name of the initial database. is the path of init script file (Hive 2.2.0 and later). This script file is written with SQL statements which will be executed automatically after connection. This option can be empty.
hive_conf_list is a semicolon separated list of key=value pairs of Hive configuration variables for this session
hive_var_list is a semicolon separated list of key=value pairs of Hive variables for this session.
説明する
  • 複数のサーバインスタンスの場合、$HIVE_であることを前提として、カンマでサーバを分離できます.HOME/conf/hive-site.xmlにdynamicを配置する.service.discovery
  • <property>
         <name>hive.server2.support.dynamic.service.discoveryname>
         <value>truevalue>
    property>
  • initFileについては、スクリプトをコマンドに書くことができ、デフォルトではこのスクリプトを実行します.これはHive 2に属します.2.0以降の機能
  • hive_についてconf_list当URLにhiveが入っていませんconf_list、すなわちフォーマットは以下の
  • である.
    private static String url = "jdbc:hive2:///?mapred.job.queue.name=;hive.mapred.mode=nonstrict";

    コードは次のとおりです.
     conn = DriverManager.getConnection(url, user,password );
  • hive_についてvar_list

  • URLにsess_が含まれている場合var_リスト、以下のとおりです.
    private static String url = "jdbc:hive2://:/;username=username;password=password?mapred.job.queue.name=;hive.mapred.mode=nonstrict";

    接続コードは
    conn = DriverManager.getConnection(url);

    ステップ2:反射メカニズムによるドライバの取得
    try {
          Class.forName(driverName);
        } catch (ClassNotFoundException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          System.exit(1);
        }

    ステップ3:接続の確立
    conn = DriverManager.getConnection(url, user,password);
    
       
    
    conn = DriverManager.getConnection(url);

    ステップ4:statementの作成
    stmt = conn.createStatement();

    ステップ5:SQLスクリプトの準備
      ,      :
    sql = "show tables";
    
      ,  test      
    sql = "select count(1) from test";

    ステップ6:statement実行スクリプト
    res = stmt.executeQuery(sql);

    ステップ7、結果セットの処理
    while(res.next()) {
         System.out.println(res.getString(1));
    }

    ステップ8 statementを閉じる
    if (stmt != null) {
         stmt.close();
         stmt = null;
    }

    ステップ9、接続を閉じる
    if (conn != null) {
         conn.close();
         conn = null;
    }

    注:statementとconnectionを閉じるには、例外をスナップします.プロセス全体はtry/catch/finallyで完了し、クローズ例外処理をfinallyに配置できます.
    詳細は、リファレンスドキュメントを使用してくださいhttps://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients