Example usage for org.apache.hadoop.hdfs DFSClient.DFSDataInputStream close

List of usage examples for org.apache.hadoop.hdfs DFSClient.DFSDataInputStream close

Introduction

In this page you can find the example usage for org.apache.hadoop.hdfs DFSClient.DFSDataInputStream close.

Prototype

@Override
public synchronized void close() throws IOException 

Source Link

Document

Close the file system, abandoning all of the leases and files being created and close connections to the namenode.

Usage

From source file:org.hypertable.DfsBroker.hadoop.HadoopBroker.java

License:Open Source License

/**
 *
 *//*from w  w  w.  j a  v a  2 s. c  o  m*/
public void Length(ResponseCallbackLength cb, String fileName, boolean accurate) {
    int error = Error.OK;
    long length;

    try {
        if (mVerbose)
            log.info("Getting length of file '" + fileName + "' (accurate: " + accurate + ")");

        Path path = new Path(fileName);
        if (accurate) {
            DFSClient.DFSDataInputStream in = (DFSClient.DFSDataInputStream) mFilesystem.open(path);
            length = in.getVisibleLength();
            in.close();
        } else {
            length = mFilesystem.getFileStatus(path).getLen();
        }

        error = cb.response(length);
    } catch (FileNotFoundException e) {
        log.severe("File not found: " + fileName);
        error = cb.error(Error.DFSBROKER_BAD_FILENAME, e.getMessage());
    } catch (IOException e) {
        log.severe("I/O exception while getting length of file '" + fileName + "' - " + e.toString());
        error = cb.error(Error.DFSBROKER_IO_ERROR, e.toString());
    }

    if (error != Error.OK)
        log.severe("Error sending LENGTH response back (error=" + error + ", filename=" + fileName
                + ", accurate=" + accurate + ")");
}

From source file:org.hypertable.FsBroker.hadoop.HadoopBroker.java

License:Open Source License

/**
 *
 *//* w  ww. j a v  a2  s .  co m*/
public void Length(ResponseCallbackLength cb, String fileName, boolean accurate) {
    int error = Error.OK;
    String message = "";
    long length = 0;

    /* - this floods the log if Replication is enabled
    if (mVerbose)
    log.info("Getting length of file '" + fileName +
            "' (accurate: " + accurate + ")"); */

    Path path = new Path(fileName);

    for (int i = 0; i < MAX_RETRIES; i++) {
        try {
            if (accurate) {
                DFSClient.DFSDataInputStream in = (DFSClient.DFSDataInputStream) mFilesystem.open(path);
                length = in.getVisibleLength();
                in.close();
            } else {
                length = mFilesystem.getFileStatus(path).getLen();
            }
            // success
            error = Error.OK;
            message = "";
            break;
        } catch (FileNotFoundException e) {
            error = Error.DFSBROKER_FILE_NOT_FOUND;
            message = "File not found: " + e.getMessage();
            break;
        } catch (IOException e) {
            error = Error.DFSBROKER_IO_ERROR;
            message = "IOException: " + e.toString();
            break;
        } catch (java.lang.NullPointerException e) {
            // workaround for an HDFS bug
            // https://issues.apache.org/jira/browse/HDFS-3533?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13296083#comment-13296083
            log.info("Catching NullPointerException when getting length " + "of '" + fileName + "' (accurate: "
                    + accurate + ")");
            e.printStackTrace();
            try {
                Thread.sleep(1000);
            } catch (java.lang.InterruptedException ex) {
            }
            error = Error.DFSBROKER_IO_ERROR;
            message = "File not found (HDFS exception): " + e.getMessage();
            // fall through and retry
        }
    }

    if (error == Error.OK)
        error = cb.response(length);
    else {
        log.severe("Error getting LENGTH of " + fileName + ": error code " + error + ", message: " + message);
        error = cb.error(error, message);
    }

    if (error != Error.OK)
        log.severe("Error sending LENGTH response back (error=" + error + ", filename=" + fileName
                + ", accurate=" + accurate + ")");
}