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

网格计算

开发平台:

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.io;
  19. import java.io.IOException;
  20. import java.util.ArrayList;
  21. import java.util.Date;
  22. import java.util.EnumSet;
  23. import java.util.HashMap;
  24. import java.util.Map;
  25. import java.util.Random;
  26. import org.apache.hadoop.conf.Configuration;
  27. import org.apache.hadoop.conf.Configured;
  28. import org.apache.hadoop.fs.FileStatus;
  29. import org.apache.hadoop.fs.FileSystem;
  30. import org.apache.hadoop.fs.Path;
  31. import org.apache.hadoop.io.compress.CompressionCodec;
  32. import org.apache.hadoop.io.compress.GzipCodec;
  33. import org.apache.hadoop.io.Text;
  34. import org.apache.hadoop.mapred.*;
  35. import org.apache.hadoop.util.Tool;
  36. import org.apache.hadoop.util.ToolRunner;
  37. public class FileBench extends Configured implements Tool {
  38.   static int printUsage() {
  39.     ToolRunner.printGenericCommandUsage(System.out);
  40.     System.out.println(
  41. "Usage: Task list:           -[no]r -[no]wn" +
  42. "       Format:              -[no]seq -[no]txtn" +
  43. "       CompressionCodec:    -[no]zip -[no]plnn" +
  44. "       CompressionType:     -[no]blk -[no]recn" +
  45. "       Required:            -dir <working dir>n" +
  46. "All valid combinations are implicitly enabled, unless an option is enabledn" +
  47. "explicitly. For example, specifying "-zip", excludes -pln,n" +
  48. "unless they are also explicitly included, as in "-pln -zip"n" +
  49. "Note that CompressionType params only apply to SequenceFilesnn" +
  50. "Useful options to set:n" +
  51. "-D fs.default.name="file:///" \n" +
  52. "-D fs.file.impl=org.apache.hadoop.fs.RawLocalFileSystem \n" +
  53. "-D filebench.file.bytes=$((10*1024*1024*1024)) \n" +
  54. "-D filebench.key.words=5 \n" +
  55. "-D filebench.val.words=20n");
  56.     return -1;
  57.   }
  58.   static String[] keys;
  59.   static String[] values;
  60.   static StringBuilder sentence = new StringBuilder();
  61.   private static String generateSentence(Random r, int noWords) {
  62.     sentence.setLength(0);
  63.     for (int i=0; i < noWords; ++i) {
  64.       sentence.append(words[r.nextInt(words.length)]);
  65.       sentence.append(" ");
  66.     }
  67.     return sentence.toString();
  68.   }
  69.   // fill keys, values with ~1.5 blocks for block-compressed seq fill
  70.   private static void fillBlocks(JobConf conf) {
  71.     Random r = new Random();
  72.     long seed = conf.getLong("filebench.seed", -1);
  73.     if (seed > 0) {
  74.       r.setSeed(seed);
  75.     }
  76.     int keylen = conf.getInt("filebench.key.words", 5);
  77.     int vallen = conf.getInt("filebench.val.words", 20);
  78.     int acc = (3 * conf.getInt("io.seqfile.compress.blocksize", 1000000)) >> 1;
  79.     ArrayList<String> k = new ArrayList<String>();
  80.     ArrayList<String> v = new ArrayList<String>();
  81.     for (int i = 0; acc > 0; ++i) {
  82.       String s = generateSentence(r, keylen);
  83.       acc -= s.length();
  84.       k.add(s);
  85.       s = generateSentence(r, vallen);
  86.       acc -= s.length();
  87.       v.add(s);
  88.     }
  89.     keys = k.toArray(new String[0]);
  90.     values = v.toArray(new String[0]);
  91.   }
  92.   @SuppressWarnings("unchecked") // OutputFormat instantiation
  93.   static long writeBench(JobConf conf) throws IOException {
  94.     long filelen = conf.getLong("filebench.file.bytes", 5 * 1024 * 1024 * 1024);
  95.     Text key = new Text();
  96.     Text val = new Text();
  97.     final String fn = conf.get("test.filebench.name", "");
  98.     final Path outd = FileOutputFormat.getOutputPath(conf);
  99.     conf.set("mapred.work.output.dir", outd.toString());
  100.     OutputFormat outf = conf.getOutputFormat();
  101.     RecordWriter<Text,Text> rw =
  102.       outf.getRecordWriter(outd.getFileSystem(conf), conf, fn,
  103.                            Reporter.NULL);
  104.     try {
  105.       long acc = 0L;
  106.       Date start = new Date();
  107.       for (int i = 0; acc < filelen; ++i) {
  108.         i %= keys.length;
  109.         key.set(keys[i]);
  110.         val.set(values[i]);
  111.         rw.write(key, val);
  112.         acc += keys[i].length();
  113.         acc += values[i].length();
  114.       }
  115.       Date end = new Date();
  116.       return end.getTime() - start.getTime();
  117.     } finally {
  118.       rw.close(Reporter.NULL);
  119.     }
  120.   }
  121.   @SuppressWarnings("unchecked") // InputFormat instantiation
  122.   static long readBench(JobConf conf) throws IOException {
  123.     InputFormat inf = conf.getInputFormat();
  124.     final String fn = conf.get("test.filebench.name", "");
  125.     Path pin = new Path(FileInputFormat.getInputPaths(conf)[0], fn);
  126.     FileStatus in = pin.getFileSystem(conf).getFileStatus(pin);
  127.     RecordReader rr = inf.getRecordReader(new FileSplit(pin, 0, in.getLen(), 
  128.                                           (String[])null), conf, Reporter.NULL);
  129.     try {
  130.       Object key = rr.createKey();
  131.       Object val = rr.createValue();
  132.       Date start = new Date();
  133.       while (rr.next(key, val));
  134.       Date end = new Date();
  135.       return end.getTime() - start.getTime();
  136.     } finally {
  137.       rr.close();
  138.     }
  139.   }
  140.   public static void main(String[] args) throws Exception {
  141.     int res = ToolRunner.run(new Configuration(), new FileBench(), args);
  142.     System.exit(res);
  143.   }
  144.   /**
  145.    * Process params from command line and run set of benchmarks specified.
  146.    */
  147.   public int run(String[] argv) throws IOException {
  148.     JobConf job = new JobConf(getConf());
  149.     EnumSet<CCodec> cc = null;
  150.     EnumSet<CType> ct = null;
  151.     EnumSet<Format> f = null;
  152.     EnumSet<RW> rw = null;
  153.     Path root = null;
  154.     FileSystem fs = FileSystem.get(job);
  155.     for(int i = 0; i < argv.length; ++i) {
  156.       try {
  157.         if ("-dir".equals(argv[i])) {
  158.           root = new Path(argv[++i]).makeQualified(fs);
  159.           System.out.println("DIR: " + root.toString());
  160.         } else if ("-seed".equals(argv[i])) {
  161.           job.setLong("filebench.seed", Long.valueOf(argv[++i]));
  162.         } else if (argv[i].startsWith("-no")) {
  163.           String arg = argv[i].substring(3);
  164.           cc = rem(CCodec.class, cc, arg);
  165.           ct = rem(CType.class, ct, arg);
  166.           f =  rem(Format.class, f, arg);
  167.           rw = rem(RW.class, rw, arg);
  168.         } else {
  169.           String arg = argv[i].substring(1);
  170.           cc = add(CCodec.class, cc, arg);
  171.           ct = add(CType.class, ct, arg);
  172.           f =  add(Format.class, f, arg);
  173.           rw = add(RW.class, rw, arg);
  174.         }
  175.       } catch (Exception e) {
  176.         throw (IOException)new IOException().initCause(e);
  177.       }
  178.     }
  179.     if (null == root) {
  180.       System.out.println("Missing -dir param");
  181.       printUsage();
  182.       return -1;
  183.     }
  184.     fillBlocks(job);
  185.     job.setOutputKeyClass(Text.class);
  186.     job.setOutputValueClass(Text.class);
  187.     FileInputFormat.setInputPaths(job, root);
  188.     FileOutputFormat.setOutputPath(job, root);
  189.     if (null == cc) cc = EnumSet.allOf(CCodec.class);
  190.     if (null == ct) ct = EnumSet.allOf(CType.class);
  191.     if (null == f)  f  = EnumSet.allOf(Format.class);
  192.     if (null == rw) rw = EnumSet.allOf(RW.class);
  193.     for (RW rwop : rw) {
  194.       for (Format fmt : f) {
  195.         fmt.configure(job);
  196.         for (CCodec cod : cc) {
  197.           cod.configure(job);
  198.           if (!(fmt == Format.txt || cod == CCodec.pln)) {
  199.             for (CType typ : ct) {
  200.               String fn =
  201.                 fmt.name().toUpperCase() + "_" +
  202.                 cod.name().toUpperCase() + "_" +
  203.                 typ.name().toUpperCase();
  204.               typ.configure(job);
  205.               System.out.print(rwop.name().toUpperCase() + " " + fn + ": ");
  206.               System.out.println(rwop.exec(fn, job) / 1000 +
  207.                   " seconds");
  208.             }
  209.           } else {
  210.             String fn =
  211.               fmt.name().toUpperCase() + "_" +
  212.               cod.name().toUpperCase();
  213.             Path p = new Path(root, fn);
  214.             if (rwop == RW.r && !fs.exists(p)) {
  215.               fn += cod.getExt();
  216.             }
  217.             System.out.print(rwop.name().toUpperCase() + " " + fn + ": ");
  218.             System.out.println(rwop.exec(fn, job) / 1000 +
  219.                 " seconds");
  220.           }
  221.         }
  222.       }
  223.     }
  224.     return 0;
  225.   }
  226.   // overwrought argument processing and wordlist follow
  227.   enum CCodec {
  228.     zip(GzipCodec.class, ".gz"), pln(null, "");
  229.     Class<? extends CompressionCodec> inf;
  230.     String ext;
  231.     CCodec(Class<? extends CompressionCodec> inf, String ext) {
  232.       this.inf = inf;
  233.       this.ext = ext;
  234.     }
  235.     public void configure(JobConf job) {
  236.       if (inf != null) {
  237.         job.setBoolean("mapred.output.compress", true);
  238.         job.setClass("mapred.output.compression.codec", inf,
  239.             CompressionCodec.class);
  240.       } else {
  241.         job.setBoolean("mapred.output.compress", false);
  242.       }
  243.     }
  244.     public String getExt() { return ext; }
  245.   }
  246.   enum CType {
  247.     blk("BLOCK"),
  248.     rec("RECORD");
  249.     String typ;
  250.     CType(String typ) { this.typ = typ; }
  251.     public void configure(JobConf job) {
  252.       job.set("mapred.map.output.compression.type", typ);
  253.       job.set("mapred.output.compression.type", typ);
  254.     }
  255.   }
  256.   enum Format {
  257.     seq(SequenceFileInputFormat.class, SequenceFileOutputFormat.class),
  258.     txt(TextInputFormat.class, TextOutputFormat.class);
  259.     Class<? extends InputFormat> inf;
  260.     Class<? extends OutputFormat> of;
  261.     Format(Class<? extends InputFormat> inf, Class<? extends OutputFormat> of) {
  262.       this.inf = inf;
  263.       this.of = of;
  264.     }
  265.     public void configure(JobConf job) {
  266.       if (null != inf) job.setInputFormat(inf);
  267.       if (null != of) job.setOutputFormat(of);
  268.     }
  269.   }
  270.   enum RW {
  271.     w() {
  272.       public long exec(String fn, JobConf job) throws IOException {
  273.         job.set("test.filebench.name", fn);
  274.         return writeBench(job);
  275.       }
  276.     },
  277.     r() {
  278.       public long exec(String fn, JobConf job) throws IOException {
  279.         job.set("test.filebench.name", fn);
  280.         return readBench(job);
  281.       }
  282.     };
  283.     public abstract long exec(String fn, JobConf job) throws IOException;
  284.   }
  285.   static Map<Class<? extends Enum>, Map<String,? extends Enum>> fullmap
  286.     = new HashMap<Class<? extends Enum>, Map<String,? extends Enum>>();
  287.   static {
  288.     // can't effectively use Enum::valueOf
  289.     Map<String,CCodec> m1 = new HashMap<String,CCodec>();
  290.     for (CCodec v : CCodec.values()) m1.put(v.name(), v);
  291.     fullmap.put(CCodec.class, m1);
  292.     Map<String,CType> m2 = new HashMap<String,CType>();
  293.     for (CType v : CType.values()) m2.put(v.name(), v);
  294.     fullmap.put(CType.class, m2);
  295.     Map<String,Format> m3 = new HashMap<String,Format>();
  296.     for (Format v : Format.values()) m3.put(v.name(), v);
  297.     fullmap.put(Format.class, m3);
  298.     Map<String,RW> m4 = new HashMap<String,RW>();
  299.     for (RW v : RW.values()) m4.put(v.name(), v);
  300.     fullmap.put(RW.class, m4);
  301.   }
  302.   public static <T extends Enum<T>> EnumSet<T> rem(Class<T> c,
  303.       EnumSet<T> set, String s) {
  304.     if (null != fullmap.get(c) && fullmap.get(c).get(s) != null) {
  305.       if (null == set) {
  306.         set = EnumSet.allOf(c);
  307.       }
  308.       set.remove(fullmap.get(c).get(s));
  309.     }
  310.     return set;
  311.   }
  312.   @SuppressWarnings("unchecked")
  313.   public static <T extends Enum<T>> EnumSet<T> add(Class<T> c,
  314.       EnumSet<T> set, String s) {
  315.     if (null != fullmap.get(c) && fullmap.get(c).get(s) != null) {
  316.       if (null == set) {
  317.         set = EnumSet.noneOf(c);
  318.       }
  319.       set.add((T)fullmap.get(c).get(s));
  320.     }
  321.     return set;
  322.   }
  323.   /**
  324.    * A random list of 1000 words from /usr/share/dict/words
  325.    */
  326.   private static final String[] words = {
  327.     "diurnalness", "Homoiousian", "spiranthic", "tetragynian",
  328.     "silverhead", "ungreat", "lithograph", "exploiter",
  329.     "physiologian", "by", "hellbender", "Filipendula",
  330.     "undeterring", "antiscolic", "pentagamist", "hypoid",
  331.     "cacuminal", "sertularian", "schoolmasterism", "nonuple",
  332.     "gallybeggar", "phytonic", "swearingly", "nebular",
  333.     "Confervales", "thermochemically", "characinoid", "cocksuredom",
  334.     "fallacious", "feasibleness", "debromination", "playfellowship",
  335.     "tramplike", "testa", "participatingly", "unaccessible",
  336.     "bromate", "experientialist", "roughcast", "docimastical",
  337.     "choralcelo", "blightbird", "peptonate", "sombreroed",
  338.     "unschematized", "antiabolitionist", "besagne", "mastication",
  339.     "bromic", "sviatonosite", "cattimandoo", "metaphrastical",
  340.     "endotheliomyoma", "hysterolysis", "unfulminated", "Hester",
  341.     "oblongly", "blurredness", "authorling", "chasmy",
  342.     "Scorpaenidae", "toxihaemia", "Dictograph", "Quakerishly",
  343.     "deaf", "timbermonger", "strammel", "Thraupidae",
  344.     "seditious", "plerome", "Arneb", "eristically",
  345.     "serpentinic", "glaumrie", "socioromantic", "apocalypst",
  346.     "tartrous", "Bassaris", "angiolymphoma", "horsefly",
  347.     "kenno", "astronomize", "euphemious", "arsenide",
  348.     "untongued", "parabolicness", "uvanite", "helpless",
  349.     "gemmeous", "stormy", "templar", "erythrodextrin",
  350.     "comism", "interfraternal", "preparative", "parastas",
  351.     "frontoorbital", "Ophiosaurus", "diopside", "serosanguineous",
  352.     "ununiformly", "karyological", "collegian", "allotropic",
  353.     "depravity", "amylogenesis", "reformatory", "epidymides",
  354.     "pleurotropous", "trillium", "dastardliness", "coadvice",
  355.     "embryotic", "benthonic", "pomiferous", "figureheadship",
  356.     "Megaluridae", "Harpa", "frenal", "commotion",
  357.     "abthainry", "cobeliever", "manilla", "spiciferous",
  358.     "nativeness", "obispo", "monilioid", "biopsic",
  359.     "valvula", "enterostomy", "planosubulate", "pterostigma",
  360.     "lifter", "triradiated", "venialness", "tum",
  361.     "archistome", "tautness", "unswanlike", "antivenin",
  362.     "Lentibulariaceae", "Triphora", "angiopathy", "anta",
  363.     "Dawsonia", "becomma", "Yannigan", "winterproof",
  364.     "antalgol", "harr", "underogating", "ineunt",
  365.     "cornberry", "flippantness", "scyphostoma", "approbation",
  366.     "Ghent", "Macraucheniidae", "scabbiness", "unanatomized",
  367.     "photoelasticity", "eurythermal", "enation", "prepavement",
  368.     "flushgate", "subsequentially", "Edo", "antihero",
  369.     "Isokontae", "unforkedness", "porriginous", "daytime",
  370.     "nonexecutive", "trisilicic", "morphiomania", "paranephros",
  371.     "botchedly", "impugnation", "Dodecatheon", "obolus",
  372.     "unburnt", "provedore", "Aktistetae", "superindifference",
  373.     "Alethea", "Joachimite", "cyanophilous", "chorograph",
  374.     "brooky", "figured", "periclitation", "quintette",
  375.     "hondo", "ornithodelphous", "unefficient", "pondside",
  376.     "bogydom", "laurinoxylon", "Shiah", "unharmed",
  377.     "cartful", "noncrystallized", "abusiveness", "cromlech",
  378.     "japanned", "rizzomed", "underskin", "adscendent",
  379.     "allectory", "gelatinousness", "volcano", "uncompromisingly",
  380.     "cubit", "idiotize", "unfurbelowed", "undinted",
  381.     "magnetooptics", "Savitar", "diwata", "ramosopalmate",
  382.     "Pishquow", "tomorn", "apopenptic", "Haversian",
  383.     "Hysterocarpus", "ten", "outhue", "Bertat",
  384.     "mechanist", "asparaginic", "velaric", "tonsure",
  385.     "bubble", "Pyrales", "regardful", "glyphography",
  386.     "calabazilla", "shellworker", "stradametrical", "havoc",
  387.     "theologicopolitical", "sawdust", "diatomaceous", "jajman",
  388.     "temporomastoid", "Serrifera", "Ochnaceae", "aspersor",
  389.     "trailmaking", "Bishareen", "digitule", "octogynous",
  390.     "epididymitis", "smokefarthings", "bacillite", "overcrown",
  391.     "mangonism", "sirrah", "undecorated", "psychofugal",
  392.     "bismuthiferous", "rechar", "Lemuridae", "frameable",
  393.     "thiodiazole", "Scanic", "sportswomanship", "interruptedness",
  394.     "admissory", "osteopaedion", "tingly", "tomorrowness",
  395.     "ethnocracy", "trabecular", "vitally", "fossilism",
  396.     "adz", "metopon", "prefatorial", "expiscate",
  397.     "diathermacy", "chronist", "nigh", "generalizable",
  398.     "hysterogen", "aurothiosulphuric", "whitlowwort", "downthrust",
  399.     "Protestantize", "monander", "Itea", "chronographic",
  400.     "silicize", "Dunlop", "eer", "componental",
  401.     "spot", "pamphlet", "antineuritic", "paradisean",
  402.     "interruptor", "debellator", "overcultured", "Florissant",
  403.     "hyocholic", "pneumatotherapy", "tailoress", "rave",
  404.     "unpeople", "Sebastian", "thermanesthesia", "Coniferae",
  405.     "swacking", "posterishness", "ethmopalatal", "whittle",
  406.     "analgize", "scabbardless", "naught", "symbiogenetically",
  407.     "trip", "parodist", "columniform", "trunnel",
  408.     "yawler", "goodwill", "pseudohalogen", "swangy",
  409.     "cervisial", "mediateness", "genii", "imprescribable",
  410.     "pony", "consumptional", "carposporangial", "poleax",
  411.     "bestill", "subfebrile", "sapphiric", "arrowworm",
  412.     "qualminess", "ultraobscure", "thorite", "Fouquieria",
  413.     "Bermudian", "prescriber", "elemicin", "warlike",
  414.     "semiangle", "rotular", "misthread", "returnability",
  415.     "seraphism", "precostal", "quarried", "Babylonism",
  416.     "sangaree", "seelful", "placatory", "pachydermous",
  417.     "bozal", "galbulus", "spermaphyte", "cumbrousness",
  418.     "pope", "signifier", "Endomycetaceae", "shallowish",
  419.     "sequacity", "periarthritis", "bathysphere", "pentosuria",
  420.     "Dadaism", "spookdom", "Consolamentum", "afterpressure",
  421.     "mutter", "louse", "ovoviviparous", "corbel",
  422.     "metastoma", "biventer", "Hydrangea", "hogmace",
  423.     "seizing", "nonsuppressed", "oratorize", "uncarefully",
  424.     "benzothiofuran", "penult", "balanocele", "macropterous",
  425.     "dishpan", "marten", "absvolt", "jirble",
  426.     "parmelioid", "airfreighter", "acocotl", "archesporial",
  427.     "hypoplastral", "preoral", "quailberry", "cinque",
  428.     "terrestrially", "stroking", "limpet", "moodishness",
  429.     "canicule", "archididascalian", "pompiloid", "overstaid",
  430.     "introducer", "Italical", "Christianopaganism", "prescriptible",
  431.     "subofficer", "danseuse", "cloy", "saguran",
  432.     "frictionlessly", "deindividualization", "Bulanda", "ventricous",
  433.     "subfoliar", "basto", "scapuloradial", "suspend",
  434.     "stiffish", "Sphenodontidae", "eternal", "verbid",
  435.     "mammonish", "upcushion", "barkometer", "concretion",
  436.     "preagitate", "incomprehensible", "tristich", "visceral",
  437.     "hemimelus", "patroller", "stentorophonic", "pinulus",
  438.     "kerykeion", "brutism", "monstership", "merciful",
  439.     "overinstruct", "defensibly", "bettermost", "splenauxe",
  440.     "Mormyrus", "unreprimanded", "taver", "ell",
  441.     "proacquittal", "infestation", "overwoven", "Lincolnlike",
  442.     "chacona", "Tamil", "classificational", "lebensraum",
  443.     "reeveland", "intuition", "Whilkut", "focaloid",
  444.     "Eleusinian", "micromembrane", "byroad", "nonrepetition",
  445.     "bacterioblast", "brag", "ribaldrous", "phytoma",
  446.     "counteralliance", "pelvimetry", "pelf", "relaster",
  447.     "thermoresistant", "aneurism", "molossic", "euphonym",
  448.     "upswell", "ladhood", "phallaceous", "inertly",
  449.     "gunshop", "stereotypography", "laryngic", "refasten",
  450.     "twinling", "oflete", "hepatorrhaphy", "electrotechnics",
  451.     "cockal", "guitarist", "topsail", "Cimmerianism",
  452.     "larklike", "Llandovery", "pyrocatechol", "immatchable",
  453.     "chooser", "metrocratic", "craglike", "quadrennial",
  454.     "nonpoisonous", "undercolored", "knob", "ultratense",
  455.     "balladmonger", "slait", "sialadenitis", "bucketer",
  456.     "magnificently", "unstipulated", "unscourged", "unsupercilious",
  457.     "packsack", "pansophism", "soorkee", "percent",
  458.     "subirrigate", "champer", "metapolitics", "spherulitic",
  459.     "involatile", "metaphonical", "stachyuraceous", "speckedness",
  460.     "bespin", "proboscidiform", "gul", "squit",
  461.     "yeelaman", "peristeropode", "opacousness", "shibuichi",
  462.     "retinize", "yote", "misexposition", "devilwise",
  463.     "pumpkinification", "vinny", "bonze", "glossing",
  464.     "decardinalize", "transcortical", "serphoid", "deepmost",
  465.     "guanajuatite", "wemless", "arval", "lammy",
  466.     "Effie", "Saponaria", "tetrahedral", "prolificy",
  467.     "excerpt", "dunkadoo", "Spencerism", "insatiately",
  468.     "Gilaki", "oratorship", "arduousness", "unbashfulness",
  469.     "Pithecolobium", "unisexuality", "veterinarian", "detractive",
  470.     "liquidity", "acidophile", "proauction", "sural",
  471.     "totaquina", "Vichyite", "uninhabitedness", "allegedly",
  472.     "Gothish", "manny", "Inger", "flutist",
  473.     "ticktick", "Ludgatian", "homotransplant", "orthopedical",
  474.     "diminutively", "monogoneutic", "Kenipsim", "sarcologist",
  475.     "drome", "stronghearted", "Fameuse", "Swaziland",
  476.     "alen", "chilblain", "beatable", "agglomeratic",
  477.     "constitutor", "tendomucoid", "porencephalous", "arteriasis",
  478.     "boser", "tantivy", "rede", "lineamental",
  479.     "uncontradictableness", "homeotypical", "masa", "folious",
  480.     "dosseret", "neurodegenerative", "subtransverse", "Chiasmodontidae",
  481.     "palaeotheriodont", "unstressedly", "chalcites", "piquantness",
  482.     "lampyrine", "Aplacentalia", "projecting", "elastivity",
  483.     "isopelletierin", "bladderwort", "strander", "almud",
  484.     "iniquitously", "theologal", "bugre", "chargeably",
  485.     "imperceptivity", "meriquinoidal", "mesophyte", "divinator",
  486.     "perfunctory", "counterappellant", "synovial", "charioteer",
  487.     "crystallographical", "comprovincial", "infrastapedial", "pleasurehood",
  488.     "inventurous", "ultrasystematic", "subangulated", "supraoesophageal",
  489.     "Vaishnavism", "transude", "chrysochrous", "ungrave",
  490.     "reconciliable", "uninterpleaded", "erlking", "wherefrom",
  491.     "aprosopia", "antiadiaphorist", "metoxazine", "incalculable",
  492.     "umbellic", "predebit", "foursquare", "unimmortal",
  493.     "nonmanufacture", "slangy", "predisputant", "familist",
  494.     "preaffiliate", "friarhood", "corelysis", "zoonitic",
  495.     "halloo", "paunchy", "neuromimesis", "aconitine",
  496.     "hackneyed", "unfeeble", "cubby", "autoschediastical",
  497.     "naprapath", "lyrebird", "inexistency", "leucophoenicite",
  498.     "ferrogoslarite", "reperuse", "uncombable", "tambo",
  499.     "propodiale", "diplomatize", "Russifier", "clanned",
  500.     "corona", "michigan", "nonutilitarian", "transcorporeal",
  501.     "bought", "Cercosporella", "stapedius", "glandularly",
  502.     "pictorially", "weism", "disilane", "rainproof",
  503.     "Caphtor", "scrubbed", "oinomancy", "pseudoxanthine",
  504.     "nonlustrous", "redesertion", "Oryzorictinae", "gala",
  505.     "Mycogone", "reappreciate", "cyanoguanidine", "seeingness",
  506.     "breadwinner", "noreast", "furacious", "epauliere",
  507.     "omniscribent", "Passiflorales", "uninductive", "inductivity",
  508.     "Orbitolina", "Semecarpus", "migrainoid", "steprelationship",
  509.     "phlogisticate", "mesymnion", "sloped", "edificator",
  510.     "beneficent", "culm", "paleornithology", "unurban",
  511.     "throbless", "amplexifoliate", "sesquiquintile", "sapience",
  512.     "astucious", "dithery", "boor", "ambitus",
  513.     "scotching", "uloid", "uncompromisingness", "hoove",
  514.     "waird", "marshiness", "Jerusalem", "mericarp",
  515.     "unevoked", "benzoperoxide", "outguess", "pyxie",
  516.     "hymnic", "euphemize", "mendacity", "erythremia",
  517.     "rosaniline", "unchatteled", "lienteria", "Bushongo",
  518.     "dialoguer", "unrepealably", "rivethead", "antideflation",
  519.     "vinegarish", "manganosiderite", "doubtingness", "ovopyriform",
  520.     "Cephalodiscus", "Muscicapa", "Animalivora", "angina",
  521.     "planispheric", "ipomoein", "cuproiodargyrite", "sandbox",
  522.     "scrat", "Munnopsidae", "shola", "pentafid",
  523.     "overstudiousness", "times", "nonprofession", "appetible",
  524.     "valvulotomy", "goladar", "uniarticular", "oxyterpene",
  525.     "unlapsing", "omega", "trophonema", "seminonflammable",
  526.     "circumzenithal", "starer", "depthwise", "liberatress",
  527.     "unleavened", "unrevolting", "groundneedle", "topline",
  528.     "wandoo", "umangite", "ordinant", "unachievable",
  529.     "oversand", "snare", "avengeful", "unexplicit",
  530.     "mustafina", "sonable", "rehabilitative", "eulogization",
  531.     "papery", "technopsychology", "impressor", "cresylite",
  532.     "entame", "transudatory", "scotale", "pachydermatoid",
  533.     "imaginary", "yeat", "slipped", "stewardship",
  534.     "adatom", "cockstone", "skyshine", "heavenful",
  535.     "comparability", "exprobratory", "dermorhynchous", "parquet",
  536.     "cretaceous", "vesperal", "raphis", "undangered",
  537.     "Glecoma", "engrain", "counteractively", "Zuludom",
  538.     "orchiocatabasis", "Auriculariales", "warriorwise", "extraorganismal",
  539.     "overbuilt", "alveolite", "tetchy", "terrificness",
  540.     "widdle", "unpremonished", "rebilling", "sequestrum",
  541.     "equiconvex", "heliocentricism", "catabaptist", "okonite",
  542.     "propheticism", "helminthagogic", "calycular", "giantly",
  543.     "wingable", "golem", "unprovided", "commandingness",
  544.     "greave", "haply", "doina", "depressingly",
  545.     "subdentate", "impairment", "decidable", "neurotrophic",
  546.     "unpredict", "bicorporeal", "pendulant", "flatman",
  547.     "intrabred", "toplike", "Prosobranchiata", "farrantly",
  548.     "toxoplasmosis", "gorilloid", "dipsomaniacal", "aquiline",
  549.     "atlantite", "ascitic", "perculsive", "prospectiveness",
  550.     "saponaceous", "centrifugalization", "dinical", "infravaginal",
  551.     "beadroll", "affaite", "Helvidian", "tickleproof",
  552.     "abstractionism", "enhedge", "outwealth", "overcontribute",
  553.     "coldfinch", "gymnastic", "Pincian", "Munychian",
  554.     "codisjunct", "quad", "coracomandibular", "phoenicochroite",
  555.     "amender", "selectivity", "putative", "semantician",
  556.     "lophotrichic", "Spatangoidea", "saccharogenic", "inferent",
  557.     "Triconodonta", "arrendation", "sheepskin", "taurocolla",
  558.     "bunghole", "Machiavel", "triakistetrahedral", "dehairer",
  559.     "prezygapophysial", "cylindric", "pneumonalgia", "sleigher",
  560.     "emir", "Socraticism", "licitness", "massedly",
  561.     "instructiveness", "sturdied", "redecrease", "starosta",
  562.     "evictor", "orgiastic", "squdge", "meloplasty",
  563.     "Tsonecan", "repealableness", "swoony", "myesthesia",
  564.     "molecule", "autobiographist", "reciprocation", "refective",
  565.     "unobservantness", "tricae", "ungouged", "floatability",
  566.     "Mesua", "fetlocked", "chordacentrum", "sedentariness",
  567.     "various", "laubanite", "nectopod", "zenick",
  568.     "sequentially", "analgic", "biodynamics", "posttraumatic",
  569.     "nummi", "pyroacetic", "bot", "redescend",
  570.     "dispermy", "undiffusive", "circular", "trillion",
  571.     "Uraniidae", "ploration", "discipular", "potentness",
  572.     "sud", "Hu", "Eryon", "plugger",
  573.     "subdrainage", "jharal", "abscission", "supermarket",
  574.     "countergabion", "glacierist", "lithotresis", "minniebush",
  575.     "zanyism", "eucalypteol", "sterilely", "unrealize",
  576.     "unpatched", "hypochondriacism", "critically", "cheesecutter",
  577.   };
  578. }