Ich möchte diesen Code ausführen, den ich in Mahout In Action gefunden habe:
%Vor%Ich kompiliere es mit:
%Vor%Ich jar es:
%Vor%Jetzt möchte ich es auf meinem lokalen Hadoop-Knoten ausführen. Ich habe es versucht:
%Vor%Aber ich verstehe:
%Vor%Also habe ich versucht, den Parameter libjars zu verwenden:
%Vor%und habe das gleiche Problem. Ich weiß nicht, was ich noch versuchen soll.
Mein Ziel ist es, in der Lage zu sein, eine .csv-Datei auf dem hadoop fs in eine dünn besetzte Matrix zu lesen und sie dann mit einem zufälligen Vektor zu multiplizieren.
edit: Sieht so aus, als hätte Razvan es bekommen (Hinweis: siehe unten für eine andere Möglichkeit, dies zu tun, die nicht mit deiner Hadoop-Installation verwechselt wird). Als Referenz:
%Vor%und dann:
%Vor%edit: Ich versuche dies zu tun, ohne die Mahout-Gläser in die hadoop lib /
zu kopieren %Vor%und dann natürlich:
%Vor%und wenn ich die Mahout-Job-Datei versuche:
%Vor%Wenn ich versuche, die .jar-Datei einzufügen, die ich gemacht habe:
%Vor%edit: Anscheinend kann ich nur ein Glas nach dem anderen an Hadoop schicken. Das bedeutet, dass ich die Klasse, die ich gemacht habe, in die Mahout-Core-Job-Datei einfügen muss:
%Vor%Und dann:
%Vor%edit: Ok, jetzt kann ich es machen, ohne meine Hadoop-Installation zu stören. Ich habe die .jar in der vorherigen Bearbeitung falsch aktualisiert. Es sollte sein:
%Vor%dann:
%Vor%Sie müssen die JAR-Datei "job" verwenden, die von Mahout bereitgestellt wird. Es packt alle Abhängigkeiten zusammen. Sie müssen auch Ihre Klassen hinzufügen. So funktionieren alle Mahout-Beispiele. Sie sollten Mahout-Jars nicht in die Hadoop-Bibliothek stellen, da diese Art von Programmen ein Programm zu tief in Hadoop "installiert".
Wenn Sie Code für Beispiele aus dem Repository Ссылка übernehmen, enthält er die gebrauchsfertige Datei pom.xml
für Maven. Und wenn Sie Code mit mvn package
kompilieren, wird mia-0.1-job.jar
im Verzeichnis target
erstellt - dieses Archiv enthält alle Abhängigkeiten außer Hadoop, so dass Sie es ohne Probleme auf dem Hadoop-Cluster ausführen können
Was ich getan habe ist, den HADOOP_CLASSPATH mit meinem jar und all den Mahout jar Dateien zu setzen wie unten gezeigt.
export HADOOP_CLASSPATH = / home / xxx / mein.jar: /opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-core-0.7-cdh4. 3.0.jar: /opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-core-0.7-cdh4.3.0-job.jar: / opt / cloudera / Pakete / CDH-4.3.0-1.cdh4.3.0.p0.22 / lib / Mahout / Mahout-Beispiele-0.7-cdh4.3.0.jar: /opt/cloudera/parcels/CDH-4.3.0-1.cdh4 .3.0.p0.22 / lib / mahout / mahout-beispiele-0.7-cdh4.3.0-job.jar: /opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/ mahout / mahout-integration-0.7-cdh4.3.0.jar: /opt/cloudera/parcels/CDH-4.3.0-1.cdh4.3.0.p0.22/lib/mahout/mahout-math-0.7-cdh4.3.0 .jar
Dann konnte ich rennen hadoop com.meinefirma.mahout.CSVtoVector iris / nb / iris1.csv iris / nb / daten / iris.seq
Sie müssen also alle Ihre Gläser und das Mahout-Glas in den HADOOP_CLASSPATH einschließen und dann können Sie Ihre Klasse einfach mit
ausführen
hadoop <classname>