Подтвердить что ты не робот

Не удается прочитать файл с HDFS с помощью Spark

Я установил cloudera CDH 5 с помощью менеджера cloudera.

Я легко могу сделать

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

эта команда будет печатать весь файл txt на консоли.

теперь я запускаю искровую оболочку и говорю

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

Теперь я получаю сообщение об ошибке

Искры контекста доступны как 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)

Почему я получил эту ошибку? Я могу прочитать тот же файл, используя команды hadoop?

4b9b3361

Ответ 1

Как-то я решаю вопросы после публикации их в stackoverflow.

вот решение

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

так как я узнал nn1home: 8020?

просто найдите файл core-site.xml и найдите элемент xml fs.defaultFS

Ответ 2

если вы хотите использовать sc.textFile("hdfs://..."), вам нужно указать полный путь (абсолютный путь), в вашем примере это будет "nn1home: 8020/.."

Если вы хотите сделать это простым, просто используйте sc.textFile("hdfs:/input/war-and-peace.txt")

Только один /

Ответ 3

Вы не передаете правильную строку url.

  • hdfs:// - тип протокола
  • localhost - IP-адрес (может отличаться для вас, например, - 127.56.78.4)
  • 54310 - номер порта
  • /input/war-and-peace.txt - Полный путь к файлу, который вы хотите загрузить.

Наконец, URL-адрес должен выглядеть следующим образом:

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

Ответ 4

это будет работать:

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

здесь вы можете взять localhost: 9000 из файла конфигурации файла конфигурации saoop core-site.xml fs.defaultFS.

Ответ 5

Я также использую CDH5. Для меня полный путь i, e "hdfs://nn1home: 8020" не работает по какой-то странной причине. В большинстве примеров показан такой путь.

Я использовал команду вроде

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

o/p указанной команды:

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

textFile.count

res1: Long = 58973  

и это отлично работает для меня.

Ответ 6

Это сработало для меня

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

Ответ 7

 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\")

приведенный выше код считывает все файлы hdfs из каталога и сохраняет его локально в папке c://dummy.

Ответ 8

Если вы начали искру с помощью HADOOP_HOME, установленного в spark-env.sh, искра могла бы знать, где искать файлы конфигурации hdfs.

В этом случае искра уже знает местоположение вашего namenode/datanode, и только ниже должно работать нормально для доступа к файлам hdfs;

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

Вы можете создать свой myhdfsdirectory, как показано ниже:

hdfs dfs -mkdir /myhdfsdirectory

и из вашей локальной файловой системы вы можете переместить свой файл myfiletoprocess.txt в hdfs, используя следующую команду

hdfs dfs -copyFromLocal mylocalfile /myhdfsdirectory/myfiletoprocess.txt

Ответ 9

Это может быть проблема с файловым путем или URL-адресом и портом hdfs. Решение: Сначала откройте файл core-site.xml из местоположения $HADOOP_HOME/etc/hadoop и проверьте значение свойства "fs.defaultFS". Скажем, значение hdfs://localhost: 9000, а местоположение файла в hdfs:/home/usr/abc/fileName.txt Тогда URL-адрес файла будет: hdfs://localhost: 9000/home/usr/abc/fileName.txt и следующая команда, используемая для чтения файла из hdfs

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