前提:
linux环境ip:192.168.9.228
已经在linux环境上部署好了hadoop+hive环境,具体介绍上一篇文章有相关介绍,可以参考下,此篇主要介绍如果在本机windows环境下通过eclipse写程序连接linux服务上的hive,并进行相关查询操作
1:首先在228的linux的hive的bin目录hive --service hiveserver 50031 & 启动hive的服务端环境;
2:然后打开本机windows环境打开eclipse,新建一个工程hive,并导入hive的lib目录下的jar和hadoop目录下的jar,然后新建一个classs类HiveTestCase,代码如下:
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class HiveTestCase {
public static void main(String[] args) throws Exception {
Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
String dropSQL="drop table javabloger";
String createSQL="create table javabloger (key int, value string) row format delimited fields terminated by '\t'";
//hive插入数据支持两种方式一种:load文件,令一种为从另一个表中查询进行插入(感觉这是个鸡肋)
//hive是不支持insert into...values(....)这种操作的
String insterSQL="LOAD DATA LOCAL INPATH '/home/yf/files/kv1.txt' OVERWRITE INTO TABLE javabloger ";
String querySQL="SELECT a.* FROM javabloger a";
Connection con = DriverManager.getConnection("jdbc:hive://192.168.9.228:50031/default", "", "");
Statement stmt = con.createStatement();
stmt.executeQuery(dropSQL); // 执行删除语句
stmt.executeQuery(createSQL); // 执行建表语句
stmt.executeQuery(insterSQL); // 执行插入语句
ResultSet res = stmt.executeQuery(querySQL); // 执行查询语句
while (res.next()) {
System.out.println("Result: key:"+res.getString(1) +" –> value:" +res.getString(2));
}
}
}
然后在228的linux服务器上创建/home/yf/files/kv1.txt文件,并填入如下内容:
1 a
2 b
3 c
4 d
注:1列与2列数据之间以tab键隔开,然后保存。
最后在HiveTestCase类中通过右键选Run As =》Application执行,输出如下内容说明连接hive成功,并成功查询相关数据结果!
Result: key:1 –> value:a
Result: key:2 –> value:b
Result: key:3 –> value:c
Result: key:4 –> value:d
实现相关数据的录入、查询、删除操作。
注意要导入hadoop的jar包,否则会报NoClassDefFoundError: org/apache/hadoop/io/Writable异常。