我正尝试使用Hadoop流式传输使用私有Python解释器(Hortonworks数据平台2.2.0)。 python解释器是私人的,因为它是主目录中的虚拟环境解释器,只有特定的用户帐户才有权运行它。Hadoop使用私有Python解释器流式传输
我在hashbang行中指定了python解释器。我的流式作业可与系统python或#!/usr/bin/env python
一起使用。然而,它产生权限被拒绝错误,当我使用专用的Python解释器: #!/home/dmazur/test/tempenv/bin/python
下面是输出的一个片段,显示错误消息:
15/11/03 11:31:13 INFO mapreduce.Job: map 0% reduce 0%
15/11/03 11:31:22 INFO mapreduce.Job: Task Id : attempt_1440596114865_0249_m_000000_0, Status : FAILED
Error: java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:446)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
... 9 more
Caused by: java.lang.RuntimeException: Error in configuring object
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:109)
at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:75)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:38)
... 14 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:106)
... 17 more
Caused by: java.lang.RuntimeException: configuration exception
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:222)
at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66)
... 22 more
Caused by: java.io.IOException: Cannot run program "/gs/hadoop/yarn/local/lm-2r01-n10/usercache/dmazur/appcache/application_1440596114865_0249/container_1440596114865_0249_01_000002/./mapper_mean.py": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:209)
... 23 more
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 24 more
我相信问题是权限上python解释器而不是mapper_mean.py文件。当更改hashbang行而不更改文件本身的权限时,作业运行良好。我想这意味着MapReduce作业由另一个用户拥有的守护进程运行。我没有看到有关如何使用私有解释器进行Hadoop流式传输的文档中的任何内容。可能吗?如果是这样,需要设置哪些权限才能运行?
感谢您的建议。在这种情况下,用户有权运行可执行文件,并且还启动Hadoop作业。显然有一些额外的权限需要,因为在问题中描述的错误。理想情况下,我希望获得使用Hadoop流式解释器所需的权限列表。 –