用php启动pig脚本

用php启动pig脚本,php,bash,shell,apache-pig,Php,Bash,Shell,Apache Pig,我正在学习Pig拉丁语,我想知道如何使用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:

我正在学习Pig拉丁语,我想知道如何使用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
$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');
我有一个脚本可以在我的shell中启动(我是root),它可以工作,我尝试用bash启动我的pig脚本,它也可以工作

但是当我尝试使用我的php应用程序(所以我的用户是apache)时,它不起作用。我试图直接或通过bash启动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
$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
 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)
我不知道问题出在哪里,是用户还是日志文件的错误??我试图在log4j属性中更改日志文件的路径,但它没有改变任何东西

我的错误消息:

#!/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
 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)
我不知道该怎么做,我需要这个脚本,这是非常性能

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


Angélique

错误消息非常具有解释性——您不能在没有终端的shell脚本中使用sudo,因为它希望用户输入密码


使用SUID bit或“expect”命令()提供密码可能会有所帮助

您真的不想以root用户身份运行这些东西

您可以使用
SU-s/bin/bash-apache
将SU转换为apache。然后,通过提供对日志的正确访问权限等,让脚本以apache用户的身份工作


(注意:您的apache用户可能是www数据或其他内容,而不是apache,您可以使用
ps aux | egrep'(apache | httpd)
进行检查)

您是否阅读了错误消息<代码>sudo:对不起,你必须有一个tty才能运行sudo是的,但我是script/shell/bash的初学者,我尽力做到最好,我不理解这个错误可能意味着什么。这不仅仅是一个初学者,也许更多的是试图解决一个问题。祝你好运。谢谢,我没有意识到我的用户需要访问日志,这可能是pig没有启动的原因。现在,它工作了,我给了在有日志的目录上写的权利。非常感谢你!!谢谢,我不知道我不能,我解决了我的问题。如果有一天我需要它,我会提醒这个命令。