Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Windows上无管理员权限运行Hadoop MR作业_Java_Windows_Hadoop_Mapreduce_Hadoop2 - Fatal编程技术网

Java 在Windows上无管理员权限运行Hadoop MR作业

Java 在Windows上无管理员权限运行Hadoop MR作业,java,windows,hadoop,mapreduce,hadoop2,Java,Windows,Hadoop,Mapreduce,Hadoop2,我已经在windows中安装了Hadoop 2.3.0,并且能够成功执行MR作业。但当我试图以正常权限(没有管理员权限)执行MR jobs时,意味着job get失败,出现以下异常。在这里,我尝试了猪脚本示例 2014-10-15 12:02:32,822 WARN [main] org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:kaveen (auth:SIMPLE) cause

我已经在windows中安装了Hadoop 2.3.0,并且能够成功执行MR作业。但当我试图以正常权限(没有管理员权限)执行MR jobs时,意味着job get失败,出现以下异常。在这里,我尝试了猪脚本示例

    2014-10-15 12:02:32,822 WARN [main] org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:kaveen (auth:SIMPLE) cause:java.io.IOException: Split class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
2014-10-15 12:02:32,823 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: Split class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
    at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:362)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:403)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    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:1548)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: java.lang.ClassNotFoundException: Class org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1794)
    at org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:360)
    ... 7 more

2014-10-15 12:02:32,827 INFO [main] org.apache.hadoop.mapred.Task: Runnning cleanup for the task
2014-10-15 12:02:32,827 WARN [main] org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter: Output Path is null in abortTask()
更新:

我能够深入研究这个问题,发现在方法“MapTask.getSplitDetails(MapTask.java:363)”的下面一行中出现了异常

private T getSplitDetails(路径文件,长偏移量)
抛出IOException{
FileSystem fs=file.getFileSystem(conf);
FSDataInputStream infle=fs.open(文件);
填充搜索(偏移);
String className=StringInterner.weakIntern(Text.readString(infle));
cls类;
试一试{
cls=(类)conf.getClassByName(类名称);
}捕获(ClassNotFoundException){
IOException wrap=新IOException(“拆分类”+类名+
“未找到”);
原因(ce);
抛包;
}
但如果我以管理员权限启动“NodeManager”,则意味着不会出现上述异常。我不知道为什么当我以正常权限启动“NodeManager”时,MR job不工作


如果有人知道上述问题的原因和解决方案,请尽快指导我。

您可以使用以下属性更改hadoop的tmp目录位置

<property>
   <name>hadoop.tmp.dir</name>
   <value>/other/tmp</value>
</property>

hadoop.tmp.dir
/其他/tmp
您的默认tmp位置是c:\tmp,需要管理员权限才能访问。请将该位置更改为任何子目录,然后在没有管理员权限的情况下尝试MR作业


希望有帮助。

我也尝试了以下可能性,但这个问题没有解决。(1)我为“tmp”和“logs”文件夹设置了完全权限,如下c:\>cacls c:\tmp/E/T/G:fc:\>cacls c:\Syncfusion\BigDataSDK\1.1.0.8\SDK\Hadoop\logs/E/T/G:F(2)我为其设置了完全权限(.staging)目录位于hdfs位置。(hadoop dfs-chmod-R 777)。(3)我还尝试更改包含完整perivilege的所有者和组,例如“hadoop dfs-chgrp-R Administrators/”、“hadoop dfs-chown-R/”任何人请指导我解决此问题。可能是类路径权限问题…?您是否尝试确保pig jar是否在非特权用户类路径中,并且它们是可访问的?我不太了解Pig,也没有在Windows中运行过Hadoop…但该错误显然表明无法找到Pig jar.Hi@John Galt,感谢您提供的相关信息。我正确添加了所有类路径。即使我运行了wordcount.jar文件,我也在org.apache.hadoop.security.UserGroupInformation.doAs()上发现了错误运行jarFile时出错。请帮助我在配置时出错的地方。您好@kumar,谢谢您的更新。它工作正常。您说问题可能是“C:\tmp”位置的权限不可用。即使我对“C:\tmp”的文件夹和子文件夹授予了完全权限,但它不工作。您能详细说明原因吗?我的解决方案是解决此问题的最简单方法。您可以为每个人授予/tmp目录的完全权限。然后,它将在不更改默认位置的情况下工作。
<property>
   <name>hadoop.tmp.dir</name>
   <value>/other/tmp</value>
</property>