Hadoop “如何修复”;ImportError:没有模块名apache“;Jython和HBase中的错误

Hadoop “如何修复”;ImportError:没有模块名apache“;Jython和HBase中的错误,hadoop,hbase,jython,Hadoop,Hbase,Jython,我正在尝试运行以下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

我正在尝试运行以下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
回溯(最近一次呼叫最后一次):
文件“test1.py”,第2行,在
从org.apache.hadoop.hbase导入表名,HBaseConfiguration
ImportError:没有名为apache的模块
我如何解决这个问题?我已经在独立模式下安装了hbase,它工作正常(使用hbase shell创建了几个示例表)

更新: 正如评论中所建议的,我尝试了以下命令来运行它:

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

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

回溯(最近一次调用last):文件“test1.py”,第2行,在 从org.apache.hadoop.hbase导入表名,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\u 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.\u pyx0.f$0(test1.py:13) 在org.python.pycode.\u pyx0.call\u函数(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/rawcomarator


如何解决此问题?

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

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

jython -Dpython.path=/<location of jar>/hbase.jar test1.py
jython-Dpython.path=//hbase.jar test1.py
另一个选择是:

java -cp /<location of jar>/hbase.jar;jython.jar org.python.util.jython test1.py
java-cp//hbase.jar;jython.jar org.python.util.jython test1.py
Jython类路径应包含HBASE类路径,以包含所有依赖项

有关详情,请参阅:

我没有hbase.jar。我尝试导入hbase common,但现在出现错误“无法导入名称TableName”。您仍然缺少hbase依赖项。您必须引用jython类路径中的所有HBASE jar。我已经用一个链接更新了答案,您可以参考以了解详细信息。我已经完成了“export HBASE_CLASSPATH=/usr/local/lib/jython/jython.jar”。还有什么我必须做的吗?当您通过
bin/HBASE org.python.util.jython
访问时,设置HBASE\u类路径会有所帮助,但是为了从jython cli运行,您需要传递
-cp=jar path
或设置
导出类路径=$CLASSPATH:HBASE jars location
。我已经更新了我的帖子。我收到一条新的错误消息。我将非常感谢任何帮助。