Hadoop “如何修复”;ImportError:没有模块名apache“;Jython和HBase中的错误
我正在尝试运行以下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
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
。我已经更新了我的帖子。我收到一条新的错误消息。我将非常感谢任何帮助。