hive利用udf函数直接将统计结果导入mysql的方法详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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用户连接,不知道是不是这个原因就不得而知了。