java通过jdbc连接hive1.0.0(伪分布)的问题

通过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定义在hbasetable名称,

多列时:data:1data: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的话,会报

运行成功之后:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章