gpt4 book ai didi

java - 终极版 : How do I get Jython to use Python modules stored in Lib within its own jar file when running in Hadoop?

转载 作者:太空狗 更新时间:2023-10-29 17:08:51 25 4
gpt4 key购买 nike

我正在尝试使用 Jython 在 Hadoop 1.2.1 中实现。除了过时的项目(如 code.google.com/p/happy)和 $HADOOP_HOME/src/examples/python/WordCount.py 中的过时实现之外,我很少看到关于 Jython+Hadoop 的信息,所以也许我一开始就找错了树……但这似乎是合理且可能的。我也非常了解 Hadoop Streaming,通过它我可以在 Hadoop 中使用 Python 而无需使用 Jython,但这不是我在这里想要做的。

基本上,当我使用 java -jar/full/path/to/myjythonjar.jar 调用嵌入式/独立 Jython jar 文件时,/full/path/to/myjythonjar. jar/Lib 在我的 Python sys.path 中,但是当我使用 bin/hadoop jar/full/path/to/myjythonjar.jar 输入输出 调用时...jar/Lib 不在我的路径中,脚本找不到我正在引用的 Python 模块。

这是我正在做的...

我正在使用 Jython jar 的独立版本,并使用 JarRunner 接口(interface),大致如描述的那样 on SO here和其他地方;基本如下:

 cp jython-standalone-2.7-b1.jar jythonsalib_test.jar  
jar ufe jythonsalib_test.jar org.python.util.JarRunner __run__.py

也就是说,获取独立 jar 的副本,添加名为 __run__.py 的我的脚本,并更改​​ list 以执行 JarRunner - 非常感谢@ Frank Wierzbicki 为那颗 gem 。

当我直接运行时,一切正常,例如,

java -jar jythonsalib_test.jar

我的 sys.path 报告它包含 '/full/path/to/jar/file/jythonsalib_test.jar/Lib',这正是我所期望的,这是我从中获取 Python 模块的路径(通过将 sys.path 设置为空列表(失败)并且仅该路径(有效)进行了经验测试)。

当我在 Hadoop 中运行同一个 jar 时,例如

bin/hadoop jar /full/path/to/jar/file/jythonsalib_test.jar input output

sys.path 只包含

['__classpath__', '__pyclasspath__']

我还使用了 Jython 独立 jar 版本 2.5.4-rc1(具有与上述相同的行为)和 2.5.3(由于不相关的原因对我不起作用)。

正如其他 SO 答案所指出的,我目前使用的解决方法基本上是直接在 Jython 脚本中添加我的 jar 的 Lib 目录,如

import sys
sys.path.append('/full/path/to/jar/file/jythonsalib_test.jar/Lib')

这基本上是有效的——但这是一个分布式应用程序!没有我可以以这种方式引用的路径。其他 SO 文章提出了各种机制,但基本上都是通过上面的 Python、Java 或 Jython 安装或 Jython“注册表”(启动/rc)文件添加到库路径(同样,没有链接,因为我有 <10rep)。当然,我可以使用 HDFS 或引导机制或其他机制将某些东西分发到计算节点,例如 jar 或 Jython 或其他任何东西,但是代码已经在 jar 中了!所以我不需要再次分发它,单独...

因此,总而言之:看起来我需要在一个可以直接单独引用包含 Python 模块的 jar 文件的文件系统上。 (类似于旧的 java -jar jythonjar.jar -jar jythonjar.jar)我如何说服嵌入式独立 Jython jar 始终使用位于Jar 文件,而不单独指向(可能相同的)jar 文件?

或者:如何添加到当前 jar 文件的相对路径链接...?或者我错过了一些关于 Hadoop 或 Jython 或 Java 或...的更隐蔽和基本的东西?

我有很多链接,但 SO 告诉我我只能有 两个 链接,因为我是新来的。我希望有一天能获得足够的代表能够真正为这个奇妙的网站做出贡献! :)

无论如何。 LTWFTW -- 长期观察者,第一次写作 -- 非常感谢!

最佳答案

我想知道用 OneJar 打包您的应用程序是否会有所改善。请尝试并报告。我只是在黑暗中拍摄。

关于java - 终极版 : How do I get Jython to use Python modules stored in Lib within its own jar file when running in Hadoop?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23279091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com