GenericMRLoadGenerator.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:29k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import java.util.ArrayList;
  23. import java.util.Date;
  24. import java.util.Iterator;
  25. import java.util.Random;
  26. import java.util.Stack;
  27. import org.apache.hadoop.conf.Configuration;
  28. import org.apache.hadoop.conf.Configured;
  29. import org.apache.hadoop.fs.FileStatus;
  30. import org.apache.hadoop.fs.FileSystem;
  31. import org.apache.hadoop.fs.Path;
  32. import org.apache.hadoop.io.LongWritable;
  33. import org.apache.hadoop.io.SequenceFile;
  34. import org.apache.hadoop.io.Text;
  35. import org.apache.hadoop.io.Writable;
  36. import org.apache.hadoop.io.WritableComparable;
  37. import org.apache.hadoop.io.WritableUtils;
  38. import org.apache.hadoop.mapred.lib.NullOutputFormat;
  39. import org.apache.hadoop.util.GenericOptionsParser;
  40. import org.apache.hadoop.util.ReflectionUtils;
  41. import org.apache.hadoop.util.Tool;
  42. import org.apache.hadoop.util.ToolRunner;
  43. public class GenericMRLoadGenerator extends Configured implements Tool {
  44.   protected static int printUsage() {
  45.     System.err.println(
  46.     "Usage: [-m <maps>] [-r <reduces>]n" +
  47.     "       [-keepmap <percent>] [-keepred <percent>]n" +
  48.     "       [-indir <path>] [-outdir <path]n" +
  49.     "       [-inFormat[Indirect] <InputFormat>] [-outFormat <OutputFormat>]n" +
  50.     "       [-outKey <WritableComparable>] [-outValue <Writable>]n");
  51.     GenericOptionsParser.printGenericCommandUsage(System.err);
  52.     return -1;
  53.   }
  54.   /**
  55.    * Configure a job given argv.
  56.    */
  57.   public static boolean parseArgs(String[] argv, JobConf job) throws IOException {
  58.     if (argv.length < 1) {
  59.       return 0 == printUsage();
  60.     }
  61.     for(int i=0; i < argv.length; ++i) {
  62.       if (argv.length == i + 1) {
  63.         System.out.println("ERROR: Required parameter missing from " +
  64.             argv[i]);
  65.         return 0 == printUsage();
  66.       }
  67.       try {
  68.         if ("-m".equals(argv[i])) {
  69.           job.setNumMapTasks(Integer.parseInt(argv[++i]));
  70.         } else if ("-r".equals(argv[i])) {
  71.           job.setNumReduceTasks(Integer.parseInt(argv[++i]));
  72.         } else if ("-inFormat".equals(argv[i])) {
  73.           job.setInputFormat(
  74.               Class.forName(argv[++i]).asSubclass(InputFormat.class));
  75.         } else if ("-outFormat".equals(argv[i])) {
  76.           job.setOutputFormat(
  77.               Class.forName(argv[++i]).asSubclass(OutputFormat.class));
  78.         } else if ("-outKey".equals(argv[i])) {
  79.           job.setOutputKeyClass(
  80.             Class.forName(argv[++i]).asSubclass(WritableComparable.class));
  81.         } else if ("-outValue".equals(argv[i])) {
  82.           job.setOutputValueClass(
  83.             Class.forName(argv[++i]).asSubclass(Writable.class));
  84.         } else if ("-keepmap".equals(argv[i])) {
  85.           job.set("hadoop.sort.map.keep.percent", argv[++i]);
  86.         } else if ("-keepred".equals(argv[i])) {
  87.           job.set("hadoop.sort.reduce.keep.percent", argv[++i]);
  88.         } else if ("-outdir".equals(argv[i])) {
  89.           FileOutputFormat.setOutputPath(job, new Path(argv[++i]));
  90.         } else if ("-indir".equals(argv[i])) {
  91.           FileInputFormat.addInputPaths(job, argv[++i]);
  92.         } else if ("-inFormatIndirect".equals(argv[i])) {
  93.           job.setClass("mapred.indirect.input.format",
  94.               Class.forName(argv[++i]).asSubclass(InputFormat.class),
  95.               InputFormat.class);
  96.           job.setInputFormat(IndirectInputFormat.class);
  97.         } else {
  98.           System.out.println("Unexpected argument: " + argv[i]);
  99.           return 0 == printUsage();
  100.         }
  101.       } catch (NumberFormatException except) {
  102.         System.out.println("ERROR: Integer expected instead of " + argv[i]);
  103.         return 0 == printUsage();
  104.       } catch (Exception e) {
  105.         throw (IOException)new IOException().initCause(e);
  106.       }
  107.     }
  108.     return true;
  109.   }
  110.   public int run(String [] argv) throws Exception {
  111.     JobConf job = new JobConf(getConf());
  112.     job.setJarByClass(GenericMRLoadGenerator.class);
  113.     job.setMapperClass(SampleMapper.class);
  114.     job.setReducerClass(SampleReducer.class);
  115.     if (!parseArgs(argv, job)) {
  116.       return -1;
  117.     }
  118.     if (null == FileOutputFormat.getOutputPath(job)) {
  119.       // No output dir? No writes
  120.       job.setOutputFormat(NullOutputFormat.class);
  121.     }
  122.     if (0 == FileInputFormat.getInputPaths(job).length) {
  123.       // No input dir? Generate random data
  124.       System.err.println("No input path; ignoring InputFormat");
  125.       confRandom(job);
  126.     } else if (null != job.getClass("mapred.indirect.input.format", null)) {
  127.       // specified IndirectInputFormat? Build src list
  128.       JobClient jClient = new JobClient(job);  
  129.       Path sysdir = jClient.getSystemDir();
  130.       Random r = new Random();
  131.       Path indirInputFile = new Path(sysdir,
  132.           Integer.toString(r.nextInt(Integer.MAX_VALUE), 36) + "_files");
  133.       job.set("mapred.indirect.input.file", indirInputFile.toString());
  134.       SequenceFile.Writer writer = SequenceFile.createWriter(
  135.           sysdir.getFileSystem(job), job, indirInputFile,
  136.           LongWritable.class, Text.class,
  137.           SequenceFile.CompressionType.NONE);
  138.       try {
  139.         for (Path p : FileInputFormat.getInputPaths(job)) {
  140.           FileSystem fs = p.getFileSystem(job);
  141.           Stack<Path> pathstack = new Stack<Path>();
  142.           pathstack.push(p);
  143.           while (!pathstack.empty()) {
  144.             for (FileStatus stat : fs.listStatus(pathstack.pop())) {
  145.               if (stat.isDir()) {
  146.                 if (!stat.getPath().getName().startsWith("_")) {
  147.                   pathstack.push(stat.getPath());
  148.                 }
  149.               } else {
  150.                 writer.sync();
  151.                 writer.append(new LongWritable(stat.getLen()),
  152.                     new Text(stat.getPath().toUri().toString()));
  153.               }
  154.             }
  155.           }
  156.         }
  157.       } finally {
  158.         writer.close();
  159.       }
  160.     }
  161.     Date startTime = new Date();
  162.     System.out.println("Job started: " + startTime);
  163.     JobClient.runJob(job);
  164.     Date endTime = new Date();
  165.     System.out.println("Job ended: " + endTime);
  166.     System.out.println("The job took " +
  167.                        (endTime.getTime() - startTime.getTime()) /1000 +
  168.                        " seconds.");
  169.     return 0;
  170.   }
  171.   /**
  172.    * Main driver/hook into ToolRunner.
  173.    */
  174.   public static void main(String[] argv) throws Exception {
  175.     int res =
  176.       ToolRunner.run(new Configuration(), new GenericMRLoadGenerator(), argv);
  177.     System.exit(res);
  178.   }
  179.   static class RandomInputFormat implements InputFormat {
  180.     public InputSplit[] getSplits(JobConf conf, int numSplits) {
  181.       InputSplit[] splits = new InputSplit[numSplits];
  182.       for (int i = 0; i < numSplits; ++i) {
  183.         splits[i] = new IndirectInputFormat.IndirectSplit(
  184.             new Path("ignore" + i), 1);
  185.       }
  186.       return splits;
  187.     }
  188.     public RecordReader<Text,Text> getRecordReader(InputSplit split,
  189.         JobConf job, Reporter reporter) throws IOException {
  190.       final IndirectInputFormat.IndirectSplit clSplit =
  191.         (IndirectInputFormat.IndirectSplit)split;
  192.       return new RecordReader<Text,Text>() {
  193.         boolean once = true;
  194.         public boolean next(Text key, Text value) {
  195.           if (once) {
  196.             key.set(clSplit.getPath().toString());
  197.             once = false;
  198.             return true;
  199.           }
  200.           return false;
  201.         }
  202.         public Text createKey() { return new Text(); }
  203.         public Text createValue() { return new Text(); }
  204.         public long getPos() { return 0; }
  205.         public void close() { }
  206.         public float getProgress() { return 0.0f; }
  207.       };
  208.     }
  209.   }
  210.   static enum Counters { RECORDS_WRITTEN, BYTES_WRITTEN }
  211.   static class RandomMapOutput extends MapReduceBase
  212.       implements Mapper<Text,Text,Text,Text> {
  213.     StringBuilder sentence = new StringBuilder();
  214.     int keymin;
  215.     int keymax;
  216.     int valmin;
  217.     int valmax;
  218.     long bytesToWrite;
  219.     Random r = new Random();
  220.     private int generateSentence(Text t, int noWords) {
  221.       sentence.setLength(0);
  222.       --noWords;
  223.       for (int i = 0; i < noWords; ++i) {
  224.         sentence.append(words[r.nextInt(words.length)]);
  225.         sentence.append(" ");
  226.       }
  227.       if (noWords >= 0) sentence.append(words[r.nextInt(words.length)]);
  228.       t.set(sentence.toString());
  229.       return sentence.length();
  230.     }
  231.     public void configure(JobConf job) {
  232.       bytesToWrite = job.getLong("test.randomtextwrite.bytes_per_map",
  233.                                     1*1024*1024*1024);
  234.       keymin = job.getInt("test.randomtextwrite.min_words_key", 5);
  235.       keymax = job.getInt("test.randomtextwrite.max_words_key", 10);
  236.       valmin = job.getInt("test.randomtextwrite.min_words_value", 5);
  237.       valmax = job.getInt("test.randomtextwrite.max_words_value", 10);
  238.     }
  239.     public void map(Text key, Text val, OutputCollector<Text,Text> output,
  240.         Reporter reporter) throws IOException {
  241.       long acc = 0L;
  242.       long recs = 0;
  243.       final int keydiff = keymax - keymin;
  244.       final int valdiff = valmax - valmin;
  245.       for (long i = 0L; acc < bytesToWrite; ++i) {
  246.         int recacc = 0;
  247.         recacc += generateSentence(key, keymin +
  248.             (0 == keydiff ? 0 : r.nextInt(keydiff)));
  249.         recacc += generateSentence(val, valmin +
  250.             (0 == valdiff ? 0 : r.nextInt(valdiff)));
  251.         output.collect(key, val);
  252.         ++recs;
  253.         acc += recacc;
  254.         reporter.incrCounter(Counters.BYTES_WRITTEN, recacc);
  255.         reporter.incrCounter(Counters.RECORDS_WRITTEN, 1);
  256.         reporter.setStatus(acc + "/" + (bytesToWrite - acc) + " bytes");
  257.       }
  258.       reporter.setStatus("Wrote " + recs + " records");
  259.     }
  260.   }
  261.   /**
  262.    * When no input dir is specified, generate random data.
  263.    */
  264.   protected static void confRandom(JobConf job)
  265.       throws IOException {
  266.     // from RandomWriter
  267.     job.setInputFormat(RandomInputFormat.class);
  268.     job.setMapperClass(RandomMapOutput.class);
  269.     final ClusterStatus cluster = new JobClient(job).getClusterStatus();
  270.     int numMapsPerHost = job.getInt("test.randomtextwrite.maps_per_host", 10);
  271.     long numBytesToWritePerMap =
  272.       job.getLong("test.randomtextwrite.bytes_per_map", 1*1024*1024*1024);
  273.     if (numBytesToWritePerMap == 0) {
  274.       throw new IOException(
  275.           "Cannot have test.randomtextwrite.bytes_per_map set to 0");
  276.     }
  277.     long totalBytesToWrite = job.getLong("test.randomtextwrite.total_bytes",
  278.          numMapsPerHost * numBytesToWritePerMap * cluster.getTaskTrackers());
  279.     int numMaps = (int)(totalBytesToWrite / numBytesToWritePerMap);
  280.     if (numMaps == 0 && totalBytesToWrite > 0) {
  281.       numMaps = 1;
  282.       job.setLong("test.randomtextwrite.bytes_per_map", totalBytesToWrite);
  283.     }
  284.     job.setNumMapTasks(numMaps);
  285.   }
  286.   // Sampling //
  287.   static abstract class SampleMapReduceBase<K extends WritableComparable,
  288.                                             V extends Writable>
  289.       extends MapReduceBase {
  290.     private long total;
  291.     private long kept = 0;
  292.     private float keep;
  293.     protected void setKeep(float keep) {
  294.       this.keep = keep;
  295.     }
  296.     protected void emit(K key, V val, OutputCollector<K,V> out)
  297.         throws IOException {
  298.       ++total;
  299.       while((float) kept / total < keep) {
  300.         ++kept;
  301.         out.collect(key, val);
  302.       }
  303.     }
  304.   }
  305.   public static class SampleMapper<K extends WritableComparable, V extends Writable>
  306.       extends SampleMapReduceBase<K,V> implements Mapper<K,V,K,V> {
  307.     public void configure(JobConf job) {
  308.       setKeep(job.getFloat("hadoop.sort.map.keep.percent", (float)100.0) /
  309.         (float)100.0);
  310.     }
  311.     public void map(K key, V val,
  312.                     OutputCollector<K,V> output, Reporter reporter)
  313.         throws IOException {
  314.       emit(key, val, output);
  315.     }
  316.   }
  317.   public static class SampleReducer<K extends WritableComparable, V extends Writable>
  318.       extends SampleMapReduceBase<K,V> implements Reducer<K,V,K,V> {
  319.     public void configure(JobConf job) {
  320.       setKeep(job.getFloat("hadoop.sort.reduce.keep.percent", (float)100.0) /
  321.         (float)100.0);
  322.     }
  323.     public void reduce(K key, Iterator<V> values,
  324.                        OutputCollector<K,V> output, Reporter reporter)
  325.         throws IOException {
  326.       while (values.hasNext()) {
  327.         emit(key, values.next(), output);
  328.       }
  329.     }
  330.   }
  331.   // Indirect reads //
  332.   /**
  333.    * Obscures the InputFormat and location information to simulate maps
  334.    * reading input from arbitrary locations (&quot;indirect&quot; reads).
  335.    */
  336.   static class IndirectInputFormat implements InputFormat {
  337.     static class IndirectSplit implements InputSplit {
  338.       Path file;
  339.       long len;
  340.       public IndirectSplit() { }
  341.       public IndirectSplit(Path file, long len) {
  342.         this.file = file;
  343.         this.len = len;
  344.       }
  345.       public Path getPath() { return file; }
  346.       public long getLength() { return len; }
  347.       public String[] getLocations() throws IOException {
  348.         return new String[]{};
  349.       }
  350.       public void write(DataOutput out) throws IOException {
  351.         WritableUtils.writeString(out, file.toString());
  352.         WritableUtils.writeVLong(out, len);
  353.       }
  354.       public void readFields(DataInput in) throws IOException {
  355.         file = new Path(WritableUtils.readString(in));
  356.         len = WritableUtils.readVLong(in);
  357.       }
  358.     }
  359.     public InputSplit[] getSplits(JobConf job, int numSplits)
  360.         throws IOException {
  361.       Path src = new Path(job.get("mapred.indirect.input.file", null));
  362.       FileSystem fs = src.getFileSystem(job);
  363.       ArrayList<IndirectSplit> splits = new ArrayList<IndirectSplit>(numSplits);
  364.       LongWritable key = new LongWritable();
  365.       Text value = new Text();
  366.       for (SequenceFile.Reader sl = new SequenceFile.Reader(fs, src, job);
  367.            sl.next(key, value);) {
  368.         splits.add(new IndirectSplit(new Path(value.toString()), key.get()));
  369.       }
  370.       return splits.toArray(new IndirectSplit[splits.size()]);
  371.     }
  372.     public RecordReader getRecordReader(InputSplit split, JobConf job,
  373.         Reporter reporter) throws IOException {
  374.       InputFormat indirIF = (InputFormat)ReflectionUtils.newInstance(
  375.           job.getClass("mapred.indirect.input.format",
  376.             SequenceFileInputFormat.class), job);
  377.       IndirectSplit is = ((IndirectSplit)split);
  378.       return indirIF.getRecordReader(new FileSplit(is.getPath(), 0,
  379.             is.getLength(), (String[])null),
  380.           job, reporter);
  381.     }
  382.   }
  383.   /**
  384.    * A random list of 1000 words from /usr/share/dict/words
  385.    */
  386.   private static final String[] words = {
  387.     "diurnalness", "Homoiousian", "spiranthic", "tetragynian",
  388.     "silverhead", "ungreat", "lithograph", "exploiter",
  389.     "physiologian", "by", "hellbender", "Filipendula",
  390.     "undeterring", "antiscolic", "pentagamist", "hypoid",
  391.     "cacuminal", "sertularian", "schoolmasterism", "nonuple",
  392.     "gallybeggar", "phytonic", "swearingly", "nebular",
  393.     "Confervales", "thermochemically", "characinoid", "cocksuredom",
  394.     "fallacious", "feasibleness", "debromination", "playfellowship",
  395.     "tramplike", "testa", "participatingly", "unaccessible",
  396.     "bromate", "experientialist", "roughcast", "docimastical",
  397.     "choralcelo", "blightbird", "peptonate", "sombreroed",
  398.     "unschematized", "antiabolitionist", "besagne", "mastication",
  399.     "bromic", "sviatonosite", "cattimandoo", "metaphrastical",
  400.     "endotheliomyoma", "hysterolysis", "unfulminated", "Hester",
  401.     "oblongly", "blurredness", "authorling", "chasmy",
  402.     "Scorpaenidae", "toxihaemia", "Dictograph", "Quakerishly",
  403.     "deaf", "timbermonger", "strammel", "Thraupidae",
  404.     "seditious", "plerome", "Arneb", "eristically",
  405.     "serpentinic", "glaumrie", "socioromantic", "apocalypst",
  406.     "tartrous", "Bassaris", "angiolymphoma", "horsefly",
  407.     "kenno", "astronomize", "euphemious", "arsenide",
  408.     "untongued", "parabolicness", "uvanite", "helpless",
  409.     "gemmeous", "stormy", "templar", "erythrodextrin",
  410.     "comism", "interfraternal", "preparative", "parastas",
  411.     "frontoorbital", "Ophiosaurus", "diopside", "serosanguineous",
  412.     "ununiformly", "karyological", "collegian", "allotropic",
  413.     "depravity", "amylogenesis", "reformatory", "epidymides",
  414.     "pleurotropous", "trillium", "dastardliness", "coadvice",
  415.     "embryotic", "benthonic", "pomiferous", "figureheadship",
  416.     "Megaluridae", "Harpa", "frenal", "commotion",
  417.     "abthainry", "cobeliever", "manilla", "spiciferous",
  418.     "nativeness", "obispo", "monilioid", "biopsic",
  419.     "valvula", "enterostomy", "planosubulate", "pterostigma",
  420.     "lifter", "triradiated", "venialness", "tum",
  421.     "archistome", "tautness", "unswanlike", "antivenin",
  422.     "Lentibulariaceae", "Triphora", "angiopathy", "anta",
  423.     "Dawsonia", "becomma", "Yannigan", "winterproof",
  424.     "antalgol", "harr", "underogating", "ineunt",
  425.     "cornberry", "flippantness", "scyphostoma", "approbation",
  426.     "Ghent", "Macraucheniidae", "scabbiness", "unanatomized",
  427.     "photoelasticity", "eurythermal", "enation", "prepavement",
  428.     "flushgate", "subsequentially", "Edo", "antihero",
  429.     "Isokontae", "unforkedness", "porriginous", "daytime",
  430.     "nonexecutive", "trisilicic", "morphiomania", "paranephros",
  431.     "botchedly", "impugnation", "Dodecatheon", "obolus",
  432.     "unburnt", "provedore", "Aktistetae", "superindifference",
  433.     "Alethea", "Joachimite", "cyanophilous", "chorograph",
  434.     "brooky", "figured", "periclitation", "quintette",
  435.     "hondo", "ornithodelphous", "unefficient", "pondside",
  436.     "bogydom", "laurinoxylon", "Shiah", "unharmed",
  437.     "cartful", "noncrystallized", "abusiveness", "cromlech",
  438.     "japanned", "rizzomed", "underskin", "adscendent",
  439.     "allectory", "gelatinousness", "volcano", "uncompromisingly",
  440.     "cubit", "idiotize", "unfurbelowed", "undinted",
  441.     "magnetooptics", "Savitar", "diwata", "ramosopalmate",
  442.     "Pishquow", "tomorn", "apopenptic", "Haversian",
  443.     "Hysterocarpus", "ten", "outhue", "Bertat",
  444.     "mechanist", "asparaginic", "velaric", "tonsure",
  445.     "bubble", "Pyrales", "regardful", "glyphography",
  446.     "calabazilla", "shellworker", "stradametrical", "havoc",
  447.     "theologicopolitical", "sawdust", "diatomaceous", "jajman",
  448.     "temporomastoid", "Serrifera", "Ochnaceae", "aspersor",
  449.     "trailmaking", "Bishareen", "digitule", "octogynous",
  450.     "epididymitis", "smokefarthings", "bacillite", "overcrown",
  451.     "mangonism", "sirrah", "undecorated", "psychofugal",
  452.     "bismuthiferous", "rechar", "Lemuridae", "frameable",
  453.     "thiodiazole", "Scanic", "sportswomanship", "interruptedness",
  454.     "admissory", "osteopaedion", "tingly", "tomorrowness",
  455.     "ethnocracy", "trabecular", "vitally", "fossilism",
  456.     "adz", "metopon", "prefatorial", "expiscate",
  457.     "diathermacy", "chronist", "nigh", "generalizable",
  458.     "hysterogen", "aurothiosulphuric", "whitlowwort", "downthrust",
  459.     "Protestantize", "monander", "Itea", "chronographic",
  460.     "silicize", "Dunlop", "eer", "componental",
  461.     "spot", "pamphlet", "antineuritic", "paradisean",
  462.     "interruptor", "debellator", "overcultured", "Florissant",
  463.     "hyocholic", "pneumatotherapy", "tailoress", "rave",
  464.     "unpeople", "Sebastian", "thermanesthesia", "Coniferae",
  465.     "swacking", "posterishness", "ethmopalatal", "whittle",
  466.     "analgize", "scabbardless", "naught", "symbiogenetically",
  467.     "trip", "parodist", "columniform", "trunnel",
  468.     "yawler", "goodwill", "pseudohalogen", "swangy",
  469.     "cervisial", "mediateness", "genii", "imprescribable",
  470.     "pony", "consumptional", "carposporangial", "poleax",
  471.     "bestill", "subfebrile", "sapphiric", "arrowworm",
  472.     "qualminess", "ultraobscure", "thorite", "Fouquieria",
  473.     "Bermudian", "prescriber", "elemicin", "warlike",
  474.     "semiangle", "rotular", "misthread", "returnability",
  475.     "seraphism", "precostal", "quarried", "Babylonism",
  476.     "sangaree", "seelful", "placatory", "pachydermous",
  477.     "bozal", "galbulus", "spermaphyte", "cumbrousness",
  478.     "pope", "signifier", "Endomycetaceae", "shallowish",
  479.     "sequacity", "periarthritis", "bathysphere", "pentosuria",
  480.     "Dadaism", "spookdom", "Consolamentum", "afterpressure",
  481.     "mutter", "louse", "ovoviviparous", "corbel",
  482.     "metastoma", "biventer", "Hydrangea", "hogmace",
  483.     "seizing", "nonsuppressed", "oratorize", "uncarefully",
  484.     "benzothiofuran", "penult", "balanocele", "macropterous",
  485.     "dishpan", "marten", "absvolt", "jirble",
  486.     "parmelioid", "airfreighter", "acocotl", "archesporial",
  487.     "hypoplastral", "preoral", "quailberry", "cinque",
  488.     "terrestrially", "stroking", "limpet", "moodishness",
  489.     "canicule", "archididascalian", "pompiloid", "overstaid",
  490.     "introducer", "Italical", "Christianopaganism", "prescriptible",
  491.     "subofficer", "danseuse", "cloy", "saguran",
  492.     "frictionlessly", "deindividualization", "Bulanda", "ventricous",
  493.     "subfoliar", "basto", "scapuloradial", "suspend",
  494.     "stiffish", "Sphenodontidae", "eternal", "verbid",
  495.     "mammonish", "upcushion", "barkometer", "concretion",
  496.     "preagitate", "incomprehensible", "tristich", "visceral",
  497.     "hemimelus", "patroller", "stentorophonic", "pinulus",
  498.     "kerykeion", "brutism", "monstership", "merciful",
  499.     "overinstruct", "defensibly", "bettermost", "splenauxe",
  500.     "Mormyrus", "unreprimanded", "taver", "ell",
  501.     "proacquittal", "infestation", "overwoven", "Lincolnlike",
  502.     "chacona", "Tamil", "classificational", "lebensraum",
  503.     "reeveland", "intuition", "Whilkut", "focaloid",
  504.     "Eleusinian", "micromembrane", "byroad", "nonrepetition",
  505.     "bacterioblast", "brag", "ribaldrous", "phytoma",
  506.     "counteralliance", "pelvimetry", "pelf", "relaster",
  507.     "thermoresistant", "aneurism", "molossic", "euphonym",
  508.     "upswell", "ladhood", "phallaceous", "inertly",
  509.     "gunshop", "stereotypography", "laryngic", "refasten",
  510.     "twinling", "oflete", "hepatorrhaphy", "electrotechnics",
  511.     "cockal", "guitarist", "topsail", "Cimmerianism",
  512.     "larklike", "Llandovery", "pyrocatechol", "immatchable",
  513.     "chooser", "metrocratic", "craglike", "quadrennial",
  514.     "nonpoisonous", "undercolored", "knob", "ultratense",
  515.     "balladmonger", "slait", "sialadenitis", "bucketer",
  516.     "magnificently", "unstipulated", "unscourged", "unsupercilious",
  517.     "packsack", "pansophism", "soorkee", "percent",
  518.     "subirrigate", "champer", "metapolitics", "spherulitic",
  519.     "involatile", "metaphonical", "stachyuraceous", "speckedness",
  520.     "bespin", "proboscidiform", "gul", "squit",
  521.     "yeelaman", "peristeropode", "opacousness", "shibuichi",
  522.     "retinize", "yote", "misexposition", "devilwise",
  523.     "pumpkinification", "vinny", "bonze", "glossing",
  524.     "decardinalize", "transcortical", "serphoid", "deepmost",
  525.     "guanajuatite", "wemless", "arval", "lammy",
  526.     "Effie", "Saponaria", "tetrahedral", "prolificy",
  527.     "excerpt", "dunkadoo", "Spencerism", "insatiately",
  528.     "Gilaki", "oratorship", "arduousness", "unbashfulness",
  529.     "Pithecolobium", "unisexuality", "veterinarian", "detractive",
  530.     "liquidity", "acidophile", "proauction", "sural",
  531.     "totaquina", "Vichyite", "uninhabitedness", "allegedly",
  532.     "Gothish", "manny", "Inger", "flutist",
  533.     "ticktick", "Ludgatian", "homotransplant", "orthopedical",
  534.     "diminutively", "monogoneutic", "Kenipsim", "sarcologist",
  535.     "drome", "stronghearted", "Fameuse", "Swaziland",
  536.     "alen", "chilblain", "beatable", "agglomeratic",
  537.     "constitutor", "tendomucoid", "porencephalous", "arteriasis",
  538.     "boser", "tantivy", "rede", "lineamental",
  539.     "uncontradictableness", "homeotypical", "masa", "folious",
  540.     "dosseret", "neurodegenerative", "subtransverse", "Chiasmodontidae",
  541.     "palaeotheriodont", "unstressedly", "chalcites", "piquantness",
  542.     "lampyrine", "Aplacentalia", "projecting", "elastivity",
  543.     "isopelletierin", "bladderwort", "strander", "almud",
  544.     "iniquitously", "theologal", "bugre", "chargeably",
  545.     "imperceptivity", "meriquinoidal", "mesophyte", "divinator",
  546.     "perfunctory", "counterappellant", "synovial", "charioteer",
  547.     "crystallographical", "comprovincial", "infrastapedial", "pleasurehood",
  548.     "inventurous", "ultrasystematic", "subangulated", "supraoesophageal",
  549.     "Vaishnavism", "transude", "chrysochrous", "ungrave",
  550.     "reconciliable", "uninterpleaded", "erlking", "wherefrom",
  551.     "aprosopia", "antiadiaphorist", "metoxazine", "incalculable",
  552.     "umbellic", "predebit", "foursquare", "unimmortal",
  553.     "nonmanufacture", "slangy", "predisputant", "familist",
  554.     "preaffiliate", "friarhood", "corelysis", "zoonitic",
  555.     "halloo", "paunchy", "neuromimesis", "aconitine",
  556.     "hackneyed", "unfeeble", "cubby", "autoschediastical",
  557.     "naprapath", "lyrebird", "inexistency", "leucophoenicite",
  558.     "ferrogoslarite", "reperuse", "uncombable", "tambo",
  559.     "propodiale", "diplomatize", "Russifier", "clanned",
  560.     "corona", "michigan", "nonutilitarian", "transcorporeal",
  561.     "bought", "Cercosporella", "stapedius", "glandularly",
  562.     "pictorially", "weism", "disilane", "rainproof",
  563.     "Caphtor", "scrubbed", "oinomancy", "pseudoxanthine",
  564.     "nonlustrous", "redesertion", "Oryzorictinae", "gala",
  565.     "Mycogone", "reappreciate", "cyanoguanidine", "seeingness",
  566.     "breadwinner", "noreast", "furacious", "epauliere",
  567.     "omniscribent", "Passiflorales", "uninductive", "inductivity",
  568.     "Orbitolina", "Semecarpus", "migrainoid", "steprelationship",
  569.     "phlogisticate", "mesymnion", "sloped", "edificator",
  570.     "beneficent", "culm", "paleornithology", "unurban",
  571.     "throbless", "amplexifoliate", "sesquiquintile", "sapience",
  572.     "astucious", "dithery", "boor", "ambitus",
  573.     "scotching", "uloid", "uncompromisingness", "hoove",
  574.     "waird", "marshiness", "Jerusalem", "mericarp",
  575.     "unevoked", "benzoperoxide", "outguess", "pyxie",
  576.     "hymnic", "euphemize", "mendacity", "erythremia",
  577.     "rosaniline", "unchatteled", "lienteria", "Bushongo",
  578.     "dialoguer", "unrepealably", "rivethead", "antideflation",
  579.     "vinegarish", "manganosiderite", "doubtingness", "ovopyriform",
  580.     "Cephalodiscus", "Muscicapa", "Animalivora", "angina",
  581.     "planispheric", "ipomoein", "cuproiodargyrite", "sandbox",
  582.     "scrat", "Munnopsidae", "shola", "pentafid",
  583.     "overstudiousness", "times", "nonprofession", "appetible",
  584.     "valvulotomy", "goladar", "uniarticular", "oxyterpene",
  585.     "unlapsing", "omega", "trophonema", "seminonflammable",
  586.     "circumzenithal", "starer", "depthwise", "liberatress",
  587.     "unleavened", "unrevolting", "groundneedle", "topline",
  588.     "wandoo", "umangite", "ordinant", "unachievable",
  589.     "oversand", "snare", "avengeful", "unexplicit",
  590.     "mustafina", "sonable", "rehabilitative", "eulogization",
  591.     "papery", "technopsychology", "impressor", "cresylite",
  592.     "entame", "transudatory", "scotale", "pachydermatoid",
  593.     "imaginary", "yeat", "slipped", "stewardship",
  594.     "adatom", "cockstone", "skyshine", "heavenful",
  595.     "comparability", "exprobratory", "dermorhynchous", "parquet",
  596.     "cretaceous", "vesperal", "raphis", "undangered",
  597.     "Glecoma", "engrain", "counteractively", "Zuludom",
  598.     "orchiocatabasis", "Auriculariales", "warriorwise", "extraorganismal",
  599.     "overbuilt", "alveolite", "tetchy", "terrificness",
  600.     "widdle", "unpremonished", "rebilling", "sequestrum",
  601.     "equiconvex", "heliocentricism", "catabaptist", "okonite",
  602.     "propheticism", "helminthagogic", "calycular", "giantly",
  603.     "wingable", "golem", "unprovided", "commandingness",
  604.     "greave", "haply", "doina", "depressingly",
  605.     "subdentate", "impairment", "decidable", "neurotrophic",
  606.     "unpredict", "bicorporeal", "pendulant", "flatman",
  607.     "intrabred", "toplike", "Prosobranchiata", "farrantly",
  608.     "toxoplasmosis", "gorilloid", "dipsomaniacal", "aquiline",
  609.     "atlantite", "ascitic", "perculsive", "prospectiveness",
  610.     "saponaceous", "centrifugalization", "dinical", "infravaginal",
  611.     "beadroll", "affaite", "Helvidian", "tickleproof",
  612.     "abstractionism", "enhedge", "outwealth", "overcontribute",
  613.     "coldfinch", "gymnastic", "Pincian", "Munychian",
  614.     "codisjunct", "quad", "coracomandibular", "phoenicochroite",
  615.     "amender", "selectivity", "putative", "semantician",
  616.     "lophotrichic", "Spatangoidea", "saccharogenic", "inferent",
  617.     "Triconodonta", "arrendation", "sheepskin", "taurocolla",
  618.     "bunghole", "Machiavel", "triakistetrahedral", "dehairer",
  619.     "prezygapophysial", "cylindric", "pneumonalgia", "sleigher",
  620.     "emir", "Socraticism", "licitness", "massedly",
  621.     "instructiveness", "sturdied", "redecrease", "starosta",
  622.     "evictor", "orgiastic", "squdge", "meloplasty",
  623.     "Tsonecan", "repealableness", "swoony", "myesthesia",
  624.     "molecule", "autobiographist", "reciprocation", "refective",
  625.     "unobservantness", "tricae", "ungouged", "floatability",
  626.     "Mesua", "fetlocked", "chordacentrum", "sedentariness",
  627.     "various", "laubanite", "nectopod", "zenick",
  628.     "sequentially", "analgic", "biodynamics", "posttraumatic",
  629.     "nummi", "pyroacetic", "bot", "redescend",
  630.     "dispermy", "undiffusive", "circular", "trillion",
  631.     "Uraniidae", "ploration", "discipular", "potentness",
  632.     "sud", "Hu", "Eryon", "plugger",
  633.     "subdrainage", "jharal", "abscission", "supermarket",
  634.     "countergabion", "glacierist", "lithotresis", "minniebush",
  635.     "zanyism", "eucalypteol", "sterilely", "unrealize",
  636.     "unpatched", "hypochondriacism", "critically", "cheesecutter",
  637.   };
  638. }