通過java連接hive1.0.0 讀取數據的時候(僞分佈式),
首先在hbase中已經有表flowSets,表的結構是一個列簇:flow;其中有一列爲bytes;啓動hive:hive -hiveconf hbase.master=master:60000
接下來創建表:create external table flowsets(key string, value string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = ":key,flow:bytes")
tblproperties ("hbase.table.name" = "flowSets");
如果建表語句發現超過key的最大字節數:765Byte,表示mysql的編碼有問題,該改爲utf8
此刻你進入hbase shell中發現多了一張表 ‘flowSets’
(可以先跳過這句話:hbase.table.name定義在hbase的table名稱,
多列時:data:1,data:2;多列族時:data1:1,data2:1;)
hbase.columns.mapping定義在hbase的列族,裏面的:key是固定值而且要保證在表pokes中的foo字段是唯一值
接下來
第一步,啓動hadoop和hbase;
第二步,通過命令:hive --service hiveserver2 啓動hive端
第三步,在eclipse中創建項目
需要導入的包如下:
代碼如下:package team.ujs.loganalysis.test;
import org.apache.hive.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HiveConnectionTest3 {
private static String driverName="org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException{
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con= DriverManager.getConnection("jdbc:hive2://121.248.220.107:10000/default","","");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("describe flowsets");
while(rs.next()){
System.out.println(rs.getString(1));
}
}
}
【注意:】如果不是jdbc:hive2的話,會報
運行成功之後: