Ne peut pas Lire un fichier à partir de HDFS à l'aide de l'Étincelle
J'ai installé cloudera CDH 5 à l'aide de cloudera manager.
Je peux facilement faire
hadoop fs -ls /input/war-and-peace.txt
hadoop fs -cat /input/war-and-peace.txt
cette commande ci-dessus va imprimer l'ensemble du fichier txt sur la console.
maintenant je commence l'étincelle shell et dire
val textFile = sc.textFile("hdfs://input/war-and-peace.txt")
textFile.count
Maintenant, je reçois une erreur
Étincelle contexte disponible en sc.
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)
Pourquoi j'ai cette erreur? Je suis capable de lire le même fichier en utilisant les commandes hadoop?
Vous devez vous connecter pour publier un commentaire.
Voici la solution
Comment ai-je savoir nn1home:8020?
Il suffit de chercher pour le fichier
core-site.xml
et recherchez l'élément xmlfs.defaultFS
$HADOOP_HOME/etc/hadoop/core-site.xml
si vous souhaitez utiliser
sc.textFile("hdfs://...")
vous devez donner le chemin d'accès complet(chemin absolu), dans votre exemple, ce serait de la "nn1home:8020/.."Si vous voulez faire simple, alors il suffit d'utiliser
sc.textFile("hdfs:/input/war-and-peace.txt")
C'est seulement l'un
/
Cela fonctionne:
Ici, vous pouvez prendre
localhost:9000
de hadoopcore-site.xml
fichier de config dufs.defaultFS
valeur de paramètre.Vous n'êtes pas en passant une url propre chaîne.
hdfs://
- type de protocolelocalhost
- adresse ip(peut être différent pour vous par exemple. - 127.56.78.4)54310
- numéro de port/input/war-and-peace.txt
- Chemin d'accès complet vers le fichier que vous souhaitez charger.Enfin, l'URL doit être comme ceci
Je suis également en utilisant CDH5. Pour moi, le chemin d'accès complet i,e "hdfs://nn1home:8020" ne fonctionne pas pour une raison étrange. La plupart de ces exemples montre le chemin comme ça.
J'ai utilisé la commande comme
o/p de la commande ci-dessus:
et cela fonctionne très bien pour moi.
Cela a fonctionné pour moi
Si vous avez commencé à étincelle avec HADOOP_HOME ensemble dans spark-env.sh l'étincelle ne savez pas où chercher pour hdfs fichiers de configuration.
Dans ce cas étincelle sait déjà emplacement de votre namenode/datanode et seulement ci-dessous devrait fonctionner correctement pour accéder à des fichiers hdfs;
Vous pouvez créer votre myhdfsdirectory comme ci-dessous;
et à partir de votre système de fichiers local, vous pouvez déplacer vos myfiletoprocess.txt pour hdfs répertoire à l'aide de commande ci-dessous
le code ci-dessus lit tous les fichiers hdfs de répertoire et l'enregistrer localement dans c://dummy dossier.
Il pourrait être question de chemin d'accès au fichier ou une URL et hdfs port.
Solution:
Ouvrez d'abord
core-site.xml
fichier à partir d'un emplacement$HADOOP_HOME/etc/hadoop
et vérifier la valeur de la propriétéfs.defaultFS
.Disons que la valeur est
hdfs://localhost:9000
et l'emplacement du fichier dans hdfs est/home/usr/abc/fileName.txt
.Ensuite, le fichier de l'URL sera :
hdfs://localhost:9000/home/usr/abc/fileName.txt
et à la suite de la commande utilisé pour lire le fichier à partir de hdfs: