一.Hive的Java客户端

JDBC工具类:JDBCUtils.java

package demo.jdbc;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; //工具类:(1)获取数据库的链接 (2)释放数据库资源
public class JDBCUtils { //Hive驱动
private static String driver = "org.apache.hive.jdbc.HiveDriver"; //Hive的位置
private static String url = "jdbc:hive2://192.168.153.11:10000/default"; //注册数据库的驱动:Java的反射
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
} //获取数据库链接
public static java.sql.Connection getConnection(){
try {
return DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
} //释放资源
public static void release(java.sql.Connection conn,Statement st,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
} if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
} if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}

DemoTest.java

package demo.jdbc;

import java.sql.ResultSet;
import java.sql.Statement; public class DemoTest { public static void main(String[] args) {
String sql = "select * from emp1"; java.sql.Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
//得到SQL的运行环境
st = conn.createStatement();
//ִ执行SQL
rs = st.executeQuery(sql); while (rs.next()) {
//姓名 薪水
String name = rs.getString("ename");
double sal = rs.getDouble("sal");
System.out.println(name + "\t" +sal);
}
}catch(Exception e){
e.printStackTrace();
}finally {
JDBCUtils.release(conn, st, rs);
}
}
}

启动HiveServer:hiveserver2,会报错:

java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException:User:
root is not allowed to impersonate anonymous
在老版本的Hive中,是没有这个问题的

解决:

把Hadoop HDFS的访问用户(代理用户) ---> *
core-site.xml

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property> <property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

二.Hive的自定义函数

例子:

1.concat 拼加两个字符串

package udf;

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* 实现关系型数据库中的concat函数:拼加字符串
* 需要继承的类:UDF
*
*/
public class MyConcatString extends UDF{ //必须重写一个方法,方法名叫: evaluate
public String evaluate(String a,String b){
return a + "*************"+b;
}
}

2.判断员工工资的级别

package udf;

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* 根据员工薪水判断级别
*
*/
public class CheckSalaryGrade extends UDF{
public String evaluate(String salary){
int sal = Integer.parseInt(salary); if (sal<1000) {
return "Grade A";
}else if (sal>=1000 && sal<3000) {
return "Grade B";
}else {
return "Grade C";
}
}
}

3、打包
将jar包加入hive的classpath
在hive命令行执行:add jar /root/temp/myudf.jar;

创建别名(函数名称)
create temporary function myconcat as 'demo.udf.MyConcatString';
create temporary function checksal as 'demo.udf.CheckSalaryGrade';

结果:

最新文章

  1. 设计模式C#实现(十)——桥接模式
  2. Css-控制div斜转
  3. 【福利将至】iPhone用户可用Siri发微信了
  4. Redis在Windows环境下搭建
  5. Android微信支付SDK开发笔记
  6. [改善Java代码]不要随便设置随机种子
  7. 使用GitHub进行协同项目开发和开源项目贡献
  8. 3proxy代理软件文档说明
  9. django中使用json.dumps处理数据时,在前台遇到字符转义的问题
  10. Oracle的三种高可用集群方案
  11. 在地图中使用Java
  12. webmagic爬取渲染网站
  13. java里程碑之泛型--泛型注意的几点
  14. jmeter报错:内存溢出
  15. import、export使用介绍
  16. ORACLE 定时运行存储过程经常使用时间间隔
  17. zw版【转发&#183;台湾nvp系列Delphi例程】HALCON Roberts2
  18. POJ 1083
  19. 转 shell 命令 http://www.cnblogs.com/me115/p/3427319.html
  20. 新建用户组、用户、用户密码、删除用户组、用户(适合CentOS、Ubuntu系统)

热门文章

  1. for语句与if语句嵌套的简单应用
  2. 删除MicrosoftOffice2016的扫尾工作
  3. 数组转字符串 java8
  4. asp.net获取访问者ip地址的函数
  5. Java语言的发展历程
  6. P3158 [CQOI2011]放棋子(dp+组合数)
  7. letsencrypt 免费SSL证书申请, 自动更新
  8. SQL SERVER将多行数据合并成一行(转)
  9. PAT Advanced 1007 Maximum Subsequence Sum (25 分)
  10. MASM DEBUG LINKER免费下载