Windows 上的 Hadoop 2.6 Mapreduce 权限设置不正确
Hadoop 2.6 Mapreduce permissions incorrectly set on Windows
我已经在 Windows 上安装了 Hadoop 2.6 作为一些依赖于 Hadoop 的软件的测试台。据我所知,安装工作正常。我在 C:\Hadoop
中保存了 Hadoop,在 C:\hadooptemp
中保存了我的临时文件夹。我按照本教程进行了设置:
https://drive.google.com/file/d/0BweVwq32koypYm1QWHNvRTZWTm8/view
当我 运行 pi 的 hadoop-mapreduce-examples-2.6.0.jar 时,如教程中提供的,我得到以下输出:
Number of Maps = 2
Samples per Map = 5
Wrote input for Map #0
Wrote input for Map #1
Starting Job
15/08/27 15:55:10 INFO client.RMProxy: Connecting to ResourceManager at /155.41.90.116:8032
15/08/27 15:55:12 INFO input.FileInputFormat: Total input paths to process : 2
15/08/27 15:55:12 INFO mapreduce.JobSubmitter: number of splits:2
15/08/27 15:55:13 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1440705227041_0001
15/08/27 15:55:14 INFO impl.YarnClientImpl: Submitted application application_1440705227041_0001
15/08/27 15:55:14 INFO mapreduce.Job: The url to track the job: http://mycomp:8088/proxy/application_1440705227041_0001/
15/08/27 15:55:14 INFO mapreduce.Job: Running job: job_1440705227041_0001
15/08/27 15:55:35 INFO mapreduce.Job: Job job_1440705227041_0001 running in uber mode : false
15/08/27 15:55:35 INFO mapreduce.Job: map 0% reduce 0%
15/08/27 15:55:35 INFO mapreduce.Job: Job job_1440705227041_0001 failed with state FAILED due to: Application application_1440705227041_0001 failed 2 times due to AM Container for appattempt_1440705227041_0001_000002 exited with exitCode: -1000
For more detailed output, check application tracking page:http://mycomp:8088/proxy/application_1440705227041_0001/Then, click on links to logs of each attempt.
诊断:无法设置本地目录 /hadooptemp/nm-local-dir,它被标记为良好。
Failing this attempt. Failing the application.
15/08/27 15:55:35 INFO mapreduce.Job: Counters: 0
Job Finished in 25.444 seconds
java.io.FileNotFoundException: File does not exist: hdfs://155.41.90.116:8020/user/me/QuasiMonteCarlo_1440705304456_1878814183/out/reduce-out
at org.apache.hadoop.hdfs.DistributedFileSystem.doCall(DistributedFileSystem.java:1122)
at org.apache.hadoop.hdfs.DistributedFileSystem.doCall(DistributedFileSystem.java:1114)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1130)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1751)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1774)
at org.apache.hadoop.examples.QuasiMonteCarlo.estimatePi(QuasiMonteCarlo.java:314)
at org.apache.hadoop.examples.QuasiMonteCarlo.run(QuasiMonteCarlo.java:354)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.examples.QuasiMonteCarlo.main(QuasiMonteCarlo.java:363)
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.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
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.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
根据我一直在使用 exitCode:-1000 进行的跟踪,归结为 Hadoop 无法设置具有适当权限的本地目录。我相信我在上面使用的教程,这就是他们禁用用户帐户控制的原因。无论我是否这样做,我都会得到同样的错误。
我在这个link中也发现了类似的问题:
Mapreduce error: Failed to setup local dir
我试着按照他们说的去做,通过文件夹属性、安全和高级设置,让C:\Hadoop
和C:\hadooptemp
都归我的用户帐户所有。我之前被列为所有者,根据这个我可以完全控制文件夹的访问权限。这不是问题所在,或者我错误地将所有权分配给了我的帐户。
最后,在我的 YARN 节点管理器中,我收到以下似乎可能相关的错误,它会在几个地方弹出:
15/08/27 15:55:34 WARN localizer.ResourceLocalizationService: Permissions incorrectly set for dir /hadooptemp/nm-local-dir/usercache, should be rwxr-xr-x, actual value = rwxrwxr-x
好像我的权限太多了,因为它说它们设置不正确?我无法想象这是问题的原因,我的组也有写权限,但我不知道如何在 Windows.
中更改它
任何有关找出权限问题的详细信息以修复此错误的帮助将不胜感激。
在我的例子中是由于 Windows 无法访问域。将您的电脑连接到 windows 域。
这是我的纱线配置
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>c:\my\hadoop-2.7.1\tmp-nm</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>98.5</value>
</property>
</configuration>
另见https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/SecureContainer.html
这有点旧,但我今天 运行 遇到了类似的权限问题,并且能够通过以下方式解决它:
- 确保您的属性在 yarn-site.xml 中正确设置,正如@venergiac 上面提到的那样。为了完整起见在此处添加:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///d:/hadoop/hadoop-3.1.0/tmp</value>
</property>
</configuration>
- 如果像我一样,这不能修复错误,只需修复它告诉您的问题所在(即文件夹权限)。这有点棘手,因为 windows 上没有开箱即用的
chmod
,但这就是我们拥有 cygwin 的原因!打开 cygwin 终端并使用基本 chmod
命令来编辑文件权限以完全匹配 hdfs 期望的值。比如根据OP的日志输出:
Permissions incorrectly set for dir /hadooptemp/nm-local-dir/usercache, should be rwxr-xr-x, actual value = rwxrwxr-x
我们可以简单地 运行:
chmod g-w /hadooptemp/nm-local-dir/usercache
我在 运行 start-yarn.sh
之后以管理员身份在 Windows 命令提示符中绕过了 Permissions incorrectly set
消息。
我有类似的错误。原因是
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>D:\hadoop\tmp</value>
</property
参考 'D' 驱动器,它是 exFAT。当我将位置更改为 NTFS 时,它开始工作了。
这对我有用...运行 作为管理员 start-all.cmd
运行 命令提示符作为管理员和使用命令 start-dfs
和 start-yarn
.
我已经在 Windows 上安装了 Hadoop 2.6 作为一些依赖于 Hadoop 的软件的测试台。据我所知,安装工作正常。我在 C:\Hadoop
中保存了 Hadoop,在 C:\hadooptemp
中保存了我的临时文件夹。我按照本教程进行了设置:
https://drive.google.com/file/d/0BweVwq32koypYm1QWHNvRTZWTm8/view
当我 运行 pi 的 hadoop-mapreduce-examples-2.6.0.jar 时,如教程中提供的,我得到以下输出:
Number of Maps = 2
Samples per Map = 5
Wrote input for Map #0
Wrote input for Map #1
Starting Job
15/08/27 15:55:10 INFO client.RMProxy: Connecting to ResourceManager at /155.41.90.116:8032
15/08/27 15:55:12 INFO input.FileInputFormat: Total input paths to process : 2
15/08/27 15:55:12 INFO mapreduce.JobSubmitter: number of splits:2
15/08/27 15:55:13 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1440705227041_0001
15/08/27 15:55:14 INFO impl.YarnClientImpl: Submitted application application_1440705227041_0001
15/08/27 15:55:14 INFO mapreduce.Job: The url to track the job: http://mycomp:8088/proxy/application_1440705227041_0001/
15/08/27 15:55:14 INFO mapreduce.Job: Running job: job_1440705227041_0001
15/08/27 15:55:35 INFO mapreduce.Job: Job job_1440705227041_0001 running in uber mode : false
15/08/27 15:55:35 INFO mapreduce.Job: map 0% reduce 0%
15/08/27 15:55:35 INFO mapreduce.Job: Job job_1440705227041_0001 failed with state FAILED due to: Application application_1440705227041_0001 failed 2 times due to AM Container for appattempt_1440705227041_0001_000002 exited with exitCode: -1000
For more detailed output, check application tracking page:http://mycomp:8088/proxy/application_1440705227041_0001/Then, click on links to logs of each attempt.
诊断:无法设置本地目录 /hadooptemp/nm-local-dir,它被标记为良好。
Failing this attempt. Failing the application.
15/08/27 15:55:35 INFO mapreduce.Job: Counters: 0
Job Finished in 25.444 seconds
java.io.FileNotFoundException: File does not exist: hdfs://155.41.90.116:8020/user/me/QuasiMonteCarlo_1440705304456_1878814183/out/reduce-out
at org.apache.hadoop.hdfs.DistributedFileSystem.doCall(DistributedFileSystem.java:1122)
at org.apache.hadoop.hdfs.DistributedFileSystem.doCall(DistributedFileSystem.java:1114)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1130)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1751)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1774)
at org.apache.hadoop.examples.QuasiMonteCarlo.estimatePi(QuasiMonteCarlo.java:314)
at org.apache.hadoop.examples.QuasiMonteCarlo.run(QuasiMonteCarlo.java:354)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.examples.QuasiMonteCarlo.main(QuasiMonteCarlo.java:363)
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.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
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.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
根据我一直在使用 exitCode:-1000 进行的跟踪,归结为 Hadoop 无法设置具有适当权限的本地目录。我相信我在上面使用的教程,这就是他们禁用用户帐户控制的原因。无论我是否这样做,我都会得到同样的错误。
我在这个link中也发现了类似的问题: Mapreduce error: Failed to setup local dir
我试着按照他们说的去做,通过文件夹属性、安全和高级设置,让C:\Hadoop
和C:\hadooptemp
都归我的用户帐户所有。我之前被列为所有者,根据这个我可以完全控制文件夹的访问权限。这不是问题所在,或者我错误地将所有权分配给了我的帐户。
最后,在我的 YARN 节点管理器中,我收到以下似乎可能相关的错误,它会在几个地方弹出:
15/08/27 15:55:34 WARN localizer.ResourceLocalizationService: Permissions incorrectly set for dir /hadooptemp/nm-local-dir/usercache, should be rwxr-xr-x, actual value = rwxrwxr-x
好像我的权限太多了,因为它说它们设置不正确?我无法想象这是问题的原因,我的组也有写权限,但我不知道如何在 Windows.
中更改它任何有关找出权限问题的详细信息以修复此错误的帮助将不胜感激。
在我的例子中是由于 Windows 无法访问域。将您的电脑连接到 windows 域。 这是我的纱线配置
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>c:\my\hadoop-2.7.1\tmp-nm</value>
</property>
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>98.5</value>
</property>
</configuration>
另见https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/SecureContainer.html
这有点旧,但我今天 运行 遇到了类似的权限问题,并且能够通过以下方式解决它:
- 确保您的属性在 yarn-site.xml 中正确设置,正如@venergiac 上面提到的那样。为了完整起见在此处添加:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>0.0.0.0</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///d:/hadoop/hadoop-3.1.0/tmp</value>
</property>
</configuration>
- 如果像我一样,这不能修复错误,只需修复它告诉您的问题所在(即文件夹权限)。这有点棘手,因为 windows 上没有开箱即用的
chmod
,但这就是我们拥有 cygwin 的原因!打开 cygwin 终端并使用基本chmod
命令来编辑文件权限以完全匹配 hdfs 期望的值。比如根据OP的日志输出:
Permissions incorrectly set for dir /hadooptemp/nm-local-dir/usercache, should be rwxr-xr-x, actual value = rwxrwxr-x
我们可以简单地 运行:
chmod g-w /hadooptemp/nm-local-dir/usercache
我在 运行 start-yarn.sh
之后以管理员身份在 Windows 命令提示符中绕过了 Permissions incorrectly set
消息。
我有类似的错误。原因是
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>D:\hadoop\tmp</value>
</property
参考 'D' 驱动器,它是 exFAT。当我将位置更改为 NTFS 时,它开始工作了。
这对我有用...运行 作为管理员 start-all.cmd
运行 命令提示符作为管理员和使用命令 start-dfs
和 start-yarn
.