我正在学习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
我有一个可以在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)
我不知道该怎么做,我需要这个剧本,这是非常表演。
感谢您的阅读,也许还有您的帮助!节日快乐!!
昂é液体
2条答案
按热度按时间1cosmwyk1#
这个错误消息很有解释性—您不能在没有终端的shell脚本中使用sudo,因为它需要用户输入密码。
使用suid位或“expect”命令可能会有所帮助(http://linux.die.net/man/1/expect)提供密码
qzlgjiam2#
你真的不想以root的身份运行这些东西。
您可以使用
su -s /bin/bash apache
. 然后让您的脚本以apache用户的身份工作,方法是提供对日志的正确访问权限,等等。(注意:您的apache用户可能是www data或其他内容,而不是apache,您可以使用
ps aux | egrep '(apache|httpd)'
检查)