2014-12-15 13 views
25

Tôi đã cài đặt cloudera CDH 5 bằng cách sử dụng trình quản lý cloudera.Không thể đọc tệp từ HDFS bằng cách sử dụng Spark

tôi có thể dễ dàng làm

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

lệnh trên này sẽ in tập tin toàn txt trên console.

bây giờ tôi bắt đầu vỏ tia lửa và nói

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

Bây giờ tôi nhận được một lỗi

Spark bối cảnh có sẵn như là 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) 

Tại sao tôi gặp lỗi này? Tôi có thể đọc cùng một tập tin bằng cách sử dụng các lệnh hadoop?

Trả lời

50

Bằng cách nào đó tôi giải quyết các câu hỏi sau khi đăng chúng lên stackoverflow.

đây là giải pháp

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

vậy làm thế nào tôi tìm hiểu nn1home: 8020?

chỉ tìm kiếm các tập tin lõi-site.xml và tìm kiếm xml fs.defaultFS yếu tố

+0

sự core-site.xml luôn nằm trong thư mục conf hoặc trên bản cài đặt Spark cục bộ hoặc cụm. –

+2

đối với tệp cấu hình của tôi là tại '' '$ HADOOP_HOME/etc/hadoop/core-site.xml''' – Serge

+0

Nếu không có mn1home: 8020, cần là sc.textFile (" hdfs: //// input/war -and-peace.txt ") – z31415

4

nếu bạn muốn sử dụng sc.textFile("hdfs://...") bạn cần phải cung cấp đường dẫn đầy đủ (đường dẫn tuyệt đối), trong ví dụ của bạn đó sẽ là "nn1home: 8020/.."

Nếu bạn muốn làm cho nó đơn giản, sau đó chỉ cần sử dụng sc.textFile("hdfs:/input/war-and-peace.txt")

đó là chỉ có một /

1

tôi cũng đang sử dụng CDH5. Đối với tôi con đường đầy đủ, e "hdfs: // nn1home: 8020" không hoạt động vì một số lý do lạ. Hầu hết các ví dụ cho thấy đường dẫn như thế.

tôi đã sử dụng lệnh như

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

o/p của lệnh trên:

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

textFile.count 

res1: Long = 58973 

và điều này hoạt động tốt đối với tôi.

1

này làm việc cho tôi

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

Nếu bạn bắt đầu spark với HADOOP_HOME đặt trong spark-env.sh, tia lửa sẽ biết được nơi để tìm kiếm các file cấu hình HDFS.

Trong trường hợp này, spark đã biết vị trí của nút tên/mã dữ liệu của bạn và chỉ dưới đây sẽ hoạt động tốt để truy cập tệp hdfs;

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

Bạn có thể tạo myhdfsdirectory như sau;

hdfs dfs -mkdir /myhdfsdirectory 

và từ hệ thống tập tin địa phương của bạn, bạn có thể di chuyển myfiletoprocess.txt của bạn để HDFS thư mục sử dụng dưới lệnh

hdfs dfs -copyFromLocal mylocalfile /myhdfsdirectory/myfiletoprocess.txt 
2

Bạn chưa đi qua một chuỗi url thích hợp.

  • hdfs:// - giao thức loại
  • localhost - địa chỉ ip (có thể khác nhau cho bạn ví dụ -. 127.56.78.4)
  • 54310 - cổng số
  • /input/war-and-peace.txt - Toàn bộ đường dẫn đến tập tin bạn muốn tải.

Cuối cùng URL nên như thế này

hdfs://localhost:54310/input/war-and-peace.txt 
1
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\") 

mã trên đọc tất cả các file HDFS từ thư mục và lưu nó tại địa phương trong c: // thư mục dummy.

2

này sẽ làm việc:

val textfile = sc.textFile ("HDFS: // localhost: 9000/user/INPUT.TXT")

đây, bạn có thể mất localhost: 9000 từ lõi hadoop -giá trị tham số fs.defaultFS của tệp cấu hình -site.xml.

0

Nó có thể là vấn đề của đường dẫn tệp hoặc URL và cổng hdfs. Giải pháp: Tệp core-site.xml mở đầu tiên từ vị trí $ HADOOP_HOME/etc/hadoop và kiểm tra giá trị của thuộc tính "fs.defaultFS". Giả sử giá trị là hdfs: // localhost: 9000 và vị trí tệp trong hdfs là: /home/usr/abc/fileName.txt Sau đó, URL tệp sẽ là: hdfs: // localhost: 9000/home/usr/abc/filename.txt và lệnh sau đây sử dụng để đọc tập tin từ HDFS

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

Các vấn đề liên quan