我正在尝试运行以下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
我现在收到以下错误消息:
trackback(最近的最新呼叫):文件" test1.py",第2行 来自org.apache.hadoop.hbase导入tablename,hbaseconfiguration java.lang.noclassdeffounderror:org/apache/hadoop/io/awarcomparator at rog.apache.hadoop.hbase.namespacedescriptor。 atrg.apache.hadoop.hbase.tablename。(tableName.java:82) 在java.lang.class.forname0(本机方法) 在java.lang.class.forname(class.java:348) atrg.python.core.py.py.polanitclass(py.java:991) 在org.python.core.py.findclassinternal(py.java:926) 在org.python.core.py.findclassex(py.java:977) atrg.python.core.packagecache.syspackagemanager.findclass(syspackagemanager.java:133) atorg.python.core.core.packagecache.packagemanager.findclass(packagemanager.java:33) atrg.python.core.packagecache.syspackagemanager.findclass(syspackagemanager.java:122) atorg.python.core.pyjavapackage. findattr_ex (pyjavapackage.java:134) atorg.python.core.pyobject。 findattr (pyobject.java:946) 在org.python.core.imp.importfromas(imp.java:1160) 在org.python.core.imp.importfrom(imp.java:1132) atorg.python.pycode._pyx0.f $ 0(test1.py:13) atorg.python.pycode._pyx0.call_function(test1.py) atrg.python.core.pytablecode.call(pytablecode.java:167) atrg.python.core.pycode.call(pycode.java:18) 在org.python.core.py.runcode(py.java:1386) atrg.python.util.pythoninterpreter.execfile(pythoninterpreter.java:296) 在org.python.util.jython.run(jython.java:362) atorg.python.util.jython.main(jython.java:142)造成: atrg.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
如何解决此问题?
似乎库中的库中缺少了库。默认情况下,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 classpath应该包括HBase classpath以包括所有依赖关系。
有关更多详细信息,请参考:https://hbase.apache.org/book.html#jython