转:http://www.dataguru.cn/thread-203560-1-1.html


参见myeclipse配置hadoop开发环境,及遇到问题解决http://f.dataguru.cn/thread-199557-1-1.html org.apache.hadoop.security.AccessControlException:Permission denied:user=SEVEN,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。

  问题原因:本地用户SEVEN(本机windows用户)想要远程操作hadoop系统,没有权限引起的。

b、修改hadoop location参数,在advanced parameter选项卡中,找到hadoop.job.ugi项,将此项改为启动hadoop的用户名即可。(注意第一次设置的时候可能没有hadoop.job.ugi参数,报错后在去看就有了,或者关闭重启之后。)


我有遇到了新的问题:

在advanced parameter选项卡,找不到hadoop.job.ugi项,重启eclipse,clean 以后还是找不到。


Cluster name not specified hadoop启动报错_java

 

我在windows 里面修改当前的用户名为hadoop,重启电脑,就没有这个报错了。



Cluster name not specified hadoop启动报错_java_02

 


有需要的可以参考一下。



准备工作,先下载hadoop文件,解压缩到一个目录,如F:\hadoop-1.2.1

1、安装Hadoop开发插件


     hadoop安装包contrib/目录下有个插件hadoop-1.2.1-eclipse-plugin.jar,拷贝到myeclipse根目录下/dropins目录下。

2、 启动myeclipse,打开Perspective:

【Window】->【Open Perspective】->【Other...】->【Map/Reduce】->【OK】

Cluster name not specified hadoop启动报错_hadoop_03

 

3、 打开一个View:

【Window】->【Show View】->【Other...】->【MapReduce Tools】->【Map/Reduce Locations】->【OK】

Cluster name not specified hadoop启动报错_apache_04

 

4、 添加Hadoop location:

Cluster name not specified hadoop启动报错_hadoop_05

 

Cluster name not specified hadoop启动报错_hadoop_06

 

location name: 我填写的是:amber-hadoop.

Map/Reduce Master 这个框里

Host:就是jobtracker 所在的集群机器,这里写192.168.1.121

Hort:就是jobtracker 的port,这里写的是9001

这两个参数就是mapred-site.xml里面mapred.job.tracker里面的ip和port  

DFS Master 这个框里

Host:就是namenode所在的集群机器,这里写192.168.1.121

Port:就是namenode的port,这里写9000

这两个参数就是core-site.xml里面fs.default.name里面的ip和port

(Use M/R master host,这个复选框如果选上,就默认和Map/Reduce Master这个框里的host一样,如果不选择,就可以自己定义输入,这里jobtracker 和namenode在一个机器上,所以是一样的,就勾选上)

user name:这个是连接hadoop的用户名,因为我是用grid用户安装的hadoop,而且没建立其他的用户,所以就用grid。 


然后点击finish按钮,此时,这个视图中就有多了一条记录。

重启myeclipse并重新编辑刚才建立的那个连接记录,现在我们编辑advance parameters tab页

Cluster name not specified hadoop启动报错_java_07

 



(重启编辑advance parameters tab页原因:在新建连接的时候,这个advance paramters  tab页面的一些属性会显示不出来,显示不出来也就没法设置,所以必须重启一下eclipse再进来编辑才能看到)

这里大部分的属性都已经自动填写上了,其实就是把core-defaulte.xml、hdfs-defaulte.xml、mapred-defaulte.xml里面的一些配置属性展示出来。因为在安装hadoop的时候,其site系列配置文件里有改动,所以这里也要弄成一样的设置。主要关注的有以下属性:

fs.defualt.name:这个在General tab页已经设置了

mapred.job.tracker:这个在General tab页也设置了

dfs.replication:这个这里默认是3,因为我在hdfs-site.xml里面设置成了1,所以这里也要设置成1 

然后点击finish,然后就连接上了(先要启动sshd服务,启动hadoop进程),连接上的标志如图:

Cluster name not specified hadoop启动报错_apache_08

 


5、新建Map/Reduce Project:


【File】->【New】->【Project...】->【Map/Reduce】->【Map/Reduce Project】->【Project name: WordCount】->【Configure Hadoop install directory...】->【Hadoop installation directory: F:\hadoop-1.2.1】->【Apply】->【OK】->【Next】->【Allow output folders for source folders】->【Finish】

Cluster name not specified hadoop启动报错_java_09

 


6、新建WordCount类:

Cluster name not specified hadoop启动报错_apache_10

 



第一个错误

13/11/04 20:42:53 INFO file.FileUtile: Read File :F:\Workspaces\MyEclipse 10\FileTest\src\tf.txt

1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890abcdefghijklmnopqrst1234567890

13/11/04 20:42:53 INFO file.FileUtile: Read Contetn size 130

Exception in thread "main" org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create /user/grid/in/hw.txt. Name node is in safe mode.

The reported blocks is only 5 but the threshold is 0.9990 and the total blocks 8. Safe mode will be turned off automatically.

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:1561)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:1527)

at org.apache.hadoop.hdfs.server.namenode.NameNode.create(NameNode.java:710)

at org.apache.hadoop.hdfs.server.namenode.NameNode.create(NameNode.java:689)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)


Cluster name not specified hadoop启动报错_hadoop_11

 



在主节点处,关闭掉安全模式,当然你等待下一些时间等备份复制完毕,这个错误也会消失的

#bin/hadoop dfsadmin –safemode leav


第二个错误:

org.apache.hadoop.security.AccessControlException:Permission denied:user=SEVEN,access=WRITE,inode="tmp":root:supergroup:rwxr-xr-x 。

  问题原因:本地用户SEVEN(本机windows用户)想要远程操作hadoop系统,没有权限引起的。

      解决办法:

            a、如果是测试环境,可以取消hadoop hdfs的用户权限检查。打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。

<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>

            b、修改hadoop location参数,在advanced parameter选项卡中,找到hadoop.job.ugi项,将此项改为启动hadoop的用户名即可。(注意第一次设置的时候可能没有hadoop.job.ugi参数,报错后在去看就有了,或者关闭重启之后。)----0.2.X时候有这个属性, 新版本之后无这个属性..该方法可以忽略.

      c、因为Eclipse使用hadoop插件提交作业时,会默认以 DrWho 身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/hadoop ,  由于 DrWho 用户对hadoop目录并没有写入权限,所以导致异常的发生。解决方法为:放开 hadoop 目录的权限 , 命令如下 :$ hadoop fs -chmod 777 


我是用直接把windows用户改成grid用户


运行成功后的结果如下所示:

Cluster name not specified hadoop启动报错_java_12

 


第三个错误

13/11/04 21:33:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

13/11/04 21:33:34 ERROR security.UserGroupInformation: PriviledgedActionException as:grid cause:java.io.IOException: Failed to set permissions of path: \home\grid\hadoop-1.2.1\tmp\mapred\staging\grid1670184777\.staging to 0700

Exception in thread "main" java.io.IOException: Failed to set permissions of path: \home\grid\hadoop-1.2.1\tmp\mapred\staging\grid1670184777\.staging to 0700

at org.apache.hadoop.fs.FileUtil.checkReturnValue(FileUtil.java:691)

at org.apache.hadoop.fs.FileUtil.setPermission(FileUtil.java:664)

at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:514)

at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:349)

at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:193)

at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:126)

at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:942)

at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)


出现不能在HDFS里面创建文件.权限问题

修改了

F:\hadoop-1.2.1\src\core\org\apache\hadoop\fs

中的FileUtil.java,checkReturnValue 里面内容注释掉


重新编译打包hadoop-core-1.2.1.jar,替换掉hadoop-1.2.1根目录下的hadoop-core-1.2.1.jar即可。

当然也和我一样小白,编译打包不成功的,直接下载个免权限的hadoop-core-1.2.1.jar即可.我会放附件上


第四个错误


13/11/05 18:25:53 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

13/11/05 18:25:53 INFO mapred.JobClient: Cleaning up the staging area file:/home/grid/hadoop-1.2.1/tmp/mapred/staging/grid489274882/.staging/job_local489274882_0001

13/11/05 18:25:53 ERROR security.UserGroupInformation: PriviledgedActionException as:grid cause

Cluster name not specified hadoop启动报错_apache_13

rg.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://h1:9000/user/grid/out already exists

Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://h1:9000/user/grid/out already exists

at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:137)

at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:973)


这个只要在hdfs里的目录指定新的目录,或者删除原有目录就ok

Cluster name not specified hadoop启动报错_java_14

 



第五问题 ,上修改完毕之后再次运行结果又出错了

13/11/05 18:36:41 INFO mapred.MapTask: Processing split: hdfs://h1:9000/user/grid/in/test1.txt:0+12

13/11/05 18:36:41 INFO mapred.MapTask: io.sort.mb = 100

13/11/05 18:36:41 INFO mapred.LocalJobRunner: Map task executor complete.

13/11/05 18:36:41 WARN mapred.LocalJobRunner: job_local1365353611_0001

java.lang.Exception: java.lang.OutOfMemoryError: Java heap space

at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)

Caused by: java.lang.OutOfMemoryError: Java heap space


1、在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms384m -Xmx384m

注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了, 

就是说set JAVA_OPTS=-Xms384m -Xmx384m没起作用

2、在Eclilpse中修改启动参数,在VM arguments 加入了-Xms384m -Xmx384m,设置如下图所示

Cluster name not specified hadoop启动报错_hadoop_15

 



3. 单独为某个程序设置内存大小.eclipse里默认的一个程序的jvm配置为:-Xms8m -Xmx128m,所以我们的处理耗内存比较大时需要手动调整一下,以便不会内存溢出。具体的设置方法为:

选中被运行的类,点击菜单‘Run as ->Open Run Dialog...’,选择(x)=Argument标签页下的vm arguments框里输入 -Xmx512m, 保存运行就ok了


我是用了第三种方法 

运行结果通过

13/11/05 18:48:02 INFO mapred.JobClient:     SPLIT_RAW_BYTES=508

13/11/05 18:48:02 INFO mapred.JobClient:     Reduce input records=12

13/11/05 18:48:02 INFO mapred.JobClient:     Reduce input groups=11

13/11/05 18:48:02 INFO mapred.JobClient:     Combine output records=12

13/11/05 18:48:02 INFO mapred.JobClient:     Reduce output records=11

13/11/05 18:48:02 INFO mapred.JobClient:     Map output records=12

Cluster name not specified hadoop启动报错_java_16

 



附件下载待会我弄个百度网盘共享下.


http://pan.baidu.com/s/1h6Enz      密码 mejg




可以不用建同名用户, 你建个组也行


还可以去掉hdfs的权限检查

打开conf/hdfs-site.xml,找到dfs.permissions属性修改为false(默认为true)OK了。

        <property>

            <name>dfs.permissions</name>

            <value>false</value>

        </property>

    改完需要重启HDFS;

//补充:

 

因为Eclipse使用hadoop插件提交作业时,会默认以 DrWho 身份去将作业写入hdfs文件系统中,对应的也就是 HDFS 上的/user/xxx , 我的为/user/hadoop , 由于 DrWho 用户对hadoop目录并没有写入权限,所以导致异常的发生。提供的解决方法为:放开 hadoop 目录的权限 , 命令如下 :$ hadoop fs -chmod 777 /user/hadoop