【问题标题】:teradata export from hive to teradata class not found未找到从 hive 到 teradata 类的 teradata 导出
【发布时间】:2015-07-17 23:57:07
【问题描述】:

我正在尝试使用 TDCH 连接器从 hive 表导出到 teradata,但出现以下错误:-

15/05/07 08:01:03 INFO tool.ConnectorExportTool: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/metastore/api/MetaException
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Class.java:190)
            at com.teradata.connector.common.tool.ConnectorJobRunner.runJob(ConnectorJobRunner.java:81)
            at com.teradata.connector.common.tool.ConnectorExportTool.run(ConnectorExportTool.java:61)
            at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
            at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
            at com.teradata.hadoop.tool.TeradataExportTool.main(TeradataExportTool.java:24)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
            at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.metastore.api.MetaException
            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 java.lang.ClassLoader.loadClass(ClassLoader.java:358)
            ... 13 more

我从错误中了解到 hive-metastore jar 丢失。但它已经存在于 hive/lib 文件夹中

 hive-metastore.jar -> hive-metastore-0.9.0.jar

路径中已经存在:/usr/hdp/2.2.4.2-2/hive/lib

【问题讨论】:

    标签: teradata


    【解决方案1】:

    问题是org/apache/hadoop/hive/metastore/api/MetaException 类不适用于java runtime。你能确保 Jar 在有效的runtime classpath 之下吗?

    很少有尝试可以尝试通过 -cp 将类路径显式传递给 jvm,或者您可以尝试将 jar 放入启动目录以确保其存在。

    【讨论】:

      【解决方案2】:

      您必须定义环境变量 LIB_JARS 和 HADOOP_CLASSPATH。 您可以将环境变量 LIB_JARS 与参数 -libjars 一起使用

      您可以在https://developer.teradata.com/sites/all/files/Teradata%20Connector%20for%20Hadoop%20Tutorial%20v1%200%20final.pdf 下找到示例。

      根据自述文件,以下 jars 是必需的:

          Hive Job(version 0.11.0 as example):
               a) hive-metastore-0.11.0.jar
               b) hive-exec-0.11.0.jar
               c) hive-cli-0.11.0.jar
               d) libthrift-0.9.0.jar
               e) libfb303-0.9.0.jar
               f) jdo2-api-2.3-ec.jar
               g) slf4j-api-1.6.1.jar
               h) datanucleus-core-3.0.9.jar
               i) datanucleus-rdbms-3.0.8.jar
               j) commons-dbcp-1.4.jar
               k) commons-pool-1.5.4.jar
               l) antlr-runtime-3.4.jar
               m) datanucleus-api-jdo-3.0.7.jar
      
          HCatalog Job:
               a) above Hive required jar files
               b) hcatalog-core-0.11.0.jar
      

      【讨论】:

        【解决方案3】:

        有时,您的“lib”文件夹中可能包含所有 jar 文件,但由于某些原因,Oozie 可能不会读取它,因为您的 job.properties 或 coordinator.properties 中有错字。仔细检查您的属性文件。

        “job.properties”文件应如下所示 -

        oozie.use.system.libpath=true
        oozie.wf.application.path=${nameNode}/apps/myapp/workflow/
        

        “coordinator.properties”文件应如下所示 -

        oozie.use.system.libpath=true
        oozie.coord.application.path=${nameNode}/apps/myapp/workflow/
        

        你的“lib”文件夹应该在 -

        /apps/myapp/workflow/lib
        

        【讨论】:

          猜你喜欢
          • 2016-11-15
          • 2013-01-09
          • 1970-01-01
          • 2015-07-25
          • 2018-01-16
          • 2015-09-12
          • 1970-01-01
          • 2015-03-20
          • 2016-11-15
          相关资源
          最近更新 更多