it-swarm.com.de

Datei kann nicht mit Spark aus HDFS gelesen werden

Ich habe Cloudera CDH 5 mit dem Cloudera Manager installiert.

Das kann ich leicht machen

hadoop fs -ls /input/war-and-peace.txt
hadoop fs -cat /input/war-and-peace.txt

mit diesem Befehl wird die gesamte TXT-Datei auf der Konsole gedruckt.

jetzt starte ich die funkenschale und sage

val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
textFile.count

Jetzt bekomme ich einen Fehler

Spark-Kontext als sc verfügbar.

scala> val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
2014-12-14 15:14:57,874 INFO  [main] storage.MemoryStore (Logging.scala:logInfo(59)) - ensureFreeSpace(177621) called with curMem=0, maxMem=278302556
2014-12-14 15:14:57,877 INFO  [main] storage.MemoryStore (Logging.scala:logInfo(59)) - Block broadcast_0 stored as values in memory (estimated size 173.5 KB, free 265.2 MB)
textFile: org.Apache.spark.rdd.RDD[String] = hdfs://input/war-and-peace.txt MappedRDD[1] at textFile at <console>:12

scala> textFile.count
2014-12-14 15:15:21,791 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 0 time(s); maxRetries=45
2014-12-14 15:15:41,905 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 1 time(s); maxRetries=45
2014-12-14 15:16:01,925 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 2 time(s); maxRetries=45
2014-12-14 15:16:21,983 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 3 time(s); maxRetries=45
2014-12-14 15:16:42,001 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 4 time(s); maxRetries=45
2014-12-14 15:17:02,062 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 5 time(s); maxRetries=45
2014-12-14 15:17:22,082 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 6 time(s); maxRetries=45
2014-12-14 15:17:42,116 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 7 time(s); maxRetries=45
2014-12-14 15:18:02,138 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 8 time(s); maxRetries=45
2014-12-14 15:18:22,298 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 9 time(s); maxRetries=45
2014-12-14 15:18:42,319 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 10 time(s); maxRetries=45
2014-12-14 15:19:02,354 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 11 time(s); maxRetries=45
2014-12-14 15:19:22,373 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 12 time(s); maxRetries=45
2014-12-14 15:19:42,424 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 13 time(s); maxRetries=45
2014-12-14 15:20:02,446 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 14 time(s); maxRetries=45
2014-12-14 15:20:22,512 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 15 time(s); maxRetries=45
2014-12-14 15:20:42,515 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 16 time(s); maxRetries=45
2014-12-14 15:21:02,550 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 17 time(s); maxRetries=45
2014-12-14 15:21:22,558 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 18 time(s); maxRetries=45
2014-12-14 15:21:42,683 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 19 time(s); maxRetries=45
2014-12-14 15:22:02,702 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 20 time(s); maxRetries=45
2014-12-14 15:22:22,832 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 21 time(s); maxRetries=45
2014-12-14 15:22:42,852 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 22 time(s); maxRetries=45
2014-12-14 15:23:02,974 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 23 time(s); maxRetries=45
2014-12-14 15:23:22,995 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 24 time(s); maxRetries=45
2014-12-14 15:23:43,109 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 25 time(s); maxRetries=45
2014-12-14 15:24:03,128 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 26 time(s); maxRetries=45
2014-12-14 15:24:23,250 INFO  [main] ipc.Client (Client.Java:handleConnectionTimeout(814)) - Retrying connect to server: input/92.242.140.21:8020. Already tried 27 time(s); maxRetries=45
Java.net.ConnectException: Call From dn1home/192.168.1.21 to input:8020 failed on connection exception: Java.net.ConnectException: Connection refused; For more details see:  http://wiki.Apache.org/hadoop/ConnectionRefused
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:57)
        at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:526)
        at org.Apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.Java:783)
        at org.Apache.hadoop.net.NetUtils.wrapException(NetUtils.Java:730)
        at org.Apache.hadoop.ipc.Client.call(Client.Java:1415)

Warum habe ich diesen Fehler erhalten? Ich kann dieselbe Datei mit hadoop-Befehlen lesen?

28
Knows Not Much

Hier ist die Lösung

sc.textFile("hdfs://nn1home:8020/input/war-and-peace.txt")

Wie habe ich nn1home: 8020 herausgefunden?

Suchen Sie einfach nach der Datei core-site.xml und suchen Sie nach dem XML-Element fs.defaultFS.

53
Knows Not Much

Das wird funktionieren:

val textFile = sc.textFile("hdfs://localhost:9000/user/input.txt")

Hier können Sie localhost:9000 aus dem core-site.xml-Parameterwert der hadoop fs.defaultFS config-Datei entnehmen.

6
Divyang Shah

wenn Sie sc.textFile("hdfs://...") verwenden möchten, müssen Sie den vollständigen Pfad (absoluter Pfad) angeben. In Ihrem Beispiel wäre das "nn1home: 8020/..".

Wenn Sie es einfach machen möchten, verwenden Sie einfach sc.textFile("hdfs:/input/war-and-peace.txt")

Das ist nur ein /

5
luckysyd

Sie übergeben keinen richtigen URL-String.

  • hdfs:// - Protokolltyp
  • localhost - IP-Adresse (kann für Sie anders sein, z. B. - 127.56.78.4)
  • 54310 - Portnummer
  • /input/war-and-peace.txt - Vollständiger Pfad zu der Datei, die Sie laden möchten.

Schließlich sollte die URL so sein

hdfs://localhost:54310/input/war-and-peace.txt
2
Shashi Sharma

Wenn Sie spark mit HADOOP_HOME in spark-env.sh gestartet haben, würde spark wissen, wo nach hdfs-Konfigurationsdateien gesucht werden muss.

In diesem Fall kennt spark bereits den Speicherort Ihres Namens/Datanodes und sollte nur unten funktionieren, um auf HDFS-Dateien zuzugreifen.

sc.textFie("/myhdfsdirectory/myfiletoprocess.txt")

Sie können Ihr myhdf-Verzeichnis wie folgt erstellen.

hdfs dfs -mkdir /myhdfsdirectory

und von Ihrem lokalen Dateisystem aus können Sie Ihre Datei myfiletoprocess.txt mit dem folgenden Befehl in das HDFS-Verzeichnis verschieben

hdfs dfs -copyFromLocal mylocalfile /myhdfsdirectory/myfiletoprocess.txt
1
khawarizmi
 val conf = new SparkConf().setMaster("local[*]").setAppName("HDFSFileReader")
conf.set("fs.defaultFS", "hdfs://hostname:9000")
val sc = new SparkContext(conf)
val data = sc.textFile("hdfs://hostname:9000/hdfspath/")
data.saveAsTextFile("C:\\dummy\")

der obige Code liest alle HDFS-Dateien aus dem Verzeichnis und speichert sie lokal im Ordner c: // dummy.

1

Das hat bei mir funktioniert

   logFile = "hdfs://localhost:9000/sampledata/sample.txt"
1
user3603105

Es kann sich auch um den Dateipfad oder die URL und den HDFS-Port handeln. 

Lösung: Öffnen Sie zunächst die core-site.xml-Datei vom Speicherort $HADOOP_HOME/etc/hadoop aus und überprüfen Sie den Wert der Eigenschaft fs.defaultFS. Nehmen wir an, der Wert ist hdfs://localhost:9000 und der Dateispeicherort in hdfs ist /home/usr/abc/fileName.txt. Dann die Datei-URL wird Folgendes sein: hdfs://localhost:9000/home/usr/abc/fileName.txt und der folgende Befehl zum Lesen der Datei aus HDFS:

var result= scontext.textFile("hdfs://localhost:9000/home/usr/abc/fileName.txt", 2)
1
Rajeev Rathor

Ich benutze auch CDH5. Für mich funktioniert der vollständige Pfad i, e "hdfs: // nn1home: 8020" aus irgendeinem seltsamen Grund nicht. Das meiste Beispiel zeigt den Weg so.

Ich habe den Befehl gerne benutzt 

val textFile=sc.textFile("hdfs:/input1/Card_History2016_3rdFloor.csv")

o/p des obigen Befehls: 

textFile: org.Apache.spark.rdd.RDD[String] = MapPartitionsRDD[1] at textFile at <console>:22

textFile.count

res1: Long = 58973  

und das funktioniert gut für mich.

1
Unisol118