HADOOP-7054 Change NN LoadGenerator to use FileContext APIs (Sanjay Radia)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1043117 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sanjay Radia 2010-12-07 16:32:17 +00:00
parent ee705fa5ee
commit e75e481ec1
3 changed files with 26 additions and 19 deletions

View File

@ -23,6 +23,9 @@ Trunk (unreleased changes)
HADOOP-7049. TestReconfiguration should be junit v4. HADOOP-7049. TestReconfiguration should be junit v4.
(Patrick Kling via eli) (Patrick Kling via eli)
HADOOP-7054 Change NN LoadGenerator to use FileContext APIs
(Sanjay Radia)
OPTIMIZATIONS OPTIMIZATIONS
BUG FIXES BUG FIXES

View File

@ -22,12 +22,15 @@
import java.io.File; import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.EnumSet;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured; import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.CreateFlag;
import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.Options.CreateOpts;
import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; import org.apache.hadoop.util.ToolRunner;
@ -48,7 +51,7 @@
public class DataGenerator extends Configured implements Tool { public class DataGenerator extends Configured implements Tool {
private File inDir = StructureGenerator.DEFAULT_STRUCTURE_DIRECTORY; private File inDir = StructureGenerator.DEFAULT_STRUCTURE_DIRECTORY;
private Path root = DEFAULT_ROOT; private Path root = DEFAULT_ROOT;
private FileSystem fs; private FileContext fc;
final static private long BLOCK_SIZE = 10; final static private long BLOCK_SIZE = 10;
final static private String USAGE = "java DataGenerator " + final static private String USAGE = "java DataGenerator " +
"-inDir <inDir> " + "-inDir <inDir> " +
@ -78,7 +81,7 @@ public int run(String[] args) throws Exception {
/** Parse the command line arguments and initialize the data */ /** Parse the command line arguments and initialize the data */
private int init(String[] args) { private int init(String[] args) {
try { // initialize file system handle try { // initialize file system handle
fs = FileSystem.get(getConf()); fc = FileContext.getFileContext(getConf());
} catch (IOException ioe) { } catch (IOException ioe) {
System.err.println("Can not initialize the file system: " + System.err.println("Can not initialize the file system: " +
ioe.getLocalizedMessage()); ioe.getLocalizedMessage());
@ -109,7 +112,7 @@ private void genDirStructure() throws IOException {
StructureGenerator.DIR_STRUCTURE_FILE_NAME))); StructureGenerator.DIR_STRUCTURE_FILE_NAME)));
String line; String line;
while ((line=in.readLine()) != null) { while ((line=in.readLine()) != null) {
fs.mkdirs(new Path(root+line)); fc.mkdir(new Path(root+line), FileContext.DEFAULT_PERM, true);
} }
} }
@ -137,10 +140,9 @@ private void genFiles() throws IOException {
* a length of <code>fileSize</code>. The file is filled with character 'a'. * a length of <code>fileSize</code>. The file is filled with character 'a'.
*/ */
private void genFile(Path file, long fileSize) throws IOException { private void genFile(Path file, long fileSize) throws IOException {
FSDataOutputStream out = fs.create(file, true, FSDataOutputStream out = fc.create(file, EnumSet.of(CreateFlag.OVERWRITE),
getConf().getInt("io.file.buffer.size", 4096), CreateOpts.createParent(), CreateOpts.bufferSize(4096),
(short)getConf().getInt("dfs.replication", 3), CreateOpts.repFac((short) 3));
fs.getDefaultBlockSize());
for(long i=0; i<fileSize; i++) { for(long i=0; i<fileSize; i++) {
out.writeByte('a'); out.writeByte('a');
} }

View File

@ -26,16 +26,19 @@
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Random; import java.util.Random;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured; import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.CreateFlag;
import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileContext;
import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.Options.CreateOpts;
import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; import org.apache.hadoop.util.ToolRunner;
@ -110,7 +113,7 @@ public class LoadGenerator extends Configured implements Tool {
private volatile boolean shouldRun = true; private volatile boolean shouldRun = true;
private Path root = DataGenerator.DEFAULT_ROOT; private Path root = DataGenerator.DEFAULT_ROOT;
private FileSystem fs; private FileContext fc;
private int maxDelayBetweenOps = 0; private int maxDelayBetweenOps = 0;
private int numOfThreads = 200; private int numOfThreads = 200;
private long [] durations = {0}; private long [] durations = {0};
@ -230,7 +233,7 @@ private void nextOp() throws IOException {
private void read() throws IOException { private void read() throws IOException {
String fileName = files.get(r.nextInt(files.size())); String fileName = files.get(r.nextInt(files.size()));
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
InputStream in = fs.open(new Path(fileName)); InputStream in = fc.open(new Path(fileName));
executionTime[OPEN] += (System.currentTimeMillis()-startTime); executionTime[OPEN] += (System.currentTimeMillis()-startTime);
totalNumOfOps[OPEN]++; totalNumOfOps[OPEN]++;
while (in.read(buffer) != -1) {} while (in.read(buffer) != -1) {}
@ -252,7 +255,7 @@ private void write() throws IOException {
while ((fileSize = r.nextGaussian()+2)<=0) {} while ((fileSize = r.nextGaussian()+2)<=0) {}
genFile(file, (long)(fileSize*BLOCK_SIZE)); genFile(file, (long)(fileSize*BLOCK_SIZE));
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
fs.delete(file, true); fc.delete(file, true);
executionTime[DELETE] += (System.currentTimeMillis()-startTime); executionTime[DELETE] += (System.currentTimeMillis()-startTime);
totalNumOfOps[DELETE]++; totalNumOfOps[DELETE]++;
} }
@ -263,7 +266,7 @@ private void write() throws IOException {
private void list() throws IOException { private void list() throws IOException {
String dirName = dirs.get(r.nextInt(dirs.size())); String dirName = dirs.get(r.nextInt(dirs.size()));
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
fs.listStatus(new Path(dirName)); fc.listStatus(new Path(dirName));
executionTime[LIST] += (System.currentTimeMillis()-startTime); executionTime[LIST] += (System.currentTimeMillis()-startTime);
totalNumOfOps[LIST]++; totalNumOfOps[LIST]++;
} }
@ -352,7 +355,7 @@ public int run(String[] args) throws Exception {
/** Parse the command line arguments and initialize the data */ /** Parse the command line arguments and initialize the data */
private int init(String[] args) throws IOException { private int init(String[] args) throws IOException {
try { try {
fs = FileSystem.get(getConf()); fc = FileContext.getFileContext(getConf());
} catch (IOException ioe) { } catch (IOException ioe) {
System.err.println("Can not initialize the file system: " + System.err.println("Can not initialize the file system: " +
ioe.getLocalizedMessage()); ioe.getLocalizedMessage());
@ -546,7 +549,7 @@ private int initFileDirTables() {
* whose name starts with "_file_". * whose name starts with "_file_".
*/ */
private void initFileDirTables(Path path) throws IOException { private void initFileDirTables(Path path) throws IOException {
FileStatus[] stats = fs.listStatus(path); FileStatus[] stats = fc.util().listStatus(path);
for (FileStatus stat : stats) { for (FileStatus stat : stats) {
if (stat.isDirectory()) { if (stat.isDirectory()) {
@ -581,10 +584,9 @@ private void barrier() {
*/ */
private void genFile(Path file, long fileSize) throws IOException { private void genFile(Path file, long fileSize) throws IOException {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
FSDataOutputStream out = fs.create(file, true, FSDataOutputStream out = fc.create(file, EnumSet.of(CreateFlag.OVERWRITE),
getConf().getInt("io.file.buffer.size", 4096), CreateOpts.createParent(), CreateOpts.bufferSize(4096),
(short)getConf().getInt("dfs.replication", 3), CreateOpts.repFac((short) 3));
fs.getDefaultBlockSize());
executionTime[CREATE] += (System.currentTimeMillis()-startTime); executionTime[CREATE] += (System.currentTimeMillis()-startTime);
totalNumOfOps[CREATE]++; totalNumOfOps[CREATE]++;