2016-11-15 3 views
1

Ich versuche das Wordcount-Problem von hadoop zu lösen, da ich zum ersten Mal damit arbeite. Ich habe die Anweisungen mit Videos gefolgt und sogar viele Dinge gelesen, bevor ich das Programm ausführte.
Aber immer noch habe ich eine Ausnahme beim Ausführen von Hadoop festgestellt. Hier ist die Ausnahme, die ich bekam:Hadoop-Ausnahme.

[email protected]:~/hadoop/hadoop$ bin/hadoop jar '/home/aims/Desktop/WordCount.jar' wordcount /usr/hadoop/input /usr/hadoop/output 
16/11/15 11:29:03 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 
16/11/15 11:29:03 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 
16/11/15 11:29:06 INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/aims/.staging/job_1479184145300_0003 
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/aims/wordcount 
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287) 
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229) 
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeOldSplits(JobSubmitter.java:328) 
    at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:320) 
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) 
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287) 
    at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:575) 
    at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:570) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:570) 
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:561) 
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:870) 
    at WordCount.run(WordCount.java:29) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at WordCount.main(WordCount.java:36) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 

Jetzt verstehe ich nicht, wie man das löst. Ich habe versucht jeden Link im Internet dazu zu nutzen aber keine Verwendung.
Ich bin derzeit mit Ubuntu 16.04 OS und Hadoop 2.7.3
Meine Java Version ist:

openjdk version "1.8.0_111" 
OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2ubuntu0.16.04.2-b14) 
OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode) 

Hoffnung, eine Lösung für diese Ausnahme zu hören.

Antwort

0

Ich habe die Antwort bekommen.

Was ich oben erwähnt habe, ist eine falsche Syntax, um das Glas auf hadoop auszuführen. Da ich etwas argwöhnisch war über die ich in den Befehl verwendet. Und sogar die Ausnahme stieg nur unter Verwendung dieses. Also habe ich es entfernt und die Verzeichnisse von Hadoop benutzt. Und es lief.
Das Folgende ist die richtige Art und Weise auszuführen:

[email protected]:~/hadoop/hadoop$ bin/hadoop jar '/home/aims/Desktop/WordCount.jar' /myuser/inputdata /myuser/output 

dass so gearbeitet, und ich habe meine Ausgabe im Ausgabeordner.

1

Nun, Datei nicht existiert ...

hdfs://localhost:9000/user/aims/wordcount 

Einer der hdfs-Website oder Kern-Website XML, setzt den HDFS Weg, und wenn Sie noch nichts geändert, dann gibt ist kein /user Verzeichnis in der Wurzel Ihrer Box. Es gibt ein /home/aims Verzeichnis.

Nach Ihrem Befehl versuchen Sie, Eingabe aus dem HDFS-Pfad /usr/hadoop/input zu lesen, aber der Fehler sagt /user/aims/wordcount, was bedeutet, das Problem ist das Eingabeverzeichnis, das Sie im Mapreduce-Code angegeben falsch ist.

+0

Vielen Dank für Ihre Antwort, mein Freund. Ja, ich habe keine Änderungen an der Datei vorgenommen. Eigentlich habe ich Hadoop mit Installer auf der Bitnami-Website installiert und ich dachte, dass das Installationsprogramm alle notwendigen Konfigurationen für die Ausführung des Befehls richtig macht. Bitte lassen Sie mich wissen, ob es eine Lösung dafür gibt. Wenn es da ist bitte bearbeite die Antwort für mich. Ich werde mich freuen, von Ihnen zu hören. Thankx –

+0

Wenn Sie Ambari verwendet haben, dann sollten Sie "localhost" nicht im ersten Knoten Selektor eingegeben haben. Verwenden Sie den vollständigen Hostnamen. Alle Ports sollten im Netzwerkproblem usw. offen sein. Wenn alles andere fehlschlägt, laden Sie die Cloudera-Schnellstart-VM oder die Hortonworks-Sandbox herunter –

+0

Nein, ich verwende Ambari nicht. Ich bin nur ein neuer Benutzer und habe Hadoop mit Installer von Bitnami installiert. Und ich versuche, das Programm vom Terminal aus zu starten. Hoffe das hilft dir. –