我正在尝试运行以下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创建了一些示例表)。
更新: 如注释中所建议,我尝试了以下命令来运行它:
jython -Dpython.path =。/ hbase-1.4.8 / lib / hbase-common-1.4.8.jar test1.py
我现在收到以下错误消息:
回溯(最近一次通话最近):文件“ 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
我该如何解决?
答案 0 :(得分:1)
似乎类路径中缺少该库。默认情况下,jython.jar仅包含lib
目录中存在的默认python脚本。任何第三方模块都需要添加到类路径中。
您需要在库模块中添加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