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