【问题标题】:How to fix "ImportError: No module name apache" error in Jython and HBase如何修复 Jython 和 HBase 中的“ImportError: No module name apache”错误
【发布时间】:2018-12-21 06:04:14
【问题描述】:

我正在尝试运行以下 Jython 代码来扫描 hbase 表:

    import java.lang
    from org.apache.hadoop.hbase import TableName, HBaseConfiguration
    from org.apache.hadoop.hbase.client import Connection, ConnectionFactory,         
    Result, ResultScanner, Table, Admin
    from org.apache.hadoop.conf import Configuration
    conf = HBaseConfiguration.create()
    connection = ConnectionFactory.createConnection(conf)
    admin = connection.getAdmin()
    tableName = TableName.valueOf('station')
    table = connection.getTable(tableName)
    cf = "stn"
    attr = "name"
    scanner = table.getScanner(cf)
    while 1:
         result = scanner.next()
         if not result:
            break
         print java.lang.String(result.row),   
         java.lang.String(result.getValue(cf, attr))

我正在使用以下命令来尝试运行它:

jython test1.py

但我收到以下错误:

Traceback (most recent call last):
  File "test1.py", line 2, in <module>
    from org.apache.hadoop.hbase import TableName, HBaseConfiguration
ImportError: No module named apache

我该如何解决这个问题?我已经在独立模式下安装了 hbase,它工作正常(使用 hbase shell 创建了一些示例表)。

更新: 按照 cmets 中的建议,我尝试了以下命令来运行它:

jython -Dpython.path=./hbase-1.4.8/lib/hbase-common-1.4.8.jar test1.py

我现在收到以下错误消息:

Traceback(最近一次调用最后一次):文件“test1.py”,第 2 行,在 从 org.apache.hadoop.hbase 导入 TableName,HBaseConfiguration java.lang.NoClassDefFoundError: org/apache/hadoop/io/RawComparator 在 org.apache.hadoop.hbase.NamespaceDescriptor.(NamespaceDescriptor.java:45) 在 org.apache.hadoop.hbase.TableName.(TableName.java:82) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:348) 在 org.python.core.Py.loadAndInitClass(Py.java:991) 在 org.python.core.Py.findClassInternal(Py.java:926) 在 org.python.core.Py.findClassEx(Py.java:977) 在 org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:133) 在 org.python.core.packagecache.PackageManager.findClass(PackageManager.java:33) 在 org.python.core.packagecache.SysPackageManager.findClass(SysPackageManager.java:122) 在 org.python.core.PyJavaPackage.findattr_ex(PyJavaPackage.java:134) 在 org.python.core.PyObject.findattr(PyObject.java:946) 在 org.python.core.imp.importFromAs(imp.java:1160) 在 org.python.core.imp.importFrom(imp.java:1132) 在 org.python.pycode._pyx0.f$0(test1.py:13) 在 org.python.pycode._pyx0.call_function(test1.py) 在 org.python.core.PyTableCode.call(PyTableCode.java:167) 在 org.python.core.PyCode.call(PyCode.java:18) 在 org.python.core.Py.runCode(Py.java:1386) 在 org.python.util.PythonInterpreter.execfile(PythonInterpreter.java:296) 在 org.python.util.jython.run(jython.java:362) 在 org.python.util.jython.main(jython.java:142) 引起:java.lang.ClassNotFoundException:org.apache.hadoop.io.RawComparator 在 org.python.core.SyspathJavaLoader.findClass(SyspathJavaLoader.java:131) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 22 更多

java.lang.NoClassDefFoundError: java.lang.NoClassDefFoundError: org/apache/hadoop/io/RawComparator

我该如何解决这个问题?

【问题讨论】:

    标签: hadoop hbase jython


    【解决方案1】:

    类路径中似乎缺少该库。默认情况下,jython.jar 仅包含 lib 目录中存在的默认 python mobules。任何第三方模块都需要添加到类路径中。

    您需要在库模块中添加hbase jar的引用,如下所示:

    jython -Dpython.path=/<location of jar>/hbase.jar test1.py
    

    另一种选择是:

    java -cp /<location of jar>/hbase.jar;jython.jar org.python.util.jython test1.py
    

    Jython 类路径应包含 HBASE 类路径以包含所有依赖项。

    更多详情请参考: https://hbase.apache.org/book.html#jython

    【讨论】:

    • 我没有 hbase.jar 。我尝试导入 hbase-common 但现在出现错误“无法导入名称表名”
    • 您仍然缺少 hbase 依赖项。您必须在 jython 类路径中引用所有 HBASE jar。我已经用链接更新了答案,您可以参考详细信息。
    • 我已经完成了 "export HBASE_CLASSPATH=/usr/local/lib/jython/jython.jar" 。我还有什么需要做的吗?
    • 设置 HBASE_CLASSPATH 将在您通过 bin/hbase org.python.util.jython 访问时有所帮助,但为了从 jython cli 运行,您需要传递 -cp=jar-path 或设置 export CLASSPATH=$CLASSPATH:hbase-jars-location
    • 我更新了我的帖子。我收到一条新的错误消息。我将非常感谢任何帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 2011-01-20
    • 2017-06-11
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多