1. 程式人生 > >大資料系列hive——jdbc

大資料系列hive——jdbc

目錄

一、簡介

配置

啟動

五、程式碼

一、簡介

       hive可以通過命令列執行hql,它也提供了相應的jdbc驅動,從而可以使用jdbc api進行程式碼的編寫。

二、HiveServer2

       hive的服務,只有開啟了hiveServer2,客戶端才能通過jdbc連線上hive

  • 配置

       修改hive-site.xml,其中相關的配置項如下

       hive.server2.thrift.min.worker.threads:最小的工作執行緒數

       hive.server2.thrift.max.worker.threads:最大的工作執行緒數

       hive.server2.thrift.port:thrift的埠號,預設為10000

       hive.server2.thrift.bind.host:thrift主機名

  • 啟動

        方式一:

       $HIVE_HOME/bin/hiveserver2

        方式二:

       $HIVE_HOME/bin/hive --service hiverserver2

三、Beeline

       Beeline是hive jdbc的客戶端,可以通過它來連線jdbc,並通過命令執行hql。我們可以用它來驗證是否可以連線上hive jdbc。

       Beeline的成功啟動需要如下條件

       1、MetaStore

       MetaStore預設在啟動hiveServer2時會自動啟動,手動啟動命令為$HIVE_HOME/bin/hive --service metastore &

       2、Hadoop

       3、HiveServer2

       啟動命令:$HIVE_HOME/bin/beeline

       連線jdbc命令:!connect jdbc:hive2:/ip或者主機名:埠號(預設為10000)

四、錯誤處理

       在執行!connect命令時有可能報如下錯誤

        解決辦法:

        修改hadoop的core-site.xml

<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

        重啟hadoop

五、程式碼

public class HiveDemo {

	private static String driveName = "org.apache.hive.jdbc.HiveDriver";
	
	private static String url = "jdbc:hive2://192.168.160.66:10000/default";
	
	public static void main(String[] args) {
		
		Connection conn = null;
		Statement statement = null;
		ResultSet result = null;
		
		try {
			
			Class.forName(driveName);
			conn = DriverManager.getConnection(url, "root", "");
			statement = conn.createStatement();
			String sql = "show tables";
			result = statement.executeQuery(sql);
			while(result.next()) {
				System.out.println(result.getString(1));
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			
			Optional
			.ofNullable(result)
			.ifPresent(r->{
				try {
					r.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			});
			
			Optional
			.ofNullable(statement)
			.ifPresent(s->{
				try {
					s.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			});
			
			Optional
			.ofNullable(conn)
			.ifPresent(c->{
				try {
					c.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			});
			
		}
	}
	
}