【问题标题】:launch a pig script with php用 php 启动一个猪脚本
【发布时间】:2013-12-23 13:28:58
【问题描述】:

我正在学习 Pig Latin,我想知道如何使用 PHP 启动 pig 脚本。

这是我启动脚本的行:

pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z

我有一个可以在我的 shell(我是 root)中启动的脚本,它可以工作,我尝试使用 bash 启动我的 pig 脚本,它也可以工作。

但是当我尝试使用我的 php 应用程序(所以我的用户是 apache)时,它不起作用。我尝试直接或使用 bash 启动 pig 脚本,但失败了。这是我启动脚本的行:

$cmdTest = exec('pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z 2>&1');

我尝试使用 sudo 更改用户,但也失败了。

bash 脚本:

#!/bin/bash
sudo -s -u root

pig -f ../testjava/calculs_routage.pig -param input=/user/hive/warehouse/tableRoutage/ -param output=/resultatsRequetes/obj1/resultatObj1 -param date1=2013-11-08T00:00:00.000Z -param date2=2013-11-15T00:00:00.000Z

我不知道问题出在哪里,是用户还是日志文件的错误?我试图在 log4j 属性中更改日志文件的路径,但它并没有改变任何东西。

我的错误信息:

 sudo: sorry, you must have a tty to run sudo 
13/12/23 14:16:35 WARN pig.Main: Cannot write to log file: /var/www/html/phpmail/vue/pig_1387804595477.log 
2013-12-23 14:16:35,481 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1-Intel (r16951) compiled Jun 19 2013, 17:26:05 
2013-12-23 14:16:35,734 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /var/www/.pigbootup not found 
2013-12-23 14:16:35,752 [main] WARN org.apache.pig.Main - Cannot write to log file: /var/www/html/phpmail/vue//calculs_routage.pig1387804595751.log 
2013-12-23 14:16:35,767 [main] ERROR org.apache.pig.Main - ERROR 2999: Unexpected internal error. null 
2013-12-23 14:16:35,767 [main] WARN org.apache.pig.Main - There is no log file to write to. 
2013-12-23 14:16:35,767 [main] ERROR org.apache.pig.Main - java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:394) 
at java.util.Properties.setProperty(Properties.java:143) 
at org.apache.pig.Main.run(Main.java:454) at org.apache.pig.Main.main(Main.java:157) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:187)

我不知道该怎么做,我需要这个非常高效的脚本。

感谢您阅读本文,也许您的帮助! 节日快乐!!

安吉丽克

【问题讨论】:

  • 您是否阅读过错误消息? sudo: sorry, you must have a tty to run sudo
  • 是的,但我是 script/shell/bash 的初学者,我尽力做到最好,但我不明白这个错误可能意味着什么。
  • 与其说是初学者,不如说是尝试解决问题。祝你好运。

标签: php bash shell apache-pig


【解决方案1】:

你真的不想以 root 身份运行这些东西。

您可以使用su -s /bin/bash apache SU 到 apache。然后通过授予对日志的正确访问权限等,让您的脚本以 apache 用户身份运行。

(注意:你的 apache 用户可能是 www-data 或者别的,而不是 apache,你可以使用ps aux | egrep '(apache|httpd)' 来检查)

【讨论】:

  • 谢谢,我没有意识到我的用户需要访问日志,这可能是 pig 没有启动的原因。现在,它起作用了,我有权在有日志的目录上写入。非常感谢!!
【解决方案2】:

错误信息非常明确 - 您不能在没有终端的情况下在 shell 脚本中使用 sudo,因为它希望用户输入密码。

使用 SUID 位或“期望”命令 (http://linux.die.net/man/1/expect) 提供密码可能会有所帮助

【讨论】:

  • 谢谢,我不知道我不能,我解决了我的问题。如果有一天我需要这个命令,我会提醒它。
猜你喜欢
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
相关资源
最近更新 更多