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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何把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用户连接,不知道是不是这个原因就不得而知了

相关文档
最新文档