分享

求教Hive使用UDF将查询结果导入MySQL中,为什么总是多出两条记录?

NIITYZU 发表于 2015-4-23 10:27:12 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 14662
本帖最后由 NIITYZU 于 2015-4-23 10:27 编辑

    我使用Hive UDF将Hive查询结果导入到MySQL中,但是Hive CLI 明明显示的是10条记录,到了MySQL中后却多出两条记录,还不报错误,请问有人遇到过这个问题吗?
    我的UDF处理类如下:
  1. public class AnalyzeStatistics  extends UDF{
  2.         public String evaluate(String clxxbh,String hphm){
  3.                 String sql="insert into jtxx2 values(?,?)";
  4.                 //调用数据库添加方法
  5.                 if(DBSqlHelper.addBatch(sql, clxxbh, hphm)){
  6.                         return clxxbh+"  SUCCESS  "+hphm;
  7.                 }else{
  8.                         return clxxbh+"  faile  "+hphm;
  9.                 }
  10.         }
  11. }
复制代码
MySQL数据库添加方法
  1.    public static boolean addBatch(String sql,String clxxbh,String hphm){
  2.                   boolean flag=false;
  3.                   try{
  4.                           conn=DBSqlHelper.getConn();
  5.                           //conn.setAutoCommit(flag);
  6.                           ps=(PreparedStatement) conn.prepareStatement(sql);
  7.                           ps.setString(1, clxxbh);
  8.                           ps.setString(2, hphm);
  9.                           //ps.executeBatch();
  10.                          // conn.commit();
  11.                           ps.executeUpdate();
  12.                           flag=true;
  13.                   }catch(Exception e){
  14.                           e.printStackTrace();
  15.                   }finally{
  16.                           try {
  17.                                 ps.close();
  18.                         } catch (SQLException e) {
  19.                                 // TODO Auto-generated catch block
  20.                                 e.printStackTrace();
  21.                         }
  22.                   }
  23.                  return flag;
  24.           }
复制代码

运行结果:
Hive CLI界面结果:(analyze是我创建的一个临时的函数指向上面的UDF,界面结果明明是10条数据
  1. hive> select analyze(clxxbh,hphm) from transjtxx_hbase limit 10;
  2. Total jobs = 1
  3. Launching Job 1 out of 1
  4. Number of reduce tasks is set to 0 since there's no reduce operator
  5. Starting Job = job_1428394594787_0034, Tracking URL = http://secondmgt:8088/proxy/application_1428394594787_0034/
  6. Kill Command = /home/hadoopUser/cloud/hadoop/programs/hadoop-2.2.0/bin/hadoop job  -kill job_1428394594787_0034
  7. Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
  8. 2015-04-23 10:15:34,355 Stage-1 map = 0%,  reduce = 0%
  9. 2015-04-23 10:15:51,032 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 7.14 sec
  10. MapReduce Total cumulative CPU time: 7 seconds 140 msec
  11. Ended Job = job_1428394594787_0034
  12. MapReduce Jobs Launched:
  13. Job 0: Map: 1   Cumulative CPU: 7.14 sec   HDFS Read: 256 HDFS Write: 532 SUCCESS
  14. Total MapReduce CPU Time Spent: 7 seconds 140 msec
  15. OK
  16. 32100017000000000220140317000015  SUCCESS  鲁Q58182
  17. 32100017000000000220140317000016  SUCCESS  鲁QV4662
  18. 32100017000000000220140317000019  SUCCESS  苏LL8128
  19. 32100017000000000220140317000020  SUCCESS  苏CAH367
  20. 32100017000000000220140317000023  SUCCESS  鲁Q7899W
  21. 32100017000000000220140317000029  SUCCESS  苏HN3819
  22. 32100017000000000220140317000038  SUCCESS  鲁C01576
  23. 32100017000000000220140317000044  SUCCESS  苏DT9178
  24. 32100017000000000220140317000049  SUCCESS  苏LZ1112
  25. 32100017000000000220140317000052  SUCCESS  苏K9795警
  26. Time taken: 35.815 seconds, Fetched: 10 row(s)
复制代码
而MySQL数据库对应的却是12条数据,如下:
  1. mysql> select * from jtxx2;
  2. +----------------------------------+-------------+
  3. | cllxbh                           | hphm        |
  4. +----------------------------------+-------------+
  5. | 32100017000000000220140317000015 | 鲁Q58182    |
  6. | 32100017000000000220140317000016 | 鲁QV4662    |
  7. | 32100017000000000220140317000019 | 苏LL8128    |
  8. | 32100017000000000220140317000020 | 苏CAH367    |
  9. | 32100017000000000220140317000023 | 鲁Q7899W    |
  10. | 32100017000000000220140317000029 | 苏HN3819    |
  11. | 32100017000000000220140317000038 | 鲁C01576    |
  12. | 32100017000000000220140317000044 | 苏DT9178    |
  13. | 32100017000000000220140317000049 | 苏LZ1112    |
  14. | 32100017000000000220140317000052 | 苏K9795警   |
  15. | 32100017000000000220140317000056 | 黑BF7222    |
  16. | 32100017000000000220140317000108 | 辽H39290    |
  17. +----------------------------------+-------------+
  18. 12 rows in set (0.00 sec)
复制代码
多出来最后两条,请问是我的代码有问题,还是哪里出错了?

已有(1)人评论

跳转到指定楼层
jixianqiuxue 发表于 2015-4-23 11:33:51
没有发现什么问题。
建议楼主,把addBatch打印下看看。
最好能把通过hive提取的数据能够做个标记。以免跟以前的数据产生混肴
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条