Windows上運行Eclipse使用virtualbox搭建的Ubuntu的hadoop集羣服務

在windows端使用eclipse在ubuntu集羣中運行程序java

將ubuntu的master節點的hadoop拷貝到windows某個路徑下,例如:E:\Spring\Hadoop\hadoop\hadoop-2.7.1node

Eclipse安裝對應版本的hadoop插件,而且,在windows-preference-mapreduce中設置hadoop目錄的路徑linux

第一種:空指針異常git

Exception in thread "main" java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
at org.apache.hadoop.util.Shell.run(Shell.java:418)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:739)
at org.apache.hadoop.util.Shell.execCommand(Shell.java:722)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:633)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:421)
at org.apache.hadoop.fs.FilterFileSystem.mkdirs(FilterFileSystem.java:281)
at org.apache.hadoop.mapreduce.JobSubmissionFiles.getStagingDir(JobSubmissionFiles.java:125)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:348)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303)
at WordCount.main(WordCount.java:89)
apache


來源: <http://bbs.csdn.net/topics/390876548>ubuntu

 緣由:要讀寫windows平臺的文件,沒有權限,因此,在hadoop\bin中以及System32放置對應版本的winutils.exe以及hadoop.dll,加入環境變量HADOOP_HOME,值爲:E:\Spring\Hadoop\hadoop\hadoop-2.7.1,在Path中加入%HADOOP_HOME%\bin,重啓eclipse(不然不會生效),運行不會報這個異常了windows

第二種:Permission deniedbash

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=cuiguangfan, access=WRITE, inode="/tmp/hadoop-yarn/staging/cuiguangfan/.staging":linux1:supergroup:drwxr-xr-xapp

參考如下連接(啓發):框架

http://www.huqiwen.com/2013/07/18/hdfs-permission-denied/

因此,在程序運行時設置System.setProperty("HADOOP_USER_NAME""linux1");

注意,在windows中設置系統環境變量不起做用


第三種:no job control

2014-05-28 17:32:19,761 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1401177251807_0034_01_000001 and exit code: 1

org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: line 0: fg: no job control

at org.apache.hadoop.util.Shell.runCommand(Shell.java:505)

at org.apache.hadoop.util.Shell.run(Shell.java:418)

at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)

at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:300)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:81)

at java.util.concurrent.FutureTask.run(FutureTask.java:262)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:744)

緣由:hadoop的系統環境變量沒有正確設置致使的

解決:重寫YARNRunner

參考連接:http://blog.csdn.net/fansy1990/article/details/27526167

即將全部%XX%替換成$XX,將\\替換成/,我這裏處理的更完整一點,截圖:

第四種:Invalid host name: local host is: (unknown); destination host is

緣由:本應該運行在遠端master上的端口沒有設置徹底

解決:

將hdfs-site.xml、mapred-site.xml、yarn-site.xml中的屬性在程序中顯式設置爲master節點(IP設置)

截圖:


第五種:在192.168.99.101:8088(查看全部Application)中,點開某個datanode節點,沒法找到

緣由:由於點開的是linuxX-clound,系統沒有找到linuxX-clound對應的IP地址,這裏,設置windows的hosts文件,將在master或者slaves中設置的hosts拷貝過來

即:

192.168.99.101 linux0-cloud
192.168.99.100 linux1-cloud
192.168.99.102 linux2-cloud
192.168.99.103 linux3-cloud

,由此,修改完hosts後,咱們能夠將conf中的設置遠端地址改成linux0-cloud(master節點)

補充:在解決了第三種錯誤後,這個錯誤應該消失,若是沒消失,在Mapreduce-site.xml和Yarn-site.xml都加入如下內容:

<property>
   <name>mapreduce.application.classpath</name>
   <value>
   /home/linux1/hadoop/hadoop-2.7.1/etc/hadoop,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/common/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/common/lib/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/hdfs/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/hdfs/lib/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/mapreduce/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/mapreduce/lib/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/yarn/*,
   /home/linux1/hadoop/hadoop-2.7.1/share/hadoop/yarn/lib/*
   </value>
</property>

第六種:java.lang.RuntimeException:java.lang.ClassNotFoundException

緣由:mapreduce程序在hadoop中的運行機理:mapreduce框架在運行Job時,爲了使得各個從節點上能執行task任務(即map和reduce函數),會在做業提交時將運行做業所需的資源,包括做業jar文件、配置文件和計算所得的輸入劃分,複製到HDFS上一個以做業ID命名的目錄中,而且做業jar的副本較多,以保證tasktracker運行task時能夠訪問副本,執行程序。程序不是以jar的形式運行的,因此不會上傳jar到HDFS中,以至節點外的全部節點在執行task任務時上不能找到map和reduce類,因此在運行task時會出現錯誤。

解決:臨時生成jar包,設置路徑

參考連接:http://m.blog.csdn.net/blog/le119126/40983213

將以上bug解決後,運行成功!


我在git osc上傳了本身的wordcount代碼,你們能夠看看https://git.oschina.net/xingkong/HadoopExplorer

相關文章
相關標籤/搜索