问题1:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="root": root:/tmp:rwxr-xr-x
其实这个错误的原因很容易看出来,用户Administator在hadoop上执行写操作时被权限系统拒绝.
解决问题的过程
看到这个错误的,第一步就是将这个错误直接入放到百度google里面进行搜索。找到了N多篇文章,但是主要的思路就如此篇文章所写的两个解决办法:http://www.cnblogs.com/acmy/archive/2011/10/28/2227901.html
1)、在hdfs的配置文件中,将dfs.permissions修改为False
到服务器上修改hadoop的配置文件:
conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false
<property>
<name>dfs.permissions</name>
<value>false</value>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
</description>
</property>
2)、执行这样的操作 hadoop fs -chmod 777 /tmp
问题2:
解决Eclipse中运行WordCount出现 java.lang.ClassNotFoundException: org.apache.hadoop.examples.WordCount$TokenizerMapper问题
原因:hadoop集群上运行mapreduce程序需要jar包。
解决办法:添加conf.set("mapred.jar","hadoop-test.jar");
把项目打包为jar文件hadoop-test.jar,放置在项目根目录下。
另外网上的解放方法是:mian方法中添加:
File jarFile = EJob.createTempJar( "bin" );
EJob.addClasspath( "/usr/hadoop/conf" );
ClassLoader classLoader = EJob.getClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
。。。
((JobConf) job.getConfiguration()).setJar(jarFile.toString());