HDFS LeaseExpiredException

Ich habe eine Anwendung, die soll das kopieren über eine große Anzahl von Dateien von einer Quelle wie S3 in HDFS. Die Anwendung verwendet apache distcp innerhalb und Kopien für jede einzelne Datei aus der Quelle über streaming in HDFS.

Jede einzelne Datei ist etwa ~1GB, hat 1K Spalten von strings.
Wenn ich wählen Sie zum kopieren über alle Spalten, die schreiben schlägt fehl mit der folgenden Fehlermeldung :-

2014-05-20 23:57:35,939 WARN org.apache.hadoop.hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null
2014-05-20 23:57:35,939 WARN org.apache.hadoop.hdfs.DFSClient: Could not get block locations. Source file "/xyz/2014/01/02/control-Jan-2014-14.gz" - Aborting...
2014-05-20 23:57:54,369 ERROR abc.mapred.distcp.DistcpRunnable: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException: No lease on /xyz/2014/01/02/control-Jan-2014-14.gz File does not exist. [Lease.  Holder: DFSClient_attempt_201403272055_15994_m_000004_0_-1476619343_1, pendingcreates: 4]
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1720)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:1711)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1619)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:736)
    at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:578)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1393)
    at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1389)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
    at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1387)

Ich glaube, dass es ist, weil es wegen der Einnahme von zu viel Zeit zum schreiben einer großen Datei von der Quelle in HDFS. Wenn ich änderungen an der Anwendung zu kopieren, nur über 50,100 oder 200 Spalten, die Anwendung zum Abschluss ausgeführt. Anwendung schlägt fehl, wenn die Anzahl der Spalten, die kopiert werden, für jede Zeile > 200.

Ich habe keine Kontrolle über die Quelle-Dateien.

Ich kann nicht scheinen, etwas zu finden, um den wachsenden Leasing-Ablauf.

Irgendwelche Hinweise ?

Können Sie geben eine Idee, wie das zu nach dem wie lange erhalten Sie diese Ausnahme?
Etwa nach einer minute, wenn die distcp eröffnet hat, den stream mit der source-Datei.
Nur eine minute? Scheint nicht zu sein, weil die Zeit genommen, um zu kopieren. Ich hab das manchmal, wenn die Datei gelöscht wurde, während das kopieren. Sind Sie sicher, einige andere Prozess nicht löschen Sie es?
Ja ich bin mir ziemlich sicher, dass kein anderer Prozess ist, löschen Sie die Dateien.
Bitte beachten Sie, dass es keine solche Fehlermeldung, wenn ich wählen, um zu schreiben, nur bis zu 200 Spalten für jede Zeile in der src-Datei während der Iteration durch den inputStream über bufferedReader. Aber wenn ich darüber hinaus gehen und 200 Reihe, es beginnt zu spucken, dieser Fehler.

InformationsquelleAutor user1084874 | 2014-05-21

Schreibe einen Kommentar