org.apache.hadoop.RandomTextWriterJob.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.hadoop.RandomTextWriterJob.java

Source

/**
* 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 org.apache.hadoop;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.MRJobConfig;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

public class RandomTextWriterJob extends Configured implements Tool {

    public static final String TOTAL_BYTES = "mapreduce.randomtextwriter.totalbytes";
    public static final String BYTES_PER_MAP = "mapreduce.randomtextwriter.bytespermap";
    public static final String MAX_VALUE = "mapreduce.randomtextwriter.maxwordsvalue";
    public static final String MIN_VALUE = "mapreduce.randomtextwriter.minwordsvalue";
    public static final String MIN_KEY = "mapreduce.randomtextwriter.minwordskey";
    public static final String MAX_KEY = "mapreduce.randomtextwriter.maxwordskey";

    enum Counters {
        RECORDS_WRITTEN, BYTES_WRITTEN
    }

    public Job createJob(Configuration conf) throws IOException {
        long numBytesToWritePerMap = conf.getLong(BYTES_PER_MAP, 10 * 1024);
        long totalBytesToWrite = conf.getLong(TOTAL_BYTES, numBytesToWritePerMap);
        int numMaps = (int) (totalBytesToWrite / numBytesToWritePerMap);
        if (numMaps == 0 && totalBytesToWrite > 0) {
            numMaps = 1;
            conf.setLong(BYTES_PER_MAP, totalBytesToWrite);
        }
        conf.setInt(MRJobConfig.NUM_MAPS, numMaps);

        Job job = Job.getInstance(conf);

        job.setJarByClass(RandomTextWriterJob.class);
        job.setJobName("random-text-writer");

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        job.setInputFormatClass(RandomInputFormat.class);
        job.setMapperClass(RandomTextMapper.class);

        job.setOutputFormatClass(SequenceFileOutputFormat.class);
        //FileOutputFormat.setOutputPath(job, new Path("random-output"));
        job.setNumReduceTasks(0);
        return job;
    }

    public static class RandomInputFormat extends InputFormat<Text, Text> {

        /** 
         * Generate the requested number of file splits, with the filename
         * set to the filename of the output file.
         */
        public List<InputSplit> getSplits(JobContext job) throws IOException {
            List<InputSplit> result = new ArrayList<InputSplit>();
            Path outDir = FileOutputFormat.getOutputPath(job);
            int numSplits = job.getConfiguration().getInt(MRJobConfig.NUM_MAPS, 1);
            for (int i = 0; i < numSplits; ++i) {
                result.add(new FileSplit(new Path(outDir, "dummy-split-" + i), 0, 1, (String[]) null));
            }
            return result;
        }

        /**
         * Return a single record (filename, "") where the filename is taken from
         * the file split.
         */
        public static class RandomRecordReader extends RecordReader<Text, Text> {
            Path name;
            Text key = null;
            Text value = new Text();

            public RandomRecordReader(Path p) {
                name = p;
            }

            public void initialize(InputSplit split, TaskAttemptContext context)
                    throws IOException, InterruptedException {

            }

            public boolean nextKeyValue() {
                if (name != null) {
                    key = new Text();
                    key.set(name.getName());
                    name = null;
                    return true;
                }
                return false;
            }

            public Text getCurrentKey() {
                return key;
            }

            public Text getCurrentValue() {
                return value;
            }

            public void close() {
            }

            public float getProgress() {
                return 0.0f;
            }
        }

        public RecordReader<Text, Text> createRecordReader(InputSplit split, TaskAttemptContext context)
                throws IOException, InterruptedException {
            return new RandomRecordReader(((FileSplit) split).getPath());
        }
    }

    public static class RandomTextMapper extends Mapper<Text, Text, Text, Text> {

        private long numBytesToWrite;
        private int minWordsInKey;
        private int wordsInKeyRange;
        private int minWordsInValue;
        private int wordsInValueRange;
        private Random random = new Random();

        /**
         * Save the configuration value that we need to write the data.
         */
        public void setup(Context context) {
            Configuration conf = context.getConfiguration();
            numBytesToWrite = conf.getLong(BYTES_PER_MAP, 1 * 1024 * 1024 * 1024);
            minWordsInKey = conf.getInt(MIN_KEY, 5);
            wordsInKeyRange = (conf.getInt(MAX_KEY, 10) - minWordsInKey);
            minWordsInValue = conf.getInt(MIN_VALUE, 10);
            wordsInValueRange = (conf.getInt(MAX_VALUE, 100) - minWordsInValue);
        }

        /**
         * Given an output filename, write a bunch of random records to it.
         */
        public void map(Text key, Text value, Context context) throws IOException, InterruptedException {
            int itemCount = 0;
            while (numBytesToWrite > 0) {
                // Generate the key/value 
                int noWordsKey = minWordsInKey + (wordsInKeyRange != 0 ? random.nextInt(wordsInKeyRange) : 0);
                int noWordsValue = minWordsInValue
                        + (wordsInValueRange != 0 ? random.nextInt(wordsInValueRange) : 0);
                Text keyWords = generateSentence(noWordsKey);
                Text valueWords = generateSentence(noWordsValue);

                // Write the sentence 
                context.write(keyWords, valueWords);

                numBytesToWrite -= (keyWords.getLength() + valueWords.getLength());

                // Update counters, progress etc.
                context.getCounter(Counters.BYTES_WRITTEN).increment(keyWords.getLength() + valueWords.getLength());
                context.getCounter(Counters.RECORDS_WRITTEN).increment(1);
                if (++itemCount % 200 == 0) {
                    context.setStatus("wrote record " + itemCount + ". " + numBytesToWrite + " bytes left.");
                }
            }
            context.setStatus("done with " + itemCount + " records.");
        }

        private Text generateSentence(int noWords) {
            StringBuffer sentence = new StringBuffer();
            String space = " ";
            for (int i = 0; i < noWords; ++i) {
                sentence.append(words[random.nextInt(words.length)]);
                sentence.append(space);
            }
            return new Text(sentence.toString());
        }

        private static String[] words = { "diurnalness", "Homoiousian", "spiranthic", "tetragynian", "silverhead",
                "ungreat", "lithograph", "exploiter", "physiologian", "by", "hellbender", "Filipendula",
                "undeterring", "antiscolic", "pentagamist", "hypoid", "cacuminal", "sertularian", "schoolmasterism",
                "nonuple", "gallybeggar", "phytonic", "swearingly", "nebular", "Confervales", "thermochemically",
                "characinoid", "cocksuredom", "fallacious", "feasibleness", "debromination", "playfellowship",
                "tramplike", "testa", "participatingly", "unaccessible", "bromate", "experientialist", "roughcast",
                "docimastical", "choralcelo", "blightbird", "peptonate", "sombreroed", "unschematized",
                "antiabolitionist", "besagne", "mastication", "bromic", "sviatonosite", "cattimandoo",
                "metaphrastical", "endotheliomyoma", "hysterolysis", "unfulminated", "Hester", "oblongly",
                "blurredness", "authorling", "chasmy", "Scorpaenidae", "toxihaemia", "Dictograph", "Quakerishly",
                "deaf", "timbermonger", "strammel", "Thraupidae", "seditious", "plerome", "Arneb", "eristically",
                "serpentinic", "glaumrie", "socioromantic", "apocalypst", "tartrous", "Bassaris", "angiolymphoma",
                "horsefly", "kenno", "astronomize", "euphemious", "arsenide", "untongued", "parabolicness",
                "uvanite", "helpless", "gemmeous", "stormy", "templar", "erythrodextrin", "comism",
                "interfraternal", "preparative", "parastas", "frontoorbital", "Ophiosaurus", "diopside",
                "serosanguineous", "ununiformly", "karyological", "collegian", "allotropic", "depravity",
                "amylogenesis", "reformatory", "epidymides", "pleurotropous", "trillium", "dastardliness",
                "coadvice", "embryotic", "benthonic", "pomiferous", "figureheadship", "Megaluridae", "Harpa",
                "frenal", "commotion", "abthainry", "cobeliever", "manilla", "spiciferous", "nativeness", "obispo",
                "monilioid", "biopsic", "valvula", "enterostomy", "planosubulate", "pterostigma", "lifter",
                "triradiated", "venialness", "tum", "archistome", "tautness", "unswanlike", "antivenin",
                "Lentibulariaceae", "Triphora", "angiopathy", "anta", "Dawsonia", "becomma", "Yannigan",
                "winterproof", "antalgol", "harr", "underogating", "ineunt", "cornberry", "flippantness",
                "scyphostoma", "approbation", "Ghent", "Macraucheniidae", "scabbiness", "unanatomized",
                "photoelasticity", "eurythermal", "enation", "prepavement", "flushgate", "subsequentially", "Edo",
                "antihero", "Isokontae", "unforkedness", "porriginous", "daytime", "nonexecutive", "trisilicic",
                "morphiomania", "paranephros", "botchedly", "impugnation", "Dodecatheon", "obolus", "unburnt",
                "provedore", "Aktistetae", "superindifference", "Alethea", "Joachimite", "cyanophilous",
                "chorograph", "brooky", "figured", "periclitation", "quintette", "hondo", "ornithodelphous",
                "unefficient", "pondside", "bogydom", "laurinoxylon", "Shiah", "unharmed", "cartful",
                "noncrystallized", "abusiveness", "cromlech", "japanned", "rizzomed", "underskin", "adscendent",
                "allectory", "gelatinousness", "volcano", "uncompromisingly", "cubit", "idiotize", "unfurbelowed",
                "undinted", "magnetooptics", "Savitar", "diwata", "ramosopalmate", "Pishquow", "tomorn",
                "apopenptic", "Haversian", "Hysterocarpus", "ten", "outhue", "Bertat", "mechanist", "asparaginic",
                "velaric", "tonsure", "bubble", "Pyrales", "regardful", "glyphography", "calabazilla",
                "shellworker", "stradametrical", "havoc", "theologicopolitical", "sawdust", "diatomaceous",
                "jajman", "temporomastoid", "Serrifera", "Ochnaceae", "aspersor", "trailmaking", "Bishareen",
                "digitule", "octogynous", "epididymitis", "smokefarthings", "bacillite", "overcrown", "mangonism",
                "sirrah", "undecorated", "psychofugal", "bismuthiferous", "rechar", "Lemuridae", "frameable",
                "thiodiazole", "Scanic", "sportswomanship", "interruptedness", "admissory", "osteopaedion",
                "tingly", "tomorrowness", "ethnocracy", "trabecular", "vitally", "fossilism", "adz", "metopon",
                "prefatorial", "expiscate", "diathermacy", "chronist", "nigh", "generalizable", "hysterogen",
                "aurothiosulphuric", "whitlowwort", "downthrust", "Protestantize", "monander", "Itea",
                "chronographic", "silicize", "Dunlop", "eer", "componental", "spot", "pamphlet", "antineuritic",
                "paradisean", "interruptor", "debellator", "overcultured", "Florissant", "hyocholic",
                "pneumatotherapy", "tailoress", "rave", "unpeople", "Sebastian", "thermanesthesia", "Coniferae",
                "swacking", "posterishness", "ethmopalatal", "whittle", "analgize", "scabbardless", "naught",
                "symbiogenetically", "trip", "parodist", "columniform", "trunnel", "yawler", "goodwill",
                "pseudohalogen", "swangy", "cervisial", "mediateness", "genii", "imprescribable", "pony",
                "consumptional", "carposporangial", "poleax", "bestill", "subfebrile", "sapphiric", "arrowworm",
                "qualminess", "ultraobscure", "thorite", "Fouquieria", "Bermudian", "prescriber", "elemicin",
                "warlike", "semiangle", "rotular", "misthread", "returnability", "seraphism", "precostal",
                "quarried", "Babylonism", "sangaree", "seelful", "placatory", "pachydermous", "bozal", "galbulus",
                "spermaphyte", "cumbrousness", "pope", "signifier", "Endomycetaceae", "shallowish", "sequacity",
                "periarthritis", "bathysphere", "pentosuria", "Dadaism", "spookdom", "Consolamentum",
                "afterpressure", "mutter", "louse", "ovoviviparous", "corbel", "metastoma", "biventer", "Hydrangea",
                "hogmace", "seizing", "nonsuppressed", "oratorize", "uncarefully", "benzothiofuran", "penult",
                "balanocele", "macropterous", "dishpan", "marten", "absvolt", "jirble", "parmelioid",
                "airfreighter", "acocotl", "archesporial", "hypoplastral", "preoral", "quailberry", "cinque",
                "terrestrially", "stroking", "limpet", "moodishness", "canicule", "archididascalian", "pompiloid",
                "overstaid", "introducer", "Italical", "Christianopaganism", "prescriptible", "subofficer",
                "danseuse", "cloy", "saguran", "frictionlessly", "deindividualization", "Bulanda", "ventricous",
                "subfoliar", "basto", "scapuloradial", "suspend", "stiffish", "Sphenodontidae", "eternal", "verbid",
                "mammonish", "upcushion", "barkometer", "concretion", "preagitate", "incomprehensible", "tristich",
                "visceral", "hemimelus", "patroller", "stentorophonic", "pinulus", "kerykeion", "brutism",
                "monstership", "merciful", "overinstruct", "defensibly", "bettermost", "splenauxe", "Mormyrus",
                "unreprimanded", "taver", "ell", "proacquittal", "infestation", "overwoven", "Lincolnlike",
                "chacona", "Tamil", "classificational", "lebensraum", "reeveland", "intuition", "Whilkut",
                "focaloid", "Eleusinian", "micromembrane", "byroad", "nonrepetition", "bacterioblast", "brag",
                "ribaldrous", "phytoma", "counteralliance", "pelvimetry", "pelf", "relaster", "thermoresistant",
                "aneurism", "molossic", "euphonym", "upswell", "ladhood", "phallaceous", "inertly", "gunshop",
                "stereotypography", "laryngic", "refasten", "twinling", "oflete", "hepatorrhaphy",
                "electrotechnics", "cockal", "guitarist", "topsail", "Cimmerianism", "larklike", "Llandovery",
                "pyrocatechol", "immatchable", "chooser", "metrocratic", "craglike", "quadrennial", "nonpoisonous",
                "undercolored", "knob", "ultratense", "balladmonger", "slait", "sialadenitis", "bucketer",
                "magnificently", "unstipulated", "unscourged", "unsupercilious", "packsack", "pansophism",
                "soorkee", "percent", "subirrigate", "champer", "metapolitics", "spherulitic", "involatile",
                "metaphonical", "stachyuraceous", "speckedness", "bespin", "proboscidiform", "gul", "squit",
                "yeelaman", "peristeropode", "opacousness", "shibuichi", "retinize", "yote", "misexposition",
                "devilwise", "pumpkinification", "vinny", "bonze", "glossing", "decardinalize", "transcortical",
                "serphoid", "deepmost", "guanajuatite", "wemless", "arval", "lammy", "Effie", "Saponaria",
                "tetrahedral", "prolificy", "excerpt", "dunkadoo", "Spencerism", "insatiately", "Gilaki",
                "oratorship", "arduousness", "unbashfulness", "Pithecolobium", "unisexuality", "veterinarian",
                "detractive", "liquidity", "acidophile", "proauction", "sural", "totaquina", "Vichyite",
                "uninhabitedness", "allegedly", "Gothish", "manny", "Inger", "flutist", "ticktick", "Ludgatian",
                "homotransplant", "orthopedical", "diminutively", "monogoneutic", "Kenipsim", "sarcologist",
                "drome", "stronghearted", "Fameuse", "Swaziland", "alen", "chilblain", "beatable", "agglomeratic",
                "constitutor", "tendomucoid", "porencephalous", "arteriasis", "boser", "tantivy", "rede",
                "lineamental", "uncontradictableness", "homeotypical", "masa", "folious", "dosseret",
                "neurodegenerative", "subtransverse", "Chiasmodontidae", "palaeotheriodont", "unstressedly",
                "chalcites", "piquantness", "lampyrine", "Aplacentalia", "projecting", "elastivity",
                "isopelletierin", "bladderwort", "strander", "almud", "iniquitously", "theologal", "bugre",
                "chargeably", "imperceptivity", "meriquinoidal", "mesophyte", "divinator", "perfunctory",
                "counterappellant", "synovial", "charioteer", "crystallographical", "comprovincial",
                "infrastapedial", "pleasurehood", "inventurous", "ultrasystematic", "subangulated",
                "supraoesophageal", "Vaishnavism", "transude", "chrysochrous", "ungrave", "reconciliable",
                "uninterpleaded", "erlking", "wherefrom", "aprosopia", "antiadiaphorist", "metoxazine",
                "incalculable", "umbellic", "predebit", "foursquare", "unimmortal", "nonmanufacture", "slangy",
                "predisputant", "familist", "preaffiliate", "friarhood", "corelysis", "zoonitic", "halloo",
                "paunchy", "neuromimesis", "aconitine", "hackneyed", "unfeeble", "cubby", "autoschediastical",
                "naprapath", "lyrebird", "inexistency", "leucophoenicite", "ferrogoslarite", "reperuse",
                "uncombable", "tambo", "propodiale", "diplomatize", "Russifier", "clanned", "corona", "michigan",
                "nonutilitarian", "transcorporeal", "bought", "Cercosporella", "stapedius", "glandularly",
                "pictorially", "weism", "disilane", "rainproof", "Caphtor", "scrubbed", "oinomancy",
                "pseudoxanthine", "nonlustrous", "redesertion", "Oryzorictinae", "gala", "Mycogone", "reappreciate",
                "cyanoguanidine", "seeingness", "breadwinner", "noreast", "furacious", "epauliere", "omniscribent",
                "Passiflorales", "uninductive", "inductivity", "Orbitolina", "Semecarpus", "migrainoid",
                "steprelationship", "phlogisticate", "mesymnion", "sloped", "edificator", "beneficent", "culm",
                "paleornithology", "unurban", "throbless", "amplexifoliate", "sesquiquintile", "sapience",
                "astucious", "dithery", "boor", "ambitus", "scotching", "uloid", "uncompromisingness", "hoove",
                "waird", "marshiness", "Jerusalem", "mericarp", "unevoked", "benzoperoxide", "outguess", "pyxie",
                "hymnic", "euphemize", "mendacity", "erythremia", "rosaniline", "unchatteled", "lienteria",
                "Bushongo", "dialoguer", "unrepealably", "rivethead", "antideflation", "vinegarish",
                "manganosiderite", "doubtingness", "ovopyriform", "Cephalodiscus", "Muscicapa", "Animalivora",
                "angina", "planispheric", "ipomoein", "cuproiodargyrite", "sandbox", "scrat", "Munnopsidae",
                "shola", "pentafid", "overstudiousness", "times", "nonprofession", "appetible", "valvulotomy",
                "goladar", "uniarticular", "oxyterpene", "unlapsing", "omega", "trophonema", "seminonflammable",
                "circumzenithal", "starer", "depthwise", "liberatress", "unleavened", "unrevolting", "groundneedle",
                "topline", "wandoo", "umangite", "ordinant", "unachievable", "oversand", "snare", "avengeful",
                "unexplicit", "mustafina", "sonable", "rehabilitative", "eulogization", "papery",
                "technopsychology", "impressor", "cresylite", "entame", "transudatory", "scotale", "pachydermatoid",
                "imaginary", "yeat", "slipped", "stewardship", "adatom", "cockstone", "skyshine", "heavenful",
                "comparability", "exprobratory", "dermorhynchous", "parquet", "cretaceous", "vesperal", "raphis",
                "undangered", "Glecoma", "engrain", "counteractively", "Zuludom", "orchiocatabasis",
                "Auriculariales", "warriorwise", "extraorganismal", "overbuilt", "alveolite", "tetchy",
                "terrificness", "widdle", "unpremonished", "rebilling", "sequestrum", "equiconvex",
                "heliocentricism", "catabaptist", "okonite", "propheticism", "helminthagogic", "calycular",
                "giantly", "wingable", "golem", "unprovided", "commandingness", "greave", "haply", "doina",
                "depressingly", "subdentate", "impairment", "decidable", "neurotrophic", "unpredict", "bicorporeal",
                "pendulant", "flatman", "intrabred", "toplike", "Prosobranchiata", "farrantly", "toxoplasmosis",
                "gorilloid", "dipsomaniacal", "aquiline", "atlantite", "ascitic", "perculsive", "prospectiveness",
                "saponaceous", "centrifugalization", "dinical", "infravaginal", "beadroll", "affaite", "Helvidian",
                "tickleproof", "abstractionism", "enhedge", "outwealth", "overcontribute", "coldfinch", "gymnastic",
                "Pincian", "Munychian", "codisjunct", "quad", "coracomandibular", "phoenicochroite", "amender",
                "selectivity", "putative", "semantician", "lophotrichic", "Spatangoidea", "saccharogenic",
                "inferent", "Triconodonta", "arrendation", "sheepskin", "taurocolla", "bunghole", "Machiavel",
                "triakistetrahedral", "dehairer", "prezygapophysial", "cylindric", "pneumonalgia", "sleigher",
                "emir", "Socraticism", "licitness", "massedly", "instructiveness", "sturdied", "redecrease",
                "starosta", "evictor", "orgiastic", "squdge", "meloplasty", "Tsonecan", "repealableness", "swoony",
                "myesthesia", "molecule", "autobiographist", "reciprocation", "refective", "unobservantness",
                "tricae", "ungouged", "floatability", "Mesua", "fetlocked", "chordacentrum", "sedentariness",
                "various", "laubanite", "nectopod", "zenick", "sequentially", "analgic", "biodynamics",
                "posttraumatic", "nummi", "pyroacetic", "bot", "redescend", "dispermy", "undiffusive", "circular",
                "trillion", "Uraniidae", "ploration", "discipular", "potentness", "sud", "Hu", "Eryon", "plugger",
                "subdrainage", "jharal", "abscission", "supermarket", "countergabion", "glacierist", "lithotresis",
                "minniebush", "zanyism", "eucalypteol", "sterilely", "unrealize", "unpatched", "hypochondriacism",
                "critically", "cheesecutter", };
    }

    /**
     * This is the main routine for launching a distributed random write job.
     * It runs 10 maps/node and each node writes 1 gig of data to a DFS file.
     * The reduce doesn't do anything.
     * 
     * @throws IOException 
     */
    public int run(String[] args) throws Exception {
        if (args.length == 0) {
            return printUsage();
        }
        Job job = createJob(getConf());
        FileOutputFormat.setOutputPath(job, new Path(args[0]));
        Date startTime = new Date();
        System.out.println("Job started: " + startTime);
        int ret = job.waitForCompletion(true) ? 0 : 1;
        Date endTime = new Date();
        System.out.println("Job ended: " + endTime);
        System.out.println("The job took " + (endTime.getTime() - startTime.getTime()) / 1000 + " seconds.");

        return ret;
    }

    static int printUsage() {
        System.out.println("randomtextwriter " + "[-outFormat <output format class>] " + "<output>");
        ToolRunner.printGenericCommandUsage(System.out);
        return 2;
    }

    public static void main(String[] args) throws Exception {
        int res = ToolRunner.run(new Configuration(), new RandomTextWriterJob(), args);
        System.exit(res);
    }
}