通过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的话,会报
运行成功之后: