写了一个mapreduce程序,使用DBInputFormat和DBOutputFormat读写mysql,本地运行正常,将程序打成jar包上传到yarn集群上面运行,一直报mysql的驱动类找不到,添加--libjars或者job.addFileToClassPath()都不行,但是mysql的驱动明明已经打到jar包里面了.
你好,请问你的mysql驱动是否放在打在WEB-INF文件夹下了,看你本地运行没问题,驱动版本肯定也没问题,主要还是打包的问题。
在运行 MapReduce 程序时,如果使用了 DBInputFormat 或 DBOutputFormat 连接 MySQL 数据库,需要将 MySQL 驱动程序添加到 MapReduce 程序的 Classpath 中。如果已经将 MySQL 驱动程序打包到了 Jar 包中,但是在运行时仍然找不到驱动程序,可能是由于以下原因:
Jar 包中的 MySQL 驱动程序不是标准的 Java 类库文件。请确保 Jar 包中的驱动程序是正确的 Java 类库文件,或者尝试使用其他版本的 MySQL 驱动程序。
MySQL 驱动程序没有被正确地加载到 Classpath 中。可以尝试将 MySQL 驱动程序的路径添加到 Hadoop 的 Classpath 中,或者在启动 MapReduce 程序时使用 -libjars 选项将 MySQL 驱动程序添加到 Classpath 中。如果使用了 Oozie 等 MapReduce 调度工具,还需要将 MySQL 驱动程序添加到调度工具的 Classpath 中。
MySQL 驱动程序和 Hadoop 版本不兼容。请确保使用的 MySQL 驱动程序和 Hadoop 版本兼容。可以尝试使用其他版本的 MySQL 驱动程序或 Hadoop。
MySQL 数据库没有启动或配置错误。请确保 MySQL 数据库已经正确地配置,并且可以被 MapReduce 程序正确地访问。
不知道你这个问题是否已经解决, 如果还没有解决的话:mysql> select * from output;
+-----------+-------+
| name | count |
+-----------+-------+
| archana | 2 |
| XYZ | 1 |
+----------+--------+
我把mysql的驱动包放在hadoop common包下,重启hadoop,就正常运行了 但是在代码里面设置将mysql驱动包添加到classpath job. addArchiveToClassPath job.addFileToClassPath 下却不起作用。