您的位置:首页 > 编程语言 > Java开发

eclipse下开发hadoop程序配置(二)

2015-07-20 17:51 615 查看
1、安装hadoop eclipse插件,如果eclipse版本在3.5以上,需要重新编译eclipse插件(参见window环境,eclipse下开发hadoop程序配置(一)帖子)。

2、配置hadoop插件,设定相应属性(在第五周视频里有具体说明,这里我贴一些图再说明一下):

1)、安装后如下图:



2)、在Map/Reduce Locations配置相关信息,主要配置dfs,job tracker相关信息,其中host配置为hadoop namenode节点ip或机器名,如下图:



3)、在Advanced parameters做相关设置,主要是用户名(这个和集群节点中装linux的用户名一致,如hadoop用户)和hadoop.tmp.dir(这个和core-site.xml中配置的一样),如下图:

eclipse.plug-in.user.name配置



hadoop.job.ugi配置,注[用户名],Tardis,必须是这种格式



hadoop.tmp.dir配置,此参数涉及到许多目录的配置,如果core-site.xml中配置了请配置,如果没有设置,为默认值/tmp/hadoop-${user.name}



4)、配置插件的hadoop installation directory,这个属性说明插件创建map reduce 工程时用到的hadoop jar包,与连接的hadoop集群目录无关,如下图:



3、经过前2个步骤设定,eclipse已经可以访问dfs目录了并可以操作目录上传文件等,但是如果运行尝试运行hadoop mapreduce程序会报错,如下图:

1)、DFS Locations下可以操作dfs文件系统



2)、此时运行hadoop mapreduce,如Test_1程序,报错



4、前面错误表示无法创建chmod进程,window下没有chmod,所以要安装cygwin模拟linux环境,请各位童鞋下载cygwin一路next安装,然后在window的环境变量下PATH下设定cygwin bin目录,最后要重启eclipse,如下图:

1)、cygwin安装参照 http://www.cygwin.cn/site/install/

2)、设定环境变量,首先设定CYGWIN_HOME到cygwin安装目录,然后Path下设定%CYGWIN_HOME%/bin;



3)、重启eclipse后再次运行Test_1程序,继续报错,如下错误:

12/10/13 22:31:19 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=

12/10/13 22:31:20 WARN mapred.JobClient: No job jar file set. User classes may not be found. See JobConf(Class)
or JobConf#setJar(String).

12/10/13 22:31:20 INFO input.FileInputFormat: Total input paths to process : 2

12/10/13 22:31:21 INFO mapred.JobClient: Running job: job_local_0001

12/10/13 22:31:21 INFO input.FileInputFormat: Total input paths to process : 2

12/10/13 22:31:21 WARN mapred.LocalJobRunner: job_local_0001

org.apache.hadoop.security.AccessControlException:
org.apache.hadoop.security.AccessControlException: Permission denied: user=xuxuan- think\xuxuan, access=WRITE, inode="xuxuan":xuxuan:supergroup:rwxr-xr-x

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:96)

at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:58)

at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:914)

at org.apache.hadoop.hdfs.DistributedFileSystem.mkdirs(DistributedFileSystem.java:262)

at org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:1120)

at org.apache.hadoop.mapred.FileOutputCommitter.setupJob(FileOutputCommitter.java:49)

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

Caused by: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.security.AccessControlException: Permission
denied: user=xuxuan- think\xuxuan, access=WRITE, inode="xuxuan":xuxuan:supergroup:rwxr-xr-x

at org.apache.hadoop.hdfs.server.namenode.PermissionChecker.check(PermissionChecker.java:176)

at org.apache.hadoop.hdfs.server.namenode.PermissionChecker.check(PermissionChecker.java:157)

at org.apache.hadoop.hdfs.server.namenode.PermissionChecker.checkPermission(PermissionChecker.java:105)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:4514)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:4484)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:1766)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:1735)

at org.apache.hadoop.hdfs.server.namenode.NameNode.mkdirs(NameNode.java:542)

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

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:396)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)

at org.apache.hadoop.ipc.Client.call(Client.java:740)

at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220)

at $Proxy0.mkdirs(Unknown Source)

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

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59)

at $Proxy0.mkdirs(Unknown Source)

at org.apache.hadoop.hdfs.DFSClient.mkdirs(DFSClient.java:912)

... 4 more

12/10/13 22:31:22 INFO mapred.JobClient: map 0% reduce 0%

任务名称:Test_1

12/10/13 22:31:22 INFO mapred.JobClient: Job complete: job_local_0001

12/10/13 22:31:22 INFO mapred.JobClient: Counters: 0

任务成功:否

输入行数:0

输出行数:0

跳过的行:0

任务开始:2012-10-13 22:31:19

任务结束:2012-10-13 22:31:22

任务耗时:0.053066667 分钟

5、前面错误说明cygwin下的用户名与linux hadoop namenode机器上的用户名不一致,可以在hdfs-site.xml做如下设置:

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

这样在操作hdfs是忽略权限,注意生产环境处于安全考虑不要这么搞!

如果大家能将cygwin的用户名和hadoop namenode的用户名一致,还请发帖告诉大家怎么设置!

6、重新设置hdfs-site.xml配置文件后,重启集群,重启eclipse,就可以运行map reduce程序了,如下图:

1)、运行结果如下:



2)、mapreduce程序创建的output目录,所属用户名是window机器名,和第5点说明的一样,不影响调试程序,但生产环境请不要这样设置



经过以上6个步骤,就可以完成在window下开发调试hadoop程序了,和我一样环境的童鞋不妨可以试一下!

7、在eclipse中断点调试map reduce程序,如图:



21.png (122.4 KB, 下载次数: 0)

下载附件 保存到相册

2012-10-14 22:04 上传

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: