
今天同事给推荐了一个利用udf函数直接将统计结果导入mysql的方法。
步骤为
hive>add jar /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar
Added /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar to class path
Added resource: /usr/lib/hive/lib/hive-contrib-0.9.0-cdh4.1.2.jar
hive>add jar /usr/share/java/mysql-connector-java-5.1.17.jar
Added /usr/share/java/mysql-connector-java-5.1.17.jar to class path
Added resource: /usr/share/java/mysql-connector-java-5.1.17.jar
hive>CREATE TEMPORARY FUNCTION dboutput AS 'org.apache.hadoop.hive.contrib.genericudf.example.GenericUDFDBOutput'
hive>select dboutput('jdbc:mysql://localhost/result','root','123456','INSERT INTO dc(code,size) VALUES (?,?)',code,size) from accesslog limit 10
注:result为mysql数据库名,dc为数据库result中的表名 dc(code,size)括号中的字段为mysql表dc字段,values(?,?)对应hive统计结果的值 后面的code,size为hive表中的字段,accesslog表示hive中的表名称。
通过以上步骤即可将hive统计结果直接导入到mysql数据库中。
不知道你是如何赋权的,一般要让部署Hive的机器有对Mysql的访问权限,比如:create database
hive_metastore
grant
all on hive_metastore.* to hive@'172.16.221.221' identified by 'hive' WITH GRANT OPTION
flush privileges
我也碰到同样问题,测试场景:MYSQL有主键约束,而HIVE数据重复,HIVE到MYSQL过程中出现僵死(未查看详细日志,必然报SQL错误),最后手动杀掉执行进程的。
此现象直接导致程序无法结束(也会因为可能存在异常而去实时检测LOG),如果在执行过程中产生异常时SQOOP能自动退出、或获取错误堆栈就好了,可惜啊
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)