大資料系列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();
}
});
}
}
}