hive利用udf函数直接将统计结果导入mysql的方法详解

更新时间:2023-11-24 14:32:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

如何把hive中的数据导入到mysql中去,方法很多,在网上找到一个用udf函数直接把hive中数据导入到mysql中去,按照网上的例子操作了很久也没有导入成功,甚是捉急。。。。。

1、使用udf函数导数据到mysql需要两个jar包 在hive>提示符中:

Hive>add jar /home/hadoop/hive/lib/hive-contrib-0.13.1.jar; 。。。。。。。此去省略执行提示N个字

Hive>add jar /home/hadoop/hive/lib/mysql-connector-java-5.1.17.jar; 。。。。。。。此去省略执行提示N个字

2、为udf函数命名别名红色的字体dboutput,使用起来就方便点 hive>create temporary function dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput';

3、开始导入 Hive>select dboutput('jdbc:mysql://192.168.199.1:3306/dbtest','root','123456','INSERT INTO ep(tid,tname) VALUES (?,?)',tid,tname) from ttv;

----这里只是测试,所以 from ttv 后面没带条件也没限制记录数,真实环境就不说了 ----ep为mysql中的表,ttv为hive中的表

4、导入时,你会发现执行失败,有错误冒出:java.io.FileNotFoundException: File does not exist: hdfs://mymast:9000/home/hadoop/hive/lib/hive-contrib-0.13.1.jar ,这个就是上面第1条需要增加的两个jar包之一,这个错很明显,就是在hdfs上找不到jar包,马上在hdfs上创建home/hadoop/hive/lib目录,然后把两个jar都扔进去,错误就解决了。

5、解决错误继续导入:

Hive>select dboutput('jdbc:mysql://192.168.199.1:3306/dbtest','root','123456','INSERT INTO ep(tid,tname) VALUES (?,?)',tid,tname) from ttv;

结果提示任务执行倒是成功了,但是状态码为2,表示导入失败,为0才表示导入成功,又捉急了,在网上找了很久找不到答案。。。。。。一个小时在百度上过去了,抱着试试的心态,想了一下元数据连接名称是hive,是不是用hive可以呢?立马改为hive :

Hive>select dboutput('jdbc:mysql://192.168.199.1:3306/dbtest','hive','123456','INSERT INTO ep(tid,tname) VALUES (?,?)',tid,tname) from ttv;

执行结果:

看到0之 后,马上查询mysql :

使用root不行,使用hive就可以,还没弄明白,由于本例的hive的元数据是使用mysql,并且使用hive用户连接,不知道是不是这个原因就不得而知了

本文来源:https://www.bwwdw.com/article/u5zt.html

Top