2012-05-04 31 views
18

Tôi đang thực hiện các Hadoop Độc Node cụm trên máy tính của tôi bằng cách làm theo Michael Noll's tutorial và đã đi qua lỗi sao chép dữ liệu:dữ liệu Replication lỗi trong Hadoop

Dưới đây là thông báo lỗi đầy đủ:

> [email protected]:~/hadoop$ bin/hadoop dfs -copyFromLocal 
> tmp/testfiles testfiles 
> 
> 12/05/04 16:18:41 WARN hdfs.DFSClient: DataStreamer Exception: 
> org.apache.hadoop.ipc.RemoteException: java.io.IOException: File 
> /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to 
> 0 nodes, instead of 1 at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) 
>  at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) 
>  at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>  at java.lang.reflect.Method.invoke(Method.java:597)  at 
> org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)  at 
> java.security.AccessController.doPrivileged(Native Method) at 
> javax.security.auth.Subject.doAs(Subject.java:396) at 
> org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) 
> 
>  at org.apache.hadoop.ipc.Client.call(Client.java:740) at 
> org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220) at 
> $Proxy0.addBlock(Unknown Source) at 
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>  at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>  at java.lang.reflect.Method.invoke(Method.java:597)  at 
> org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) 
>  at 
> org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
>  at $Proxy0.addBlock(Unknown Source)  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:2937) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2819) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2102) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2288) 
> 
> 12/05/04 16:18:41 WARN hdfs.DFSClient: Error Recovery for block null 
> bad datanode[0] nodes == null 12/05/04 16:18:41 WARN hdfs.DFSClient: 
> Could not get block locations. Source file 
> "/user/hadoop/testfiles/testfiles/file1.txt" - Aborting... 
> copyFromLocal: java.io.IOException: File 
> /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to 
> 0 nodes, instead of 1 12/05/04 16:18:41 ERROR hdfs.DFSClient: 
> Exception closing file /user/hadoop/testfiles/testfiles/file1.txt : 
> org.apache.hadoop.ipc.RemoteException: java.io.IOException: File 
> /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to 
> 0 nodes, instead of 1 at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) 
>  at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) 
>  at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>  at java.lang.reflect.Method.invoke(Method.java:597)  at 
> org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)  at 
> java.security.AccessController.doPrivileged(Native Method) at 
> javax.security.auth.Subject.doAs(Subject.java:396) at 
> org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) 
> 
> org.apache.hadoop.ipc.RemoteException: java.io.IOException: File 
> /user/hadoop/testfiles/testfiles/file1.txt could only be replicated to 
> 0 nodes, instead of 1 at 
> org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1271) 
>  at 
> org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) 
>  at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>  at java.lang.reflect.Method.invoke(Method.java:597)  at 
> org.apache.hadoop.ipc.RPC$Server.call(RPC.java:508)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)  at 
> org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)  at 
> java.security.AccessController.doPrivileged(Native Method) at 
> javax.security.auth.Subject.doAs(Subject.java:396) at 
> org.apache.hadoop.ipc.Server$Handler.run(Server.java:953) 
> 
>  at org.apache.hadoop.ipc.Client.call(Client.java:740) at 
> org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:220) at 
> $Proxy0.addBlock(Unknown Source) at 
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
>  at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
>  at java.lang.reflect.Method.invoke(Method.java:597)  at 
> org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) 
>  at 
> org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
>  at $Proxy0.addBlock(Unknown Source)  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:2937) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2819) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2102) 
>  at 
> org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2288) 

Ngoài ra khi tôi thực hiện:

bin/stop-all.sh 

Nó nói rằng mã dữ liệu chưa được bắt đầu và do đó không thể dừng lại. Mặc dù, đầu ra của jps cho biết mã dữ liệu có mặt.

tôi đã cố gắng định dạng namenode, thay đổi chủ sở hữu quyền, nhưng nó dường như không làm việc. Hy vọng tôi không bỏ lỡ bất kỳ thông tin liên quan nào khác.

Xin cảm ơn trước.

Trả lời

25

Giải pháp hiệu quả đối với tôi là chạy từng nút và mã dữ liệu một và không cùng nhau sử dụng bin/start-all.sh. Điều gì xảy ra khi sử dụng phương pháp này là lỗi có thể nhìn thấy rõ ràng nếu bạn gặp phải một số vấn đề trong việc thiết lập các nút dữ liệu trên mạng và nhiều bài viết trên stackoverflow cho rằng nút tên yêu cầu một thời gian để khởi động, do đó, cần phải có thời gian để bắt đầu trước khi bắt đầu các nút dữ liệu. Ngoài ra, trong trường hợp này, tôi đã gặp sự cố với các id khác nhau của các nút tên và các nút dữ liệu mà tôi đã phải thay đổi các id của nút dữ liệu có cùng id như nút tên.

Bước theo bước thủ tục sẽ là:

  1. Bắt đầu namenode bin/hadoop namenode. Kiểm tra lỗi, nếu có.
  2. Bắt đầu các mã dữ liệu bin/hadoop datanode. Kiểm tra lỗi, nếu có.
  3. Bây giờ bắt đầu theo dõi nhiệm vụ theo dõi, việc sử dụng 'bin/start-mapred.sh'
7

Nhìn vào nút tên của bạn (có thể là http://localhost:50070) và xem có bao nhiêu datanodes nó nói bạn có.

Nếu đó là 0, thì mã dữ liệu của bạn không chạy hoặc nó không được định cấu hình để kết nối với nút tên.

Nếu đó là 1, hãy kiểm tra xem còn bao nhiêu dung lượng trống trong DFS. Nó có thể là các nút dữ liệu không có bất cứ nơi nào nó có thể ghi dữ liệu (dir dữ liệu không tồn tại, hoặc không có quyền ghi).

+0

cảm ơn, tôi thực sự tìm thấy giải pháp. Đó là vì datanode và namenode mất thời gian để bắt đầu và thay vì thực thi 'bin/start-all.sh', tôi đã làm' bin/hadoop tên_kênh', 'bin/hadoop datanode' và sau đó là' bin/start-mapred.sh '. –

4

Mặc dù giải quyết, tôi thêm này cho độc giả trong tương lai. Lời khuyên của Cody về việc kiểm tra sự bắt đầu của nút tên và mã dữ liệu là hữu ích, và việc điều tra thêm đã khiến tôi xóa thư mục hadoop-store/dfs. Việc này đã giải quyết được lỗi này cho tôi.

2

Tôi gặp vấn đề tương tự, tôi đã xem nhật ký dữ liệu và có cảnh báo cho rằng dfs.data.dir có quyền không chính xác ... vì vậy tôi chỉ thay đổi chúng và mọi thứ đã hoạt động, đó là loại kỳ dị.

Cụ thể, "dfs.data của tôi.dir "đã được thiết lập để "/ home/hadoop/hd_tmp", và lỗi tôi nhận được:

... 
... 
WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Invalid directory in dfs.data.dir: Incorrect permission for /home/hadoop/hd_tmp/dfs/data, expected: rwxr-xr-x, while actual: rwxrwxr-x 
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: All directories in dfs.data.dir are invalid. 
... 
... 

Vì vậy, tôi chỉ đơn giản là thực hiện các lệnh:

  • tôi dừng lại tất cả các quỷ với" bin/
  • stop-all.sh"
  • Thay đổi các điều khoản của thư mục với "chmod -R 755/home/hadoop/hd_tmp"
  • tôi đã định dạng một lần nữa để các namenode với "bin/hadoop namenode -format".
  • Tôi đã khởi động lại ma quỷ "bin/start-all.sh"
  • Và được, mã dữ liệu đã được thiết lập và hoạt động! (Tôi đã kiểm tra nó bằng lệnh "jsp", trong đó một quá trình có tên là DataNode được hiển thị).

Và sau đó mọi thứ hoạt động tốt.

0

Tôi gặp phải vấn đề tương tự. Khi tôi xem localhost: 50070, dưới tóm tắt cụm, tất cả các thuộc tính được hiển thị là 0 trừ "DFS Used% 100". Thông thường, tình trạng này xảy ra vì có một số sai lầm trong ba tệp * -site.xml dưới tệp HADOOP_INSTALL/conf và máy chủ lưu trữ.

Trong trường hợp của tôi, nguyên nhân không thể giải quyết tên máy chủ. Tôi đã giải quyết được sự cố đơn giản bằng cách thêm "IP_Address hostname" vào /etc/hosts.

+0

Bạn có nghiêm túc không? Thêm "127.0.0.1 tên máy chủ" vào **/etc/hosts ** có thể gây ra lỗi ** Bị từ chối kết nối **. http://wiki.apache.org/hadoop/ConnectionRefused – zeekvfu

+0

Tôi không biết tại sao tôi viết 127.0.0.1 tại thời điểm đó. Hiện tại không có mục nhập nào trong/etc/hosts của tôi. Tôi cho rằng tôi sẽ viết " tên máy chủ" và đã phạm sai lầm. Xin lỗi cho những người bị lừa bởi bình luận này. – leodream

+0

+1 để cập nhật câu trả lời của bạn. :-) – zeekvfu

1

Trong trường hợp của tôi, tôi đặt sai một điểm đến cho dfs.name.dirdfs.data.dir. Định dạng chính xác là

<property> 
<name>dfs.name.dir</name> 
<value>/path/to/name</value> 
</property> 

<property> 
<name>dfs.data.dir</name> 
<value>/path/to/data</value> 
</property> 
1

Tôi đã xóa các thuộc tính thừa trong hdfs-site.xml và sau đó vấn đề này đã biến mất. Hadoop cần cải thiện thông báo lỗi của họ. Tôi đã thử từng giải pháp trên và không có giải pháp nào hiệu quả.

0

Trong trường hợp của tôi, tôi đã phải xóa:

/tmp/hadoop-<user-name> thư mục và định dạng và bắt đầu sử dụng sbin/start-dfs.sh

sbin/start-yarn.sh

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