使用php启动pig脚本

gopyfrb3  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(288)

我正在学习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)

我不知道该怎么做,我需要这个剧本,这是非常表演。
感谢您的阅读,也许还有您的帮助!节日快乐!!
昂é液体

1cosmwyk

1cosmwyk1#

这个错误消息很有解释性—您不能在没有终端的shell脚本中使用sudo,因为它需要用户输入密码。
使用suid位或“expect”命令可能会有所帮助(http://linux.die.net/man/1/expect)提供密码

qzlgjiam

qzlgjiam2#

你真的不想以root的身份运行这些东西。
您可以使用 su -s /bin/bash apache . 然后让您的脚本以apache用户的身份工作,方法是提供对日志的正确访问权限,等等。
(注意:您的apache用户可能是www data或其他内容,而不是apache,您可以使用 ps aux | egrep '(apache|httpd)' 检查)

相关问题