Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package com.datatorrent.lib.io.block; import java.io.IOException; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import com.datatorrent.api.Context; import com.datatorrent.api.StatsListener; /** * An {@link AbstractBlockReader} that assumes the blocks are part of files. * * @param <R> type of record * * @since 2.1.0 */ @StatsListener.DataQueueSize public abstract class AbstractFSBlockReader<R> extends AbstractBlockReader<R, BlockMetadata.FileBlockMetadata, FSDataInputStream> { protected transient FileSystem fs; protected transient Configuration configuration; /** * If all the blocks belong to files which are under a folder than this base can be set to that folder. * The File System instance is derived using this base path. */ protected String basePath; @Override public void setup(Context.OperatorContext context) { super.setup(context); configuration = new Configuration(); try { fs = getFSInstance(); } catch (IOException e) { throw new RuntimeException("creating fs", e); } } @Override public void teardown() { super.teardown(); try { fs.close(); } catch (IOException e) { throw new RuntimeException(e); } } @Override protected FSDataInputStream setupStream(BlockMetadata.FileBlockMetadata block) throws IOException { return fs.open(new Path(block.getFilePath())); } /** * Override this method to change the FileSystem instance that is used by the operator. * * @return A FileSystem object. * @throws IOException */ protected FileSystem getFSInstance() throws IOException { if (basePath != null) { return FileSystem.newInstance(URI.create(basePath), configuration); } else { return FileSystem.newInstance(configuration); } } /** * An {@link AbstractFSBlockReader} which reads lines from the block using {@link ReaderContext.LineReaderContext} * * @param <R> type of records */ public abstract static class AbstractFSLineReader<R> extends AbstractFSBlockReader<R> { public AbstractFSLineReader() { super(); this.readerContext = new ReaderContext.LineReaderContext<>(); } } /** * An {@link AbstractFSBlockReader} which reads lines from the block using * {@link ReaderContext.ReadAheadLineReaderContext} * * @param <R> type of record. */ public abstract static class AbstractFSReadAheadLineReader<R> extends AbstractFSBlockReader<R> { public AbstractFSReadAheadLineReader() { super(); this.readerContext = new ReaderContext.ReadAheadLineReaderContext<>(); } } /** * Sets the base path. */ public void setBasePath(String basePath) { this.basePath = basePath; } public String getBasePath() { return basePath; } }