hadoop com.mysql.jdbc.driver_MapReduce 程序mysql JDBC驱动类找不到原因及学习hadoop写入数据到Mysql数据库的方法...

报错 :ClassNotFoundException: com.mysql.jdbc.Driver

需求描述:

hadoop需要动态加载个三方jar包(比如mysql JDBC 驱动包),是在MR结束后,使用hadoop 的filesystem系统读取HDFS文件,调用JDBC驱动类插入数据库,但是运行时报错找不到驱动类。

第一个方法:加到HADOOP_HOME/lib下不可行,集群需要重启(集群再用,队列有任务进行中)。

第二个方法:job2.addFileToClassPath(file)和DistributedCache.addFileToClassPath()

以及利用hadoop jar xx.jar -libjars $yourpath/mysql-connector-java-5.0.3-bin.jar 这种原理上是一样的,

这种方式加入了Mapreduce的classpath(最后是加载到了每个节点 map container 或reduce container的JVM的classpath中),MR结束后通过filesystem调用JDBC,是不可行的,我的代码在Diver类中调用,即客户端拿不到这个类。

第三个方法:所有依赖三方包和MR程序打包到一个jar中,打包完接近180MB。jar包太大了。

第四个方法:依赖的第三方jar打包到lib中,本次任务不需要的jar包可以全删掉 (这里注意:工程的jar和集群jar版本不一致可能导致冲突)。可以运行,导出的lib也小。

总结一下:

1.报错Diver类里缺少三方包,扔到lib下(不是鼠标拖进lib目录下,是打包打进去)

2.报错Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值