Example usage for org.apache.hadoop.io SecureIOUtils openForRead

List of usage examples for org.apache.hadoop.io SecureIOUtils openForRead

Introduction

In this page you can find the example usage for org.apache.hadoop.io SecureIOUtils openForRead.

Prototype

public static FileInputStream openForRead(File f, String expectedOwner, String expectedGroup)
        throws IOException 

Source Link

Document

Open the given File for read access, verifying the expected user/group constraints if security is enabled.

Usage

From source file:it.crs4.pydoop.mapreduce.pipes.TaskLog.java

License:Apache License

private static LogFileDetail getLogFileDetail(TaskAttemptID taskid, LogName filter, boolean isCleanup)
        throws IOException {
    File indexFile = getIndexFile(taskid, isCleanup);
    BufferedReader fis = new BufferedReader(new InputStreamReader(
            SecureIOUtils.openForRead(indexFile, obtainLogDirOwner(taskid), null), Charsets.UTF_8));
    //the format of the index file is
    //LOG_DIR: <the dir where the task logs are really stored>
    //stdout:<start-offset in the stdout file> <length>
    //stderr:<start-offset in the stderr file> <length>
    //syslog:<start-offset in the syslog file> <length>
    LogFileDetail l = new LogFileDetail();
    String str = null;//  ww w.j ava2  s . c o  m
    try {
        str = fis.readLine();
        if (str == null) { // the file doesn't have anything
            throw new IOException("Index file for the log of " + taskid + " doesn't exist.");
        }
        l.location = str.substring(str.indexOf(LogFileDetail.LOCATION) + LogFileDetail.LOCATION.length());
        // special cases are the debugout and profile.out files. They are
        // guaranteed
        // to be associated with each task attempt since jvm reuse is disabled
        // when profiling/debugging is enabled
        if (filter.equals(LogName.DEBUGOUT) || filter.equals(LogName.PROFILE)) {
            l.length = new File(l.location, filter.toString()).length();
            l.start = 0;
            fis.close();
            return l;
        }
        str = fis.readLine();
        while (str != null) {
            // look for the exact line containing the logname
            if (str.contains(filter.toString())) {
                str = str.substring(filter.toString().length() + 1);
                String[] startAndLen = str.split(" ");
                l.start = Long.parseLong(startAndLen[0]);
                l.length = Long.parseLong(startAndLen[1]);
                break;
            }
            str = fis.readLine();
        }
        fis.close();
        fis = null;
    } finally {
        IOUtils.cleanup(LOG, fis);
    }
    return l;
}