如何将日志记录到控制台(python中嵌入的pig)

sy5wg1nm  于 2021-06-25  发布在  Pig
关注(0)|答案(2)|浏览(426)

我目前正在玩将pig嵌入python的游戏,每当我运行文件时,它都可以工作,但是它会用如下输出阻塞命令行:


* sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/hue-plugins-2.3.0-cdh4.3.0.jar'
* sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/paranamer-2.3.jar'
* sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/avro-1.7.4.jar'
* sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/slf4j-api-1.6.1.jar'
* sys-package-mgr*: processing new jar, '/usr/lib/hadoop/lib/commons-configuration-1.6.jar'

命令行输入:

pig embedded_pig_testing.py -p /home/cloudera/Documents/python_testing_config_files/test002_config.cfg

传递的参数是一个包含我在测试中使用的一组变量的文件。
有没有办法让脚本不将这些操作记录到命令行?

2mbi3lxu

2mbi3lxu1#

登录java程序/库通常通过配置或 .properties 文件。我肯定有一个是给Pig的。你要找的东西是http://svn.apache.org/repos/asf/pig/trunk/conf/pig.properties.
编辑:看来这是特定于jython的。
我还不能确定是否有可能禁用它,但除非我能找到更干净的东西,我会考虑简单地重定向 sys.stderr (或 sys.stdout )在 .jar 加载阶段:

import os
import sys

old_stdout, old_stderr = sys.stdout, sys.stderr
sys.stdout = sys.stderr = open(os.devnull, 'w')

do_init()  # load your .jar's here

sys.stdout, sys.stderr = old_stdout, old_stderr
gywdnpxw

gywdnpxw2#

此日志来自jython扫描java包以构建缓存供以后使用:https://wiki.python.org/jython/packagescanning
只要您的脚本只使用完整类导入(没有 import x.y.* 通配符),您可以通过 python.cachedir.skip 属性:

pig ... -Dpython.cachedir.skip=true  ...

令人沮丧的是,我相信jython将这些消息写入stdout而不是stderr,所以在其他地方安装stderr对您没有帮助。
另一种选择是在pig0.12发布时使用流式python而不是jython。详见pig-2417。

相关问题