前面我分别介绍了两种Hive将分析结果导入到MySQL表的两种方式:Sqoop导入方式和使用Hive、MySQL JDBC驱动,现在我介绍第三种,也是使用比较多的方式——使用Hive 自定义函数(UDF或GenericUDF)将每条记录插入到数据库表中。
一、使用UDF方式
使用UDF方式实现比较简单,只要继承UDF类,并重写evaluate方法即可
1、编写实现类
package com.gxnzx.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import com.gxnzx.hive.util.DBSqlHelper;
public class AnalyzeStatistics extends UDF{
public String evaluate(String clxxbh,String hphm){
//jtxx2数据库为目标数据库表
String sql="insert into jtxx2 values(?,?)";
//往数据库中插入记录
if(DBSqlHelper.addBatch(sql, clxxbh, hphm)){
return clxxbh+" SUCCESS "+hphm;
}else{
return clxxbh+" faile "+hphm;
}
}
}
2、数据库操作方法
public static boolean addBatch(String sql,String clxxbh,String hphm){
boolean flag=false;
try{
conn=DBSqlHelper.getConn(); //打开一个数据库连接
ps=(PreparedStatement) conn.prepareStatement(sql);
ps.setString(1, clxxbh);
ps.setString(2, hphm);
System.out.println(ps.toString());
ps.execute();
flag=true;
}catch(Exception e){
e.printStackTrace();
}finally{
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return flag;
}
3、使用eclipse将该项目包打成jar包导入到hive类环境中
hive> add jar hiveudf2.jar
4、将MySQL JDBC驱动包导入hive 类环境中
hive> add jar /home/hadoopUser/cloud/hive/apache-hive-0.13.1-bin/lib/mysql-connector-java-5.1.18-bin.jar
5、创建hive 临时函数
hive> create temporary function analyze as 'com.gxnzx.hive.udf.AnalyzeStatistics';
6、测试
hive> select a