2012-04-03 18 views
8

Tôi có một công việc đơn giản để thu thập thông tin các trang web và lưu trữ chúng vào HDFS. Trình ánh xạ kiểm tra xem một URL đã tồn tại trong HDFS chưa và nếu có, hãy sử dụng nó nếu không tải trang xuống và lưu nó vào HDFS.Cách giải quyết 'tệp chỉ có thể được nhân rộng thành 0 nút, thay vì 1' trong hadoop?

Nếu gặp lỗi mạng (404, v.v.) khi tải xuống trang, thì URL bị bỏ qua hoàn toàn - không được ghi vào HDFS. Bất cứ khi nào tôi chạy một danh sách nhỏ ~ 1000 trang web, tôi luôn luôn dường như gặp phải lỗi này mà treo công việc nhiều lần trong cài đặt phân tán giả của tôi. Điều gì có thể là vấn đề?

Tôi đang chạy Hadoop 0.20.2-cdh3u3.

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/raj/cache/9b4edc6adab6f81d5bbb84fdabb82ac0 could only be replicated to 0 nodes, instead of 1 
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1520) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:665) 
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434) 
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:416) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157) 
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428) 
+0

Tại sao bạn không chỉ cần đặt "dfs.replication" thành 0 trong hdfs-site.xml. Khi bạn đang sử dụng chế độ giả, việc sao chép dữ liệu không phải là mối quan tâm của bạn. –

Trả lời

2

Sự cố là một cá thể FileStystem InputStream không được tiết lộ trong trình ánh xạ được sử dụng để lưu vào bộ nhớ đệm vào hệ thống tệp.

1

Tìm kiếm các nguồn bạn tìm cách thoát ra khỏi không gian trên máy cục bộ (hoặc VM) của bạn. Trường hợp ngoại lệ này xảy ra khi hệ thống không thể tìm đủ nút cho bản sao. Lớp chịu trách nhiệm chọn các nút là ReplicationTargetChooser.

http://javasourcecode.org/html/open-source/hadoop/hadoop-0.20.203.0/org/apache/hadoop/hdfs/server/namenode/ReplicationTargetChooser.java.html

phương pháp chính của nó là chooseTarget (dòng 67).
Sau khi đi sâu vào mã, bạn sẽ nhận được phương thức isGoodTarget, cũng kiểm tra xem có đủ không gian trên nút: Line 404.
Nếu bạn bật nhật ký gỡ lỗi, bạn sẽ thấy thông báo liên quan.

1

Vui lòng kiểm tra nhật ký tên, khớp với dấu thời gian. Nếu có một dấu hiệu về các vấn đề với IPC, có thể bạn sẽ hết "xcievers". Trong trường hợp của tôi, hãy đặt dfs.datanode.max.xcievers trong hdfs-site.xml thành giá trị lớn hơn, tức là 4096 hoặc 8192, đã khắc phục sự cố cụ thể đó cho tôi.

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