Example usage for org.apache.hadoop.fs ContentSummary getFileCount

List of usage examples for org.apache.hadoop.fs ContentSummary getFileCount

Introduction

In this page you can find the example usage for org.apache.hadoop.fs ContentSummary getFileCount.

Prototype

public long getFileCount() 

Source Link

Usage

From source file:org.apache.tajo.engine.planner.rewrite.PartitionedTableRewriter.java

License:Apache License

private void updateTableStat(PartitionedTableScanNode scanNode) throws PlanningException {
    if (scanNode.getInputPaths().length > 0) {
        try {/*from w w w . j  a v a2s.c  o  m*/
            FileSystem fs = scanNode.getInputPaths()[0].getFileSystem(systemConf);
            long totalVolume = 0;

            for (Path input : scanNode.getInputPaths()) {
                ContentSummary summary = fs.getContentSummary(input);
                totalVolume += summary.getLength();
                totalVolume += summary.getFileCount();
            }
            scanNode.getTableDesc().getStats().setNumBytes(totalVolume);
        } catch (IOException e) {
            throw new PlanningException(e);
        }
    }
}

From source file:org.apache.tajo.engine.query.TestTablePartitions.java

License:Apache License

@Test
public final void testInsertIntoColumnPartitionedTableByThreeColumns() throws Exception {
    String tableName = CatalogUtil.normalizeIdentifier("testInsertIntoColumnPartitionedTableByThreeColumns");
    ResultSet res = testBase.execute("create table " + tableName
            + " (col4 text) partition by column(col1 int4, col2 int4, col3 float8) ");
    res.close();/*from  www  .  ja va  2  s .  com*/
    TajoTestingCluster cluster = testBase.getTestingCluster();
    CatalogService catalog = cluster.getMaster().getCatalog();
    assertTrue(catalog.existsTable(DEFAULT_DATABASE_NAME, tableName));

    res = executeString("insert into " + tableName
            + " select l_returnflag, l_orderkey, l_partkey, l_quantity from lineitem");
    res.close();

    TableDesc desc = catalog.getTableDesc(DEFAULT_DATABASE_NAME, tableName);
    Path path = new Path(desc.getPath());

    FileSystem fs = FileSystem.get(conf);
    assertTrue(fs.isDirectory(path));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1/col3=17.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2/col3=38.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2/col3=45.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3/col3=49.0")));
    if (!testingCluster.isHCatalogStoreRunning()) {
        assertEquals(5, desc.getStats().getNumRows().intValue());
    }

    res = executeString("select * from " + tableName + " where col2 = 2");

    Map<Double, int[]> resultRows1 = Maps.newHashMap();
    resultRows1.put(45.0d, new int[] { 3, 2 });
    resultRows1.put(38.0d, new int[] { 2, 2 });

    for (int i = 0; i < 2; i++) {
        assertTrue(res.next());
        assertEquals(resultRows1.get(res.getDouble(4))[0], res.getInt(2));
        assertEquals(resultRows1.get(res.getDouble(4))[1], res.getInt(3));
    }
    res.close();

    Map<Double, int[]> resultRows2 = Maps.newHashMap();
    resultRows2.put(49.0d, new int[] { 3, 3 });
    resultRows2.put(45.0d, new int[] { 3, 2 });
    resultRows2.put(38.0d, new int[] { 2, 2 });

    res = executeString("select * from " + tableName + " where (col1 = 2 or col1 = 3) and col2 >= 2");

    for (int i = 0; i < 3; i++) {
        assertTrue(res.next());
        assertEquals(resultRows2.get(res.getDouble(4))[0], res.getInt(2));
        assertEquals(resultRows2.get(res.getDouble(4))[1], res.getInt(3));
    }
    res.close();

    // insert into already exists partitioned table
    res = executeString("insert into " + tableName
            + " select l_returnflag, l_orderkey, l_partkey, l_quantity from lineitem");
    res.close();

    desc = catalog.getTableDesc(DEFAULT_DATABASE_NAME, tableName);
    path = new Path(desc.getPath());

    assertTrue(fs.isDirectory(path));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1/col3=17.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2/col3=38.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2/col3=45.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3/col3=49.0")));

    if (!testingCluster.isHCatalogStoreRunning()) {
        assertEquals(5, desc.getStats().getNumRows().intValue());
    }
    String expected = "N\n" + "N\n" + "N\n" + "N\n" + "N\n" + "N\n" + "R\n" + "R\n" + "R\n" + "R\n";

    String tableData = getTableFileContents(new Path(desc.getPath()));
    assertEquals(expected, tableData);

    res = executeString("select * from " + tableName + " where col2 = 2");
    String resultSetData = resultSetToString(res);
    res.close();
    expected = "col4,col1,col2,col3\n" + "-------------------------------\n" + "N,2,2,38.0\n" + "N,2,2,38.0\n"
            + "R,3,2,45.0\n" + "R,3,2,45.0\n";
    assertEquals(expected, resultSetData);

    res = executeString("select * from " + tableName + " where (col1 = 2 or col1 = 3) and col2 >= 2");
    resultSetData = resultSetToString(res);
    res.close();
    expected = "col4,col1,col2,col3\n" + "-------------------------------\n" + "N,2,2,38.0\n" + "N,2,2,38.0\n"
            + "R,3,2,45.0\n" + "R,3,2,45.0\n" + "R,3,3,49.0\n" + "R,3,3,49.0\n";
    assertEquals(expected, resultSetData);

    // Check not to remove existing partition directories.
    res = executeString("insert overwrite into " + tableName
            + " select l_returnflag, l_orderkey, l_partkey, 30.0 as l_quantity from lineitem "
            + " where l_orderkey = 1 and l_partkey = 1 and  l_linenumber = 1");
    res.close();

    desc = catalog.getTableDesc(DEFAULT_DATABASE_NAME, tableName);
    assertTrue(fs.isDirectory(path));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1/col3=17.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=1/col2=1/col3=30.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=2/col2=2/col3=38.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=2/col3=45.0")));
    assertTrue(fs.isDirectory(new Path(path.toUri() + "/col1=3/col2=3/col3=49.0")));

    if (!testingCluster.isHCatalogStoreRunning()) {
        // TODO: If there is existing another partition directory, we must add its rows number to result row numbers.
        // assertEquals(6, desc.getStats().getNumRows().intValue());
    }

    res = executeString("select * from " + tableName + " where col2 = 1");
    resultSetData = resultSetToString(res);
    res.close();
    expected = "col4,col1,col2,col3\n" + "-------------------------------\n" + "N,1,1,17.0\n" + "N,1,1,17.0\n"
            + "N,1,1,30.0\n" + "N,1,1,36.0\n" + "N,1,1,36.0\n";

    assertEquals(expected, resultSetData);

    // insert overwrite empty result to partitioned table
    res = executeString("insert overwrite into " + tableName
            + " select l_returnflag, l_orderkey, l_partkey, l_quantity from lineitem where l_orderkey"
            + " > 100");
    res.close();

    desc = catalog.getTableDesc(DEFAULT_DATABASE_NAME, tableName);

    ContentSummary summary = fs.getContentSummary(new Path(desc.getPath()));

    assertEquals(summary.getDirectoryCount(), 1L);
    assertEquals(summary.getFileCount(), 0L);
    assertEquals(summary.getLength(), 0L);
}

From source file:org.apache.tajo.plan.rewrite.rules.PartitionedTableRewriter.java

License:Apache License

private void updateTableStat(OverridableConf queryContext, PartitionedTableScanNode scanNode)
        throws PlanningException {
    if (scanNode.getInputPaths().length > 0) {
        try {//from  www.  j  av a 2s. c o  m
            FileSystem fs = scanNode.getInputPaths()[0].getFileSystem(queryContext.getConf());
            long totalVolume = 0;

            for (Path input : scanNode.getInputPaths()) {
                ContentSummary summary = fs.getContentSummary(input);
                totalVolume += summary.getLength();
                totalVolume += summary.getFileCount();
            }
            scanNode.getTableDesc().getStats().setNumBytes(totalVolume);
        } catch (IOException e) {
            throw new PlanningException(e);
        }
    }
}

From source file:org.apache.tajo.storage.FileTablespace.java

License:Apache License

/**
 * Finalizes result data. Tajo stores result data in the staging directory.
 * If the query fails, clean up the staging directory.
 * Otherwise the query is successful, move to the final directory from the staging directory.
 *
 * @param queryContext The query property
 * @param changeFileSeq If true change result file name with max sequence.
 * @return Saved path//w w w  .  j  a  v a  2  s  . c o  m
 * @throws java.io.IOException
 */
protected Path commitOutputData(OverridableConf queryContext, boolean changeFileSeq) throws IOException {
    Path stagingDir = new Path(queryContext.get(QueryVars.STAGING_DIR));
    Path stagingResultDir = new Path(stagingDir, TajoConstants.RESULT_DIR_NAME);
    Path finalOutputDir;
    if (!queryContext.get(QueryVars.OUTPUT_TABLE_URI, "").isEmpty()) {
        finalOutputDir = new Path(queryContext.get(QueryVars.OUTPUT_TABLE_URI));
        try {
            FileSystem fs = stagingResultDir.getFileSystem(conf);

            if (queryContext.getBool(QueryVars.OUTPUT_OVERWRITE, false)) { // INSERT OVERWRITE INTO

                // It moves the original table into the temporary location.
                // Then it moves the new result table into the original table location.
                // Upon failed, it recovers the original table if possible.
                boolean movedToOldTable = false;
                boolean committed = false;
                Path oldTableDir = new Path(stagingDir, TajoConstants.INSERT_OVERWIRTE_OLD_TABLE_NAME);
                ContentSummary summary = fs.getContentSummary(stagingResultDir);

                // When inserting empty data into a partitioned table, check if keep existing data need to be remove or not.
                boolean overwriteEnabled = queryContext
                        .getBool(SessionVars.PARTITION_NO_RESULT_OVERWRITE_ENABLED);

                // If existing data doesn't need to keep, check if there are some files.
                if ((!queryContext.get(QueryVars.OUTPUT_PARTITIONS, "").isEmpty())
                        && (!overwriteEnabled || (overwriteEnabled && summary.getFileCount() > 0L))) {
                    // This is a map for existing non-leaf directory to rename. A key is current directory and a value is
                    // renaming directory.
                    Map<Path, Path> renameDirs = TUtil.newHashMap();
                    // This is a map for recovering existing partition directory. A key is current directory and a value is
                    // temporary directory to back up.
                    Map<Path, Path> recoveryDirs = TUtil.newHashMap();

                    try {
                        if (!fs.exists(finalOutputDir)) {
                            fs.mkdirs(finalOutputDir);
                        }

                        visitPartitionedDirectory(fs, stagingResultDir, finalOutputDir,
                                stagingResultDir.toString(), renameDirs, oldTableDir);

                        // Rename target partition directories
                        for (Map.Entry<Path, Path> entry : renameDirs.entrySet()) {
                            // Backup existing data files for recovering
                            if (fs.exists(entry.getValue())) {
                                String recoveryPathString = entry.getValue().toString()
                                        .replaceAll(finalOutputDir.toString(), oldTableDir.toString());
                                Path recoveryPath = new Path(recoveryPathString);
                                fs.rename(entry.getValue(), recoveryPath);
                                fs.exists(recoveryPath);
                                recoveryDirs.put(entry.getValue(), recoveryPath);
                            }
                            // Delete existing directory
                            fs.delete(entry.getValue(), true);
                            // Rename staging directory to final output directory
                            fs.rename(entry.getKey(), entry.getValue());
                        }

                    } catch (IOException ioe) {
                        // Remove created dirs
                        for (Map.Entry<Path, Path> entry : renameDirs.entrySet()) {
                            fs.delete(entry.getValue(), true);
                        }

                        // Recovery renamed dirs
                        for (Map.Entry<Path, Path> entry : recoveryDirs.entrySet()) {
                            fs.delete(entry.getValue(), true);
                            fs.rename(entry.getValue(), entry.getKey());
                        }

                        throw new IOException(ioe.getMessage());
                    }
                } else { // no partition
                    try {

                        // if the final output dir exists, move all contents to the temporary table dir.
                        // Otherwise, just make the final output dir. As a result, the final output dir will be empty.
                        if (fs.exists(finalOutputDir)) {
                            fs.mkdirs(oldTableDir);

                            for (FileStatus status : fs.listStatus(finalOutputDir, hiddenFileFilter)) {
                                fs.rename(status.getPath(), oldTableDir);
                            }

                            movedToOldTable = fs.exists(oldTableDir);
                        } else { // if the parent does not exist, make its parent directory.
                            fs.mkdirs(finalOutputDir);
                        }

                        // Move the results to the final output dir.
                        for (FileStatus status : fs.listStatus(stagingResultDir)) {
                            fs.rename(status.getPath(), finalOutputDir);
                        }

                        // Check the final output dir
                        committed = fs.exists(finalOutputDir);

                    } catch (IOException ioe) {
                        // recover the old table
                        if (movedToOldTable && !committed) {

                            // if commit is failed, recover the old data
                            for (FileStatus status : fs.listStatus(finalOutputDir, hiddenFileFilter)) {
                                fs.delete(status.getPath(), true);
                            }

                            for (FileStatus status : fs.listStatus(oldTableDir)) {
                                fs.rename(status.getPath(), finalOutputDir);
                            }
                        }

                        throw new IOException(ioe.getMessage());
                    }
                }
            } else {
                String queryType = queryContext.get(QueryVars.COMMAND_TYPE);

                if (queryType != null && queryType.equals(NodeType.INSERT.name())) { // INSERT INTO an existing table

                    NumberFormat fmt = NumberFormat.getInstance();
                    fmt.setGroupingUsed(false);
                    fmt.setMinimumIntegerDigits(3);

                    if (!queryContext.get(QueryVars.OUTPUT_PARTITIONS, "").isEmpty()) {
                        for (FileStatus eachFile : fs.listStatus(stagingResultDir)) {
                            if (eachFile.isFile()) {
                                LOG.warn("Partition table can't have file in a staging dir: "
                                        + eachFile.getPath());
                                continue;
                            }
                            moveResultFromStageToFinal(fs, stagingResultDir, eachFile, finalOutputDir, fmt, -1,
                                    changeFileSeq);
                        }
                    } else {
                        int maxSeq = StorageUtil.getMaxFileSequence(fs, finalOutputDir, false) + 1;
                        for (FileStatus eachFile : fs.listStatus(stagingResultDir)) {
                            if (eachFile.getPath().getName().startsWith("_")) {
                                continue;
                            }
                            moveResultFromStageToFinal(fs, stagingResultDir, eachFile, finalOutputDir, fmt,
                                    maxSeq++, changeFileSeq);
                        }
                    }
                    // checking all file moved and remove empty dir
                    verifyAllFileMoved(fs, stagingResultDir);
                    FileStatus[] files = fs.listStatus(stagingResultDir);
                    if (files != null && files.length != 0) {
                        for (FileStatus eachFile : files) {
                            LOG.error("There are some unmoved files in staging dir:" + eachFile.getPath());
                        }
                    }
                } else { // CREATE TABLE AS SELECT (CTAS)
                    if (fs.exists(finalOutputDir)) {
                        for (FileStatus status : fs.listStatus(stagingResultDir)) {
                            fs.rename(status.getPath(), finalOutputDir);
                        }
                    } else {
                        fs.rename(stagingResultDir, finalOutputDir);
                    }
                    LOG.info("Moved from the staging dir to the output directory '" + finalOutputDir);
                }
            }

            // remove the staging directory if the final output dir is given.
            Path stagingDirRoot = stagingDir.getParent();
            fs.delete(stagingDirRoot, true);
        } catch (Throwable t) {
            LOG.error(t);
            throw new IOException(t);
        }
    } else {
        finalOutputDir = new Path(stagingDir, TajoConstants.RESULT_DIR_NAME);
    }

    return finalOutputDir;
}

From source file:org.apache.tajo.storage.StorageManager.java

License:Apache License

/**
 * Finalizes result data. Tajo stores result data in the staging directory.
 * If the query fails, clean up the staging directory.
 * Otherwise the query is successful, move to the final directory from the staging directory.
 *
 * @param queryContext The query property
 * @param finalEbId The final execution block id
 * @param plan The query plan//from  w  ww . ja v  a2  s  . c o  m
 * @param schema The final output schema
 * @param tableDesc The description of the target table
 * @param changeFileSeq If true change result file name with max sequence.
 * @return Saved path
 * @throws java.io.IOException
 */
protected Path commitOutputData(OverridableConf queryContext, ExecutionBlockId finalEbId, LogicalPlan plan,
        Schema schema, TableDesc tableDesc, boolean changeFileSeq) throws IOException {
    Path stagingDir = new Path(queryContext.get(QueryVars.STAGING_DIR));
    Path stagingResultDir = new Path(stagingDir, TajoConstants.RESULT_DIR_NAME);
    Path finalOutputDir;
    if (!queryContext.get(QueryVars.OUTPUT_TABLE_PATH, "").isEmpty()) {
        finalOutputDir = new Path(queryContext.get(QueryVars.OUTPUT_TABLE_PATH));
        try {
            FileSystem fs = stagingResultDir.getFileSystem(conf);

            if (queryContext.getBool(QueryVars.OUTPUT_OVERWRITE, false)) { // INSERT OVERWRITE INTO

                // It moves the original table into the temporary location.
                // Then it moves the new result table into the original table location.
                // Upon failed, it recovers the original table if possible.
                boolean movedToOldTable = false;
                boolean committed = false;
                Path oldTableDir = new Path(stagingDir, TajoConstants.INSERT_OVERWIRTE_OLD_TABLE_NAME);
                ContentSummary summary = fs.getContentSummary(stagingResultDir);

                if (!queryContext.get(QueryVars.OUTPUT_PARTITIONS, "").isEmpty()
                        && summary.getFileCount() > 0L) {
                    // This is a map for existing non-leaf directory to rename. A key is current directory and a value is
                    // renaming directory.
                    Map<Path, Path> renameDirs = TUtil.newHashMap();
                    // This is a map for recovering existing partition directory. A key is current directory and a value is
                    // temporary directory to back up.
                    Map<Path, Path> recoveryDirs = TUtil.newHashMap();

                    try {
                        if (!fs.exists(finalOutputDir)) {
                            fs.mkdirs(finalOutputDir);
                        }

                        visitPartitionedDirectory(fs, stagingResultDir, finalOutputDir,
                                stagingResultDir.toString(), renameDirs, oldTableDir);

                        // Rename target partition directories
                        for (Map.Entry<Path, Path> entry : renameDirs.entrySet()) {
                            // Backup existing data files for recovering
                            if (fs.exists(entry.getValue())) {
                                String recoveryPathString = entry.getValue().toString()
                                        .replaceAll(finalOutputDir.toString(), oldTableDir.toString());
                                Path recoveryPath = new Path(recoveryPathString);
                                fs.rename(entry.getValue(), recoveryPath);
                                fs.exists(recoveryPath);
                                recoveryDirs.put(entry.getValue(), recoveryPath);
                            }
                            // Delete existing directory
                            fs.delete(entry.getValue(), true);
                            // Rename staging directory to final output directory
                            fs.rename(entry.getKey(), entry.getValue());
                        }

                    } catch (IOException ioe) {
                        // Remove created dirs
                        for (Map.Entry<Path, Path> entry : renameDirs.entrySet()) {
                            fs.delete(entry.getValue(), true);
                        }

                        // Recovery renamed dirs
                        for (Map.Entry<Path, Path> entry : recoveryDirs.entrySet()) {
                            fs.delete(entry.getValue(), true);
                            fs.rename(entry.getValue(), entry.getKey());
                        }

                        throw new IOException(ioe.getMessage());
                    }
                } else { // no partition
                    try {

                        // if the final output dir exists, move all contents to the temporary table dir.
                        // Otherwise, just make the final output dir. As a result, the final output dir will be empty.
                        if (fs.exists(finalOutputDir)) {
                            fs.mkdirs(oldTableDir);

                            for (FileStatus status : fs.listStatus(finalOutputDir,
                                    StorageManager.hiddenFileFilter)) {
                                fs.rename(status.getPath(), oldTableDir);
                            }

                            movedToOldTable = fs.exists(oldTableDir);
                        } else { // if the parent does not exist, make its parent directory.
                            fs.mkdirs(finalOutputDir);
                        }

                        // Move the results to the final output dir.
                        for (FileStatus status : fs.listStatus(stagingResultDir)) {
                            fs.rename(status.getPath(), finalOutputDir);
                        }

                        // Check the final output dir
                        committed = fs.exists(finalOutputDir);

                    } catch (IOException ioe) {
                        // recover the old table
                        if (movedToOldTable && !committed) {

                            // if commit is failed, recover the old data
                            for (FileStatus status : fs.listStatus(finalOutputDir,
                                    StorageManager.hiddenFileFilter)) {
                                fs.delete(status.getPath(), true);
                            }

                            for (FileStatus status : fs.listStatus(oldTableDir)) {
                                fs.rename(status.getPath(), finalOutputDir);
                            }
                        }

                        throw new IOException(ioe.getMessage());
                    }
                }
            } else {
                String queryType = queryContext.get(QueryVars.COMMAND_TYPE);

                if (queryType != null && queryType.equals(NodeType.INSERT.name())) { // INSERT INTO an existing table

                    NumberFormat fmt = NumberFormat.getInstance();
                    fmt.setGroupingUsed(false);
                    fmt.setMinimumIntegerDigits(3);

                    if (!queryContext.get(QueryVars.OUTPUT_PARTITIONS, "").isEmpty()) {
                        for (FileStatus eachFile : fs.listStatus(stagingResultDir)) {
                            if (eachFile.isFile()) {
                                LOG.warn("Partition table can't have file in a staging dir: "
                                        + eachFile.getPath());
                                continue;
                            }
                            moveResultFromStageToFinal(fs, stagingResultDir, eachFile, finalOutputDir, fmt, -1,
                                    changeFileSeq);
                        }
                    } else {
                        int maxSeq = StorageUtil.getMaxFileSequence(fs, finalOutputDir, false) + 1;
                        for (FileStatus eachFile : fs.listStatus(stagingResultDir)) {
                            if (eachFile.getPath().getName().startsWith("_")) {
                                continue;
                            }
                            moveResultFromStageToFinal(fs, stagingResultDir, eachFile, finalOutputDir, fmt,
                                    maxSeq++, changeFileSeq);
                        }
                    }
                    // checking all file moved and remove empty dir
                    verifyAllFileMoved(fs, stagingResultDir);
                    FileStatus[] files = fs.listStatus(stagingResultDir);
                    if (files != null && files.length != 0) {
                        for (FileStatus eachFile : files) {
                            LOG.error("There are some unmoved files in staging dir:" + eachFile.getPath());
                        }
                    }
                } else { // CREATE TABLE AS SELECT (CTAS)
                    if (fs.exists(finalOutputDir)) {
                        for (FileStatus status : fs.listStatus(stagingResultDir)) {
                            fs.rename(status.getPath(), finalOutputDir);
                        }
                    } else {
                        fs.rename(stagingResultDir, finalOutputDir);
                    }
                    LOG.info("Moved from the staging dir to the output directory '" + finalOutputDir);
                }
            }

            // remove the staging directory if the final output dir is given.
            Path stagingDirRoot = stagingDir.getParent();
            fs.delete(stagingDirRoot, true);
        } catch (Throwable t) {
            LOG.error(t);
            throw new IOException(t);
        }
    } else {
        finalOutputDir = new Path(stagingDir, TajoConstants.RESULT_DIR_NAME);
    }

    return finalOutputDir;
}

From source file:org.exem.flamingo.agent.nn.hdfs.HdfsFileInfo.java

License:Apache License

public HdfsFileInfo(FileStatus fileStatus, ContentSummary contentSummary) {
    this.fullyQualifiedPath = fileStatus.getPath().toUri().getPath();
    this.filename = isEmpty(getFilename(fullyQualifiedPath)) ? getDirectoryName(fullyQualifiedPath)
            : getFilename(fullyQualifiedPath);
    this.length = fileStatus.isFile() ? fileStatus.getLen() : contentSummary.getLength();
    this.path = getPath(fullyQualifiedPath);
    this.directory = fileStatus.isDirectory();
    this.file = !fileStatus.isDirectory();
    this.owner = fileStatus.getOwner();
    this.group = fileStatus.getGroup();
    this.blockSize = fileStatus.getBlockSize();
    this.replication = fileStatus.getReplication();
    this.modificationTime = fileStatus.getModificationTime();
    if (contentSummary != null) {
        this.spaceConsumed = contentSummary.getSpaceConsumed();
        this.spaceQuota = contentSummary.getSpaceQuota();
        this.quota = contentSummary.getQuota();
        this.directoryCount = contentSummary.getDirectoryCount();
        this.fileCount = contentSummary.getFileCount();
    }// ww w .  j  a va 2  s . com
    this.accessTime = fileStatus.getAccessTime();
    this.permission = fileStatus.getPermission().toString();
}

From source file:org.opencloudengine.garuda.model.HdfsFileInfo.java

License:Open Source License

public HdfsFileInfo(FileStatus fileStatus, ContentSummary contentSummary) {
    this.fullyQualifiedPath = fileStatus.getPath().toUri().getPath();
    this.filename = isEmpty(getFilename(fullyQualifiedPath)) ? getDirectoryName(fullyQualifiedPath)
            : getFilename(fullyQualifiedPath);
    this.length = fileStatus.getLen();
    this.path = getPath(fullyQualifiedPath);
    this.directory = fileStatus.isDirectory();
    this.file = !fileStatus.isDirectory();
    this.owner = fileStatus.getOwner();
    this.group = fileStatus.getGroup();
    this.blockSize = fileStatus.getBlockSize();
    this.replication = fileStatus.getReplication();
    this.modificationTime = fileStatus.getModificationTime();
    if (contentSummary != null) {
        this.spaceConsumed = contentSummary.getSpaceConsumed();
        this.quota = contentSummary.getQuota();
        this.spaceQuota = contentSummary.getSpaceQuota();
        this.directoryCount = contentSummary.getDirectoryCount();
        this.fileCount = contentSummary.getFileCount();
    }//from  ww  w .j  av  a  2s  . com
    this.accessTime = fileStatus.getAccessTime();
    this.permission = fileStatus.getPermission().toString();
}

From source file:org.openflamingo.fs.hdfs.HdfsFileSystemProvider.java

License:Apache License

@Override
public FileInfo getFileInfo(String path) {
    try {//from ww  w .  j  a v  a 2 s  .  c om
        FileStatus fileStatus = fs.getFileStatus(new Path(path));
        HdfsFileInfo hdfsFileInfo = new HdfsFileInfo(fileStatus);

        ContentSummary summary = fs.getContentSummary(new Path(path));
        hdfsFileInfo.setBlockSize(fileStatus.getBlockSize());
        hdfsFileInfo.setReplication(fileStatus.getReplication());
        hdfsFileInfo.setDirectoryCount(summary.getDirectoryCount());
        hdfsFileInfo.setFileCount(summary.getFileCount());
        hdfsFileInfo.setQuota(summary.getQuota());
        hdfsFileInfo.setSpaceQuota(summary.getSpaceQuota());
        hdfsFileInfo.setSpaceConsumed(StringUtils.byteDesc(summary.getSpaceConsumed()));
        hdfsFileInfo.setLength(summary.getLength());

        return hdfsFileInfo;
    } catch (Exception ex) {
        throw new FileSystemException(bundle.message("S_FS", "CANNOT_GET_FILE_INFO", path), ex);
    }
}

From source file:org.openflamingo.remote.thrift.thriftfs.ThriftUtils.java

License:Apache License

public static ContentSummary toThrift(org.apache.hadoop.fs.ContentSummary cs, String path) {
    ContentSummary tcs = new ContentSummary();
    tcs.fileCount = cs.getFileCount();
    tcs.directoryCount = cs.getDirectoryCount();
    tcs.quota = cs.getQuota();//from  w w w  .  j a  v a2 s.  c om
    tcs.spaceConsumed = cs.getSpaceConsumed();
    tcs.spaceQuota = cs.getSpaceQuota();
    tcs.path = path;
    return tcs;
}

From source file:org.pentaho.di.job.entries.hadooptransjobexecutor.DistributedCacheUtilTest.java

License:Apache License

/**
 * Utility to attempt to stage a file to HDFS for use with Distributed Cache.
 *
 * @param ch                Distributed Cache Helper
 * @param source            File or directory to stage
 * @param fs                FileSystem to stage to
 * @param root              Root directory to clean up when this test is complete
 * @param dest              Destination path to stage to
 * @param expectedFileCount Expected number of files to exist in the destination once staged
 * @param expectedDirCount  Expected number of directories to exist in the destiation once staged
 * @throws Exception//from ww  w .  j  av a  2  s  .  c o  m
 */
private void stageForCacheTester(DistributedCacheUtil ch, FileObject source, FileSystem fs, Path root,
        Path dest, int expectedFileCount, int expectedDirCount) throws Exception {
    try {
        ch.stageForCache(source, fs, dest, true);

        assertTrue(fs.exists(dest));
        ContentSummary cs = fs.getContentSummary(dest);
        assertEquals(expectedFileCount, cs.getFileCount());
        assertEquals(expectedDirCount, cs.getDirectoryCount());
        assertEquals(FsPermission.createImmutable((short) 0755), fs.getFileStatus(dest).getPermission());
    } finally {
        // Clean up after ourself
        if (!fs.delete(root, true)) {
            System.err.println("error deleting FileSystem temp dir " + root);
        }
    }
}