我正在本地计算机上运行以下mapreduce代码:https://github.com/jeffyrao/warcbase/blob/extract-links/src/main/java/org/warcbase/data/extractlinks.java
但是,我遇到了一个例外:
[main] ERROR UserGroupInformation - PriviledgedActionException as:jeffy (auth:SIMPLE) cause:java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: Resource file:/Users/jeffy/Documents/Eclipse/warcbase/map_backup.txt is not publicly accessable and as such cannot be part of the public cache.
Exception in thread "main" java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: Resource file:/Users/jeffy/Documents/Eclipse/warcbase/map_backup.txt is not publicly accessable and as such cannot be part of the public cache.
at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:144)
at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:155)
at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:625)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:391)
at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1269)
at org.apache.hadoop.mapreduce.Job$11.run(Job.java:1266)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:394)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1266)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1287)
at org.warcbase.data.ExtractLinks.run(ExtractLinks.java:254)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at org.warcbase.data.ExtractLinks.main(ExtractLinks.java:270)
Caused by: java.util.concurrent.ExecutionException: java.io.IOException: Resource file:/Users/jeffy/Documents/Eclipse/warcbase/map_backup.txt is not publicly accessable and as such cannot be part of the public cache.
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:140)
... 14 more
我认为这个问题是因为我试图将一个文件添加到distributedcache中(请查看第81-86行和第235行的代码)。欢迎任何建议。谢谢!
3条答案
按热度按时间mlnl4t2r1#
我在本地环境中运行添加了distributedcache的hadoop2作业时遇到了类似的问题。最后,我的问题的原因是hadoop2不仅要验证路径本身是否具有public execution&read access权限,而且还要验证它的所有祖先目录是否应该具有execution权限。在这种情况下,如果
"/"
或者"/Users"
没有755权限,文件仍将无法添加到公共缓存中。请参阅方法
static boolean ancestorsHaveExecutePermissions(FileSystem fs, Path path, LoadingCache<Path,Future<FileStatus>> statCache)
在hadoop类fsdownload.java中一种解决方案是授予所有目录的权限(听起来不安全)。
更好的解决方案是确保要缓存的所有资源文件都在
/tmp
文件夹或默认具有>755权限的任何其他文件夹。xpcnnkqh2#
我也遇到过类似的问题。我在本地模式下用tfidf运行mahout seq2sparse。并引发错误:
线程“main”java.io.ioexception中的异常:java.util.concurrent.executionexception:java.io.ioexception:resource file:/root/title.tfidf/dictionary.file-0不可公开访问,因此不能作为公共缓存的一部分。
我发现默认情况下/root的权限是750
drwxr-x---。12根4096 16:04根
所以我更改了/root的权限
chmod 755/根
那就行了。所以谢谢伊通。
djmepvbi3#
我必须改变权限,只有我的主目录如下
chmod go+rx/主页/hadoop
为了解决这个问题,as/和/home已经为我的系统上的组和其他用户提供了rx权限。这里的hadoop是我的linux登录名/用户名。