JAVA编写hive的mr_HIVEjdbc搭建

1. 开启hive的远程连接

// 即使关闭当前会话但进程不会结束

nohup hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10010 &

2. 导入jar包

3. 代码详解

code

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class HiveUtil {

private Statement statement = null;

// HiveUtil实例化时会自动打开连接并导入自定义方法udf

public HiveUtil() {

open();

Init();

}

// 初始化udf自定义方法包(当连接断开时,方法会自动失效),若有新的方法可在后面新增执行语句

private void Init() {

try {

statement.execute("add jar /home/bigdata/udf.jar");

statement.execute("create temporary function sub as 'com.yulang.udf.SubString'");

statement.execute("create temporary function jsonParse as 'com.yulang.udf.JsonParse'");

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

static {

try {

// 1.加载驱动

Class.forName("org.apache.hive.jdbc.HiveDriver");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private void open() {

try {

// 2.打开连接

Connection connection = DriverManager.getConnection("jdbc:hive2://HADOOP01:10010/");

// 3.获得操作对象 - 会话

statement = connection.createStatement();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 创建数据库 - 用户注册时调用

* @param databaseName 根据用户标识生成的数据库名称

*/

public void createDatabase(String databaseName) {

try {

statement.execute("create database " + databaseName);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 切换数据库 - 只对当前会话有效

* @param databaseName 目标数据库名称

*/

public void changeDatabase(String databaseName) {

try {

statement.execute("use " + databaseName);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 获得当前数据库中的数据列表 - 注意切换数据库

* @return 数据表名称的集合

*/

public List getTaleList() {

List list = new ArrayList<>();

try {

ResultSet rs = statement.executeQuery("show tables");

while (rs.next()) {

list.add(rs.getString(1));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

/**

* 获得数据表的简要信息

* @param tableName 数据表名称

* @return 列名及列的数据类型

*/

public List getTableInfo(String tableName){

List list = new ArrayList<>();

try {

ResultSet rs = statement.executeQuery("desc " + tableName);

while (rs.next()) {

list.add(rs.getString(1) + "\t" + rs.getString(2));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

/**

* 获取数据表前十条的预览数据

* @param tableName 数据表名称

* @return 数据表预览数据

*/

public List getTableData(String tableName){

List list = new ArrayList<>();

try {

int size = getTableInfo(tableName).size();

ResultSet rs = statement.executeQuery("select * from " + tableName +" limit 10");

while (rs.next()) {

String line = "";

for(int i = 1;i <= size;i ++) {

line += rs.getString(i) + "\t";

}

list.add(line);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

/**

* 获得查询sql执行后的返回结果

* @param sql 用户自定义sql

* @return sql执行结果集中的所有数据

*/

public List getResultData(String sql) {

List list = new ArrayList<>();

try {

String tableName = "tmp_table";

sql = "create table " + tableName + " as " + sql;

// 执行建表语句

statement.execute(sql);

// 通过查询方法获取到新建表的数据

list = getTableData("tmp_table");

// 使用完临时表后drop临时表

statement.execute("drop table "+ tableName);

} catch (SQLException e) {

e.printStackTrace();

list = null;

}

return list;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值