Apache Oozie 在创建 mysql DB 时抛出 classnotfound 异常

Posted

技术标签:

【中文标题】Apache Oozie 在创建 mysql DB 时抛出 classnotfound 异常【英文标题】:Apache Oozie throws classnotfound exception while creating mysql DB 【发布时间】:2014-04-02 11:29:52 【问题描述】:

我正在尝试将 mysql DB 与 apache OOzie 一起使用。 我的 $OOZIE_HOME 是 -bash: /opt/oozie_install/oozie-3.3.0-cdh4.2.2: 是目录

但我几乎在所有可能的地方都复制了 mysql-connector-java-5.1.29-bin.jar。 就像我在里面复制的一样

/opt/oozie_install/oozie-3.3.0-cdh4.2.2
/opt/oozie_install/oozie-3.3.0-cdh4.2.2/libs
/opt/oozie_install/oozie-3.3.0-cdh4.2.2/libtools
/usr/lib/jvm/jdk/libs
/user/home/hadoop/

但我仍然收到 ClassnotFoundException。

java.lang.Exception: Could not connect to the database: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:473)
        at org.apache.oozie.tools.OozieDBCLI.createDB(OozieDBCLI.java:179)
        at org.apache.oozie.tools.OozieDBCLI.run(OozieDBCLI.java:118)
        at org.apache.oozie.tools.OozieDBCLI.main(OozieDBCLI.java:64)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:190)
        at org.apache.oozie.tools.OozieDBCLI.createConnection(OozieDBCLI.java:462)
        at org.apache.oozie.tools.OozieDBCLI.validateConnection(OozieDBCLI.java:469)

我应该在哪里复制 Mysql 连接器。

我已经验证了我的 oozie-site.xml-

我按照以下步骤在 Oozie 中使用 mysql

我的 oozie 目录看起来像-

【问题讨论】:

【参考方案1】:

您必须将mysql-connector-java-5.1.29-bin.jar 复制到/opt/oozie_install/oozie-3.3.0-cdh4.2.2/libext 目录,然后重新启动oozie 实例。确保 mysql 用户 oozie 对数据库 oozie 有足够的权限,如果没有,请在 mysql 服务器中使用 grant 命令授予足够的权限。

【讨论】:

谢谢,但我没有目录名 libext ,我已经在 oozie-3.3.0-cdh4.2.2 中上传了我的 dir 扩展。 如果丢失,请创建该目录并尝试【参考方案2】:

我最终遇到了同样的问题,我通过编辑 oozie-env.sh 并在最后附加 JAVA_HOME 来解决它 export JAVA_HOME=/usr/local/jdk1.7 java_home 是你自己的javapath

【讨论】:

【参考方案3】:

我在将本地 Derby 实例转换为 MySql 时遇到了这个问题。我的问题和其他问题之间的区别在于我没有安装 RPM。我的 Oozie 实例是在 tar.gz 文件中预编译的。我不得不将 mysql-connector-java-bin.jar 复制到 oozie-server/lib 目录。这是除了将其复制到 lib、libext 和 libtools 目录之外。我不确定是否需要所有这些,但我知道启动 Oozie 需要 oozie-server/lib。希望这对某人有帮助!

【讨论】:

以上是关于Apache Oozie 在创建 mysql DB 时抛出 classnotfound 异常的主要内容,如果未能解决你的问题,请参考以下文章

Apache Oozie:Oozie调度shell脚本

Apache Oozie:Apache Oozie安装

Apache Oozie

oozie4.3.0+sqoop1.4.6实现mysql到hive的增量抽取

Apache Oozie学习笔记

选择 Apache Oozie 或 Apache Airflow 哪一个?需要比较