2015-08-24 86 views
1

我已經在Ubuntu Linux 15.04上安裝了hadoop 2.6並且運行正常但是,當我運行一個示例測試mapreduce程序,其給出以下錯誤:Hadoop Mapreduce錯誤輸入路徑不存在:hdfs:// localhost:54310/user/hduser/input「

org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:54310/user/hduser/input. 

請幫我下面是錯誤的完整細節

[email protected]:/usr/local/hadoop/sbin$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount input output 
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/share/java/jayatanaag.jar 
15/08/24 15:22:37 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
15/08/24 15:22:38 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id 
15/08/24 15:22:38 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId= 
15/08/24 15:22:39 INFO mapreduce.JobSubmitter: Cleaning up the staging area file:/app/hadoop/tmp/mapred/staging/hduser1122930879/.staging/job_local1122930879_0001 
org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:54310/user/hduser/input 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:321) 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:264) 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:385) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:597) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:614) 
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:492) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1296) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1293) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628) 
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1293) 
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1314) 
    at org.apache.hadoop.examples.WordCount.main(WordCount.java:87) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71) 
    at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144) 
    at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

回答

3

好像你提到一個錯誤的輸入路徑Hadoop是搜索輸入。路徑在/user/hduser/input。Hadoop也遵循像樹結構的unix。如果你只是提一個目錄input它將被視爲/user/{username}/input

hadoop fs -mkdir -p /user/hduser/input 

hadoop fs -put <datafile> /user/hduser/input 
+0

應該是什麼? –

1

在執行hadoop作業之前,您必須創建並上傳您的輸入。例如,如果你需要上傳input.txt文件,你應該做到以下幾點:

$HADOOP_HOME/bin/hdfs dfs -mkdir /user/hduser/input 
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal $HADOOP_HOME/input.txt /user/hduser/input/input.txt 

第一行創建的目錄,以及其他上傳輸入文件到HDFS(Hadoop的fylesystem)。

0

當您使用輸入和輸出文件/目錄編譯任何jar文件時,應該確保輸入文件已經創建(在指定的路徑中)並且輸出文件不存在。

如果你想給一個文本文件作爲輸入文件,首先從本地文件系統中的文本文件複製到HDFS,並通過使用以下命令

編譯它
hadoop fs -copyFromLocal /input.txt /user/hduser/input.txt 
/usr/local/hadoop/sbin$ yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /user/hduser/input.txt /output 

/input.txt可以被替換任何文本文件的地址。

0

如果您發現日誌/bin/bash: /bin/java: No such file or directory,設置JAVA_HOME在等/ Hadoop的/ hadoop-env.sh

1

如果你看到這條路徑(文件)身體和仍然得到錯誤,你可能已經與本地文件系統混淆和Hadoop分佈式文件系統(HDFS)。爲了運行這個map-reduce,這個文件應該位於HDFS中(只在本地文件系統內部定位不會)。

您可以通過此命令將本地文件系統文件導入HDFS。

hadoop fs -put <local_file_path> <HDFS_diresctory> 

您通過此命令確認您導入的文件存在於HDFS中。

hadoop fs -ls <HDFS_path> 
+1

這是使用HDFS模型時的命令。 grunt> pig -x mapreduce –

1

您需要在本地模式下啓動豬,而不是羣集節點:

豬-x當地

+0

這是在我們使用localmode時使用的。如果我們不運行這個命令,那麼它會給錯誤文件找不到... –

0

程序無法找到輸入Hadoop的路徑。它在本地系統文件中搜索,而不是Hadoop的DFS。

當您的程序能夠找到HDFS位置時,此問題將消失。我們需要讓程序瞭解配置文件中給出的HDFS位置。爲此,請在程序代碼中添加這些行。

Configuration conf = new Configuration(); 

conf.addResource(new Path("/usr/local/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml")); 
conf.addResource(new Path("/usr/local/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml")); 
相關問題