{ "metadata": { "name": "", "signature": "sha256:713f0b55c096798e4432e34705429f99ff790619203b5b1d107b7986ec1e49e4" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "These are some notes I'm making while experimenting with scaling the indexer.\n", "\n", "Scaling problems\n", "================\n", "\n", "We ran with 10,000 W/ARCs, but got some troubling timings. Having tweaked that task number, 5 allowed with 1GB RAM each (TODO Add config details), we have a reasonably fast map phase, taking about two hours to process all 10,000 (and so implying up to 90 hours to process them all, but keep in mind that the total is only as fast as the slowest jobs, i.e. the big WARC files dominate at smaller job sizes, and there was some competition for cluster time). The first time the JISC 1996-2010 collection was indexed, it only required about a soild day's worth of processing time, i.e. about 26 hours.\n", "\n", "
\n",
      "| # Inputs | # Reducers | Finish Time (Map)   | Finish Time (Map+Reduce) |\n",
      "--------------------------------------------------------------------------\n",
      "|    100   | 10         | 8mins, 41sec        | 8mins, 56sec             | 4.4.0\n",
      "|  1,000   | 10         | 31mins, 3sec        | 1hrs, 24mins, 19sec      | 4.6.1\n",
      "| 10,000   | 10         | 2hrs, 45mins, 21sec | 21hrs, 25mins, 56sec     | 4.4.0\n",
      "\n",
      "
\n", "\n", "However, the 10 reducers are failing. They run twice, the first time crashing out with:\n", "\n", "
\n",
      "Error: java.io.IOException: No space left on device\n",
      "\tat java.io.FileOutputStream.writeBytes(Native Method)\n",
      "\tat java.io.FileOutputStream.write(FileOutputStream.java:282)\n",
      "\tat org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.write(RawLocalFileSystem.java:199)\n",
      "\tat java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)\n",
      "\tat java.io.BufferedOutputStream.write(BufferedOutputStream.java:104)\n",
      "\tat org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:49)\n",
      "\tat java.io.DataOutputStream.write(DataOutputStream.java:90)\n",
      "\tat org.apache.hadoop.mapred.IFileOutputStream.write(IFileOutputStream.java:84)\n",
      "\tat org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:49)\n",
      "\tat java.io.DataOutputStream.write(DataOutputStream.java:90)\n",
      "\tat org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:226)\n",
      "\tat org.apache.hadoop.mapred.Merger.writeFile(Merger.java:157)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.doInMemMerge(ReduceTask.java:2699)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask$ReduceCopier$InMemFSMergeThread.run(ReduceTask.java:2640)\n",
      "
\n", "\n", "then running ok the second time, presumably because there is only enough disk space on some of the machines. [Others have hit this problem](https://issues.apache.org/jira/browse/HADOOP-6092), and this indicates that we might be able to sort things out by clearing up the temporary space that Hadoop is configured to use (TODO add config param info). However, it also implies we are likely to hit an upper limit on the size of job we can process due to the limited about of temp space we have. Note that this should be nothing to do with HDFS free space, because the system temp space is usually held on a different drive to the DFS volumes.\n", "\n", "
\n",
      "| # Inputs | # Reducers | Shuffle Time         | Sort Time     | Total Reduce Time   |\n",
      "--------------------------------------------------------------------------------------\n",
      "|    100   | 10         | 5mins, 21sec         | 30sec         | 8mins, 51sec        |\n",
      "|  1,000   | 10         | 49mins, 9sec         | 23sec         | 1hrs, 18mins, 33sec | 4.6.1\n",
      "| 10,000   | 10         | 10hrs, 41mins, 35sec | 0sec          | 10hrs, 42mins, 9sec |\n",
      "|          |            | 1hrs, 19mins, 15sec  | 43mins, 12sec | 8hrs, 36mins, 27sec |\n",
      "
\n", "\n", "Similarly, it's worth noting that even when it works, the sort is taking 7-10 hours (which is why it takes over 20 hours when it fails once). Somewhat oddly, every single reducer failed on disk space the first time around, i.e. roughtly simultanously, and then worked (no clear correlation between failed nodes the first time, i.e. the same rack etc.). That implies that some kind of temp-space job contention might be the issue.\n", "\n", "Note that there is a lot of lines like this:\n", "\n", "
\n",
      "ERROR WARCIndexerReducer - No appropriate response record found for: sha1:223JBF7A4BH6TNGCAI2MIPGWOPBNJLBB_http://news.bbcimg.co.uk/media/images/48244000/jpg/_48244565_lorenzo_reuters226i.jpg (revisit)\n",
      "
\n", "\n", "This is a consequence of the fact that that the small sample means the deduplication strategy is failing. Some WARCs are mostly revisits.\n", "\n", "TODO What is the ARC/WARC composition of the 10,000?\n", "ARC 5593\n", "WARC 4407\n", "\n", "ARC 442703\n", "WARC 4494\n", "\n", "https://issues.apache.org/jira/browse/SOLR-4816 means we are suffering on indexing throughput.\n", "\n", "https://wiki.apache.org/solr/SolrCloud\n", "\n", "Also, it seems we are putting too much pressure on the sort now. Perhaps partly due to the link extraction and partly due to the higher binary limit allowing more resources to use up more of the 1MB text field size limit.\n", "\n", "\n", "Deduplication strategies\n", "========================\n", "\n", "We are using the reduce step as out deduplication strategy. Items with the same URL and content hash are grouped together, and only a single SOLR record is submitted for each one.\n", "\n", "To resolve this, we had to properly calculate the hash of the ARCs and allow for multiple crawl dates, and query Solr during the map to decide whether to send an update to the crawl_dates or not.\n", "\n", "Rebuilding the indexer\n", "======================\n", "\n", "So, the indexer has been rebuilt. \n", "\n", "* Uses new duplicate handling logic.\n", "* Requests compression of the map output.\n", "* Face detection, colour extraction.\n", "* ...\n", "\n", "All 'expensive' features are switched on.\n", "\n", "Now we need new timings. Started with ten inputs, but a new ten, so numbers will not be directly comparable.\n", "\n", "For 10, Total time: 00:21:52.\n", "Map, Worst case 00:20:00, most most around 00:08:00.\n", "Reduce time, 18 mins but this includes the long running shuffle and sort while awaiting the slowest map.\n", "Actual reduce action time was 30-40 seconds.\n", "\n", "On 100, hit problems with empty/malformed payloads that killed the job. Fixing this and re-launching.\n", "\n", "We are getting DEBUG output from org.apache.zookeeper and it's not clear why.\n", "\n", "Rather slow to warm up and get going. Hopefully this is mapper initialisation and we'll pick up speed shortly. OK Looks like SOLR crashed, and the clients are waiting for it. It was an OOM, but actually 'unable to create new native thread', which is a ulimit thing. Need up up the ulimits for the tomcat user and restart the cluster.\n", "\n", "Ok, re-running with SOLR rebooted.\n", "\n", "For 100:\n", "Total time: 00:43:21\n", "Maps, 6-20 mins per input.\n", "Reducers, 38 mins overall, but actual submission to Solr only about 2 minutes. (Seems much faster.)\n", "This would mean 20 weeks! Need timings from 1000 to confirm relilability of this estimate.\n", "\n", "For 1000:\n", "Some contention, other indexing jobs running at the same time.\n", "Now ArchiveCDXGenerator and sorter jobs kicked in, all competing for map time.\n", "Total time: 15:43:40\n", "Maps: Most 1-2 hrs, worst case was around 11 hours!\n", "Reduce phase took about two hours, but was overlapping with another job in the reduce phase.\n", "\n", "Files taking many hours (>8 hours) to map\n", "Processing path: hdfs://nellie-private:54310/ia/PHASE2WARCS/DOTUK-HISTORICAL-1996-2010-PHASE2WARCS-XAAAAZ-20111115000000-000000.warc.gz\n", "\n", "\n", "\n", "Speeding things up\n", "------------------\n", "\n", "To speed things up, we can go to the other extreme and try switching off lots of features.\n", "\n", "\n", "* Disabling both Image and PDF analysis.\n", " * Local test: 77.89 seconds -> 45.185 seconds.\n", "* Disabling PDF analysis.\n", " * Local test: 77.89 seconds -> 74.764 seconds.\n", "* Disabling Image analysis.\n", " * Local test: 77.89 seconds -> 51.093 seconds.\n", "* Up the limit on in-memory content processing from 1MB to 10MB:\n", " * Local test: 81.992 seconds -> 77.89 seconds.\n", "* Dropping maximum text to extract from 1024K to 1K:\n", " * Local test: 45.185 seconds -> 42.631 seconds.\n", "* Dropping maximum bytes to allow Tika to parse from ALL to 1K:\n", " * Local test: 64.982 seconds -> 53.949 seconds.\n", " \n", "So, dropping the image analysis made a large difference. Given the pressures involved right now, it probably makes more sense to disable these features (which are of relatively little interest to the main BUDDAH researchers right now). \n", "\n", "Rerunning with image and PDF features turned off.\n", "\n", "For 1000:\n", "Note some contention with previous job, but mostly in the reducer phase.\n", "Total time: 10:27:01.\n", "Mappers better behaved, worst case now 04:20:13.\n", "Reduce phase approx 3.5 hours, but heavy contention with other reduces from previous job.\n", "\n", "4hr worst case map:\n", "hdfs://nellie-private:54310/ia/PHASE2WARCS/DOTUK-HISTORICAL-1996-2010-PHASE2WARCS-XAABLX-20111115000000-000000.warc.gz\n", "\n", "Also bad: \n", "hdfs://nellie-private:54310/ia/PHASE2WARCS/DOTUK-HISTORICAL-1996-2010-PHASE2WARCS-XAAANR-20111115000000-000001.warc.gz\n", "hdfs://nellie-private:54310/ia/PHASE2WARCS/DOTUK-HISTORICAL-1996-2010-PHASE2WARCS-XAAAAZ-20111115000000-000000.warc.gz\n", "\n", "So, setting up a local test with the worst file (XAAAAZ-20111115000000-000000, which is only 0.6GB, so it's probably not raw size that's the problem).\n", "Hang on, that's a bad idea, cos it's probably take 4 hours!\n", "Adding logging to see where it gets stuck...\n", "Oh dear. It worked fine.\n", "\"Finished in 2791.518 seconds.\"\n", "\n", "Running again, but excluding most formats from Tika processing (as we usually do): 2749.475 seconds!\n", "Didn't beleve it, so disabled the excludes (i.e. all in) once more: 2018.007 seconds!?\n", "\n", "Ok, so cleaning up code and disabling Tika for problematic types, and rerunning on the 100 with no contention gives...\n", "Total time: 00:32:07\n", "Mappers roughly 20-30mins.\n", "Reducers e.g. 00:01:22 i.e. around a minute.\n", "\n", "Trying again with the 1000, although with some contention and HDFS is extremely full which may be causing problems...\n", "Total time:\n", "\n", "\n", "Other things to try:\n", "- Disable recursive parsing in Tika.\n", "- ONLY hash the first X bytes, and use that for dedup.\n", "\n", "100, 30 mins?\n", "\n", "Okay, so back on the cluster, with the solr check switched off (relying on updates instead of managing that myself and querying for every resources), and WHOA that's better. The shuf-100 job runs in about 10mins (instead of 30mins)\n", "Total time:\n", "Mappers: 10 mins.\n", "Reducers: FAILED\n", "\n", "Still pretty slow on the reduce. 35 might be hammering it, but still. Maybe need to try cutting down on some fields, e.g. href indexing, possibly even worth ignoring host-level links and just do domain-level.\n", "\n", "Ah, no, my fault. It's the new crawl_years field. Nice work Jackson.\n", "So, taken that out.\n", "\n", "Ran again with 100 inputs. Mapper nice and quick, and 35 reducers coped this time.\n", "Total time: 00:17:52\n", "Mappers: c. 8 mins.\n", "Reducers: c. 10 mins.\n", "\n", "Ran with 1000 inputs, mappers quite quick, but reducers kept dying. Dropping the number of reducers to 20, and it seems stable.\n", "\n", "Total time: > 01:57:00\n", "Mappers: c. 30 mins.\n", "Reducers: lots more time: > 1hr. Hmmm, after about 94.33% of the reduce phase, Solr is locking up. Kill the job and it slowly recovers, which is good.\n", "\n", "So, things to try next: switch off link analysis. \n", "Trying it locally, on the XAAAAZ-20111115000000-000000 test file.\n", "Finished in 3800.776 seconds.\n", "Hmmm. Totes inconclusive due to variability of timings on the laptop.\n", "\n", "So, on the cluster, and without links, for the 1000:\n", "After ten minutes, 85% done!\n", "After 15 minutes, 99% done!\n", "After 20 mins, 99.95% done!\n", "After 25 mins, 100% done! (only a couple of WARCs at the end, so more to be gained by running more inputs at once)\n", "After c.28 mins, sort is also complete.\n", "Reducers stuck after nearlu eight hours! c.94% complete.\n", "KILLING\n", "\n", "So, trying dropping reducers to 10. Still dying, but maybe Solr is very grumpy. Restarting Solr.\n", "So, after 01:51:01 it is done.\n", "Mappers are quick, index still slow. i.e. about 30-odd mins mappers, about a hour and a quarter indexing.\n", "\n", "Oh, links were still switched on!? Trying again without the links... Emptying SOLR...\n", "\n", "Locally, switching off multiple features to see how it changes things. no host links, no binary shingling, no 'elements used':\n", "Finished in 2399.014 seconds.\n", "Hm. Ok, also dropping text payload right down to 10K:\n", "Finished in 2657.414 seconds.\n", "\n", "So, back on the cluster, with the links off and an empty target Solr:\n", "Total time: 01:06:13 i.e. nearly half the time.\n", "\n", "Also disabled first_bytes, but left data in Solr:\n", "Total time: 01:26:03\n", "Slightly longer, probably because it was doing updates not just replacements.\n", "\n", "So, cleared the data out, and also dropped the text payload size down to 10KB:\n", "Total time: 01:03:54\n", "Nice.\n", "\n", "Finally, knocking down the number of reducers to 5, to see if that makes much difference. On an empty Solr.\n", "Yes, it did run a bit slower, but not massively.\n", "Total time: 01:27:06\n", "\n", "Now running on 10,000, leaving reducers at 5...\n", "Map time, about two hours!\n", "Reduce Copy kinda slow: reduce > copy (2215 of 10000 at 7.75 MB/s)\n", "CRASH with only 5 reducers we run out of disk space...\n", "\n", "Upping back to 10 reducers.\n", "\n", "Try 15? First, lets try to see why there's so much data.\n", "\n", "Dropped the elements_used, in case there was some weirdness there. Was the same (crashed out of disk space during shuffle).\n", "\n", "Dropping the hosts, in case it's those cheeky link farms that are to blame.\n", "\n", "Little difference. Trying dropping text load.\n", "\n", "NOTE Looked in \n", "\n", " /mapred/local/dir/taskTracker/anjackson/jobcache/job_201402191107_1551/attempt_201402191107_1551_r_000004_0/output\n", " \n", "and the output is clearly NOT compressed. And some are BIG, and look like link-farm mess.\n", "\n", "Even after reducing the text load to 50K, this uncompressed data still failed on some reducers. Eventually some got through, only to cripple the Solr server (still just 10 reducers). Those that got to Solr failed like this.\n", "\n", "
\n",
      "2014-03-30 16:29:26 INFO  WARCIndexerReducer:111 - Submitted 500 docs [0]\n",
      "2014-03-30 16:30:30 ERROR WARCIndexerReducer:116 - WARCIndexerReducer.reduce(): No live SolrServers available to handle this request:[http://192.168.1.180:8994/solr/jisc3]\n",
      "org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: No live SolrServers available to handle this request:[http://192.168.1.180:8994/solr/jisc3]\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer.directUpdate(CloudSolrServer.java:351)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:510)\n",
      "\tat org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)\n",
      "\tat org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)\n",
      "\tat org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)\n",
      "\tat uk.bl.wa.solr.SolrWebServer.add(SolrWebServer.java:106)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.checkSubmission(WARCIndexerReducer.java:110)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:84)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:29)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:469)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)\n",
      "\tat org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n",
      "\tat java.security.AccessController.doPrivileged(Native Method)\n",
      "\tat javax.security.auth.Subject.doAs(Subject.java:396)\n",
      "\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n",
      "\tat org.apache.hadoop.mapred.Child.main(Child.java:264)\n",
      "Caused by: org.apache.solr.client.solrj.SolrServerException: No live SolrServers available to handle this request:[http://192.168.1.180:8994/solr/jisc3]\n",
      "\tat org.apache.solr.client.solrj.impl.LBHttpSolrServer.request(LBHttpSolrServer.java:354)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer$1.call(CloudSolrServer.java:332)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer$1.call(CloudSolrServer.java:329)\n",
      "\tat java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)\n",
      "\tat java.util.concurrent.FutureTask.run(FutureTask.java:138)\n",
      "\tat java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)\n",
      "\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)\n",
      "\tat java.lang.Thread.run(Thread.java:662)\n",
      "Caused by: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Cannot talk to ZooKeeper - Updates are disabled.\n",
      "\tat org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:495)\n",
      "\tat org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:199)\n",
      "\tat org.apache.solr.client.solrj.impl.LBHttpSolrServer.request(LBHttpSolrServer.java:285)\n",
      "\t... 7 more\n",
      "2014-03-30 16:39:49 ERROR WARCIndexerReducer:116 - WARCIndexerReducer.reduce(): No live SolrServers available to handle this request:[http://192.168.1.180:8988/solr/jisc3, http://192.168.1.180:8983/solr/jisc3, http://192.168.1.180:8996/solr/jisc3, http://192.168.1.180:8994/solr/jisc3]\n",
      "org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: No live SolrServers available to handle this request:[http://192.168.1.180:8988/solr/jisc3, http://192.168.1.180:8983/solr/jisc3, http://192.168.1.180:8996/solr/jisc3, http://192.168.1.180:8994/solr/jisc3]\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer.directUpdate(CloudSolrServer.java:351)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer.request(CloudSolrServer.java:510)\n",
      "\tat org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)\n",
      "\tat org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)\n",
      "\tat org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)\n",
      "\tat uk.bl.wa.solr.SolrWebServer.add(SolrWebServer.java:106)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.checkSubmission(WARCIndexerReducer.java:110)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:84)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:29)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:469)\n",
      "\tat org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)\n",
      "\tat org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n",
      "\tat java.security.AccessController.doPrivileged(Native Method)\n",
      "\tat javax.security.auth.Subject.doAs(Subject.java:396)\n",
      "\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n",
      "\tat org.apache.hadoop.mapred.Child.main(Child.java:264)\n",
      "Caused by: org.apache.solr.client.solrj.SolrServerException: No live SolrServers available to handle this request:[http://192.168.1.180:8988/solr/jisc3, http://192.168.1.180:8983/solr/jisc3, http://192.168.1.180:8996/solr/jisc3, http://192.168.1.180:8994/solr/jisc3]\n",
      "\tat org.apache.solr.client.solrj.impl.LBHttpSolrServer.request(LBHttpSolrServer.java:354)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer$1.call(CloudSolrServer.java:332)\n",
      "\tat org.apache.solr.client.solrj.impl.CloudSolrServer$1.call(CloudSolrServer.java:329)\n",
      "\tat java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)\n",
      "\tat java.util.concurrent.FutureTask.run(FutureTask.java:138)\n",
      "\tat java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)\n",
      "\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)\n",
      "\tat java.lang.Thread.run(Thread.java:662)\n",
      "Caused by: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Cannot talk to ZooKeeper - Updates are disabled.\n",
      "\tat org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:495)\n",
      "\tat org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:199)\n",
      "\tat org.apache.solr.client.solrj.impl.LBHttpSolrServer.request(LBHttpSolrServer.java:285)\n",
      "\t... 7 more\n",
      "
\n", " \n", "\n", "So, it seems the issue is simply that of scale. The JISC collection has very large numbers of resources per input file, and this stretches the size of the mapper outputs to the system's limits.\n", "\n", "Trying one more run, switching on the PDF checker, and enabling compression, to see how it goes... That seemed to work! Output/temp files look compressed. Also, PDF Preflight tests appeared to add a negligible amount of processing (all done at 02:18:00). Shuffle & Merge seemed to work ok, although some disk space grumbling. Sadly, SOLRs still down, but 5min pause should help, I think. Restarting SOLRs... So, worked a bit, but killed the SOLRs pretty quickly.\n", "After 07:30:00 the merge was complete (although many finished before then - using the host as the key is not very balanced).\n", "BUT after 15:00:00 still locked with only some successful submission. A coupled of reducers got over 69%.\n", "\n", "Just realised all the reducers are running on the same nodes! That's not helping... Num reducers reduced to one?\n", "\n", "To confirm this, I'd like to understand what happened for the earlier indexing processes. For AADDA, I assume the difference is largely down to the links. For LDWA, it seems unclear, as I recall Roger processing that in one go!\n", "\n", "Ok, so confirmed with Roger that he did it in c.34 chunks of about about a thousand WARCs each (33,102 in total). Given there are 1.1 billion items in the index, this still seems to be rather good performance compared to what we see now. Perhaps the number of reducers per node was lower? Maybe only two, at 2GB each.\n", "\n", "Rough history.\n", "\n", "First, 1GB got both, and up to 8 of either mappers or reducers.\n", "Then, 2GB and 2/2 mappers/reducers.\n", "Currently, 1GB and 5/5 mappers/reducers.\n", "\n", "Timing is right for the LDWA index to be during the 2R/node period, which may well explain why that worked ok.\n", "\n", "Indexing directly onto HDFS\n", "===========================\n", "The second JISC2 index appears to have failed, so major change of tack required.\n", "\n", "Indexing Old News\n", "-----------------\n", "With Lewis, I chopped up some Cloudera code and managed to build multiple shards directly on HDFS during the Reduce phase.\n", "\n", "Working through how to index locally during MapReduce.\n", "Using JISC2 as test data.\n", "Indexed 9, got 63 pages, including \"lsidyv10a49/p10\"\n", "Next, 100 items from the tail, and then the 9 from the top, to check the old ones are not overwritten/lost.\n", "\n", "So, in 3mins, 100 issues pulled down and indexed. 622 distinct pages.\n", "Now attempting 10,000! 57 minutes! i.e. the whole thing in a day!\n", "One Mapper took three-times longer, which is a bit weird.\n", "Ran another 10,000, and 57 mins again! With one slow mapper! Perhaps some of the nodes are smaller and slower than the others.\n", "Running with 50,000, mapper is nice and fast. should be c. 5 hrs for linear speedup.\n", "So, reducers occasionally failed, with only 1GiB of RAM. Upped to 1.5GiB.\n", "\n", "But eventually (10 hrs) they all ran leaving an index with 455,122 pages in it.\n", "Rerunning with increased RAM and empty indexes, to check it's all ok.\n", "4hrs, 37mins, 49sec all good.\n", "Should be shorter, as most of the reducers took 30 mins, but one node is slow (openstack8) at 1.5hrs.\n", "\n", "hdfs://openstack2.ad.bl.uk:8020/user/anjackson/newindex1\n", "\n", "Using the new output format should be neater, but depends on Hadoop 2.x.x which will no doubt cause PAIN.\n", "I can use the hacked together logic easily enough.\n", "\n", "
\n",
      "2014-04-09 16:38:22,343 INFO org.apache.solr.core.CoreContainer: registering core: core1\n",
      "2014-04-09 16:38:22,343 INFO org.apache.solr.core.SolrCore: QuerySenderListener sending requests to Searcher@5a90f357 main{StandardDirectoryReader(segments_q:2503 _ti(4.4):C49232 _mi(4.4):C2160 _mq(4.4):C127 _v7(4.4):C5538 _pi(4.4):C100 _xg(4.4):C5570 _qz(4.4):C86 _yk(4.4):C430 _ta(4.4):C90 _v1(4.4):C115 _vh(4.4):C2269 _vz(4.4):C87 _wx(4.4):C92 _wz(4.4):C15 _x6(4.4):C157 _xr(4.4):C596 _y0(4.4):C533 _ya(4.4):C553 _xq(4.4):C1960 _xs(4.4):C569 _xt(4.4):C228 _xu(4.4):C135 _yd(4.4):C24 _ye(4.4):C8 _yj(4.4):C56 _yl(4.4):C55 _ym(4.4):C65 _yn(4.4):C56 _yo(4.4):C48 _yp(4.4):C67 _yq(4.4):C21)}\n",
      "2014-04-09 16:38:23,447 INFO org.apache.solr.update.LoggingInfoStream: [IFD][main]: init: current segments file is \"segments_q\"; deletionPolicy=org.apache.solr.core.IndexDeletionPolicyWrapper@75bb31b9\n",
      "2014-04-09 16:38:23,500 INFO org.apache.solr.update.LoggingInfoStream: [IFD][main]: init: load commit \"segments_n\"\n",
      "2014-04-09 16:38:24,995 INFO org.apache.solr.update.LoggingInfoStream: [IFD][main]: init: load commit \"segments_q\"\n",
      "2014-04-09 16:38:25,145 INFO org.apache.solr.core.SolrCore: [core1] webapp=null path=null params={event=firstSearcher&q=static+firstSearcher+warming+in+solrconfig.xml&distrib=false} hits=69904 status=0 QTime=2801 \n",
      "2014-04-09 16:38:25,163 INFO org.apache.solr.core.SolrCore: SolrDeletionPolicy.onInit: commits: num=2\n",
      "\tcommit{dir=NRTCachingDirectory(org.apache.solr.store.hdfs.HdfsDirectory@772ce69f lockFactory=org.apache.solr.store.hdfs.HdfsLockFactory@7348fb70; maxCacheMB=192.0 maxMergeSizeMB=16.0),segFN=segments_n,generation=23}\n",
      "\tcommit{dir=NRTCachingDirectory(org.apache.solr.store.hdfs.HdfsDirectory@772ce69f lockFactory=org.apache.solr.store.hdfs.HdfsLockFactory@7348fb70; maxCacheMB=192.0 maxMergeSizeMB=16.0),segFN=segments_q,generation=26}\n",
      "2014-04-09 16:38:25,166 INFO org.apache.solr.core.SolrCore: newest commit generation = 26\n",
      "
\n", "\n", "Ok, so old commits (for syncing) are being dropped, which is fine. All results should be there.\n", "\n", "Okay, took (19GiB!) impalad off openstack8 (which appears to be running a desktop) and it runs quicker.\n", "\n", "Futzing with Solr JISC2 Newspapers.\n", "\n", "shard3: 273,160 docs\n", "\n", "Okay, made a new core, a replica of shard3, and swapped over folders.\n", "https://mail-archives.apache.org/mod_mbox/lucene-solr-user/201312.mbox/%3Ca793e6444ceb454694f78e027e2fcb3f@BLUPR06MB417.namprd06.prod.outlook.com%3E\n", "Filled out all fields including HDFS URLs copied and modified from source node.\n", "Then swapped the folders. Then \n", "1,094,330 documents still.\n", "\n", "Shard0-3 actually in wrong places, but it still worked!\n", "\n", "shard1 refers to /solr/jisc2/core_node3 (has shard3)\n", "shard2 refers to /solr/jisc2/core_node2 (has shard2)\n", "shard3 was in node4, now /solr/jisc2/core_node5 (has shard4)\n", "shard4 refers to /solr/jisc2/core_node1 (has shard1)\n", "\n", "So:\n", "core_node1:shard1 needs to move to shard1:core_node3\n", "core_node2:shard2 is fine\n", "core_node3:shard3 needs to move to shard3:core_node5\n", "core_node5:shard4 needs to move to shard4:code_node1\n", "\n", "Doesn't seem to matter until you add documents!\n", "\n", "http://openstack9.ad.bl.uk:8983/solr/#/jisc2_shard1_replica1/query\n", "\n", "Note these are set up much as per: https://cwiki.apache.org/confluence/display/solr/Running+Solr+on+HDFS\n", "\n", "### Notes sent to Lewis ###\n", "Once I\u2019d worked out how to index onto HDFS and avoid openstack8 getting bogged down (I think it\u2019s running a desktop session too?), I managed to get the indexing time down to 3 hours per 50,000 newspapers \u2013 i.e. the total run of 192,349 newspapers took about 12 hours to index. In fact, I think this is a significant overestimate as openstack8 was still running somewhat slower than the others, and because there seems to be duplicate rows in the table (see below) implying that around a third of the data was indexed twice.\n", " \n", "I used four mappers to pull down the content, and then distributed the results to four reducers that each build a single Solr core. The four simultaneous clients downloading the OCR XML file did not cause DLS any issues, and grabbing them over HTTP did not seem to be a significant bottleneck at this scale. Each XML file was downloaded, and a distinct Solr record was created for each page (this is somewhat arbitrary \u2013 it could be by article or issue instead). The final index contains 1,094,330 distinct pages, but note that pages with no text were discarded (which was probably a mistake in retrospect, as knowing how many pages have no text might be useful/interesting).\n", " \n", "You can see the results via: http://openstack9.ad.bl.uk:8983/solr/#/jisc2_shard1_replica1/query\n", " \n", "And construct queries like this:\n", " \n", "* To see the pages that contain the term \u201cBritish Museum\u201d, sorted by date: http://openstack9.ad.bl.uk:8983/solr/jisc2_shard1_replica1/select?q=%22British%20Museum%22&sort=year_s+asc&rows=20&fl=originalname_s%2C+page_i&wt=xml&indent=true&hl=true&hl.fl=content&hl.fragsize=200&hl.simple.pre=*&hl.simple.post=*\n", "* To see the distribution of all pages across the years: http://openstack9.ad.bl.uk:8983/solr/jisc2_shard1_replica1/select?q=*%3A*&rows=0&wt=json&indent=true&facet=true&facet.field=year_s or as XML http://openstack7.ad.bl.uk:8983/solr/jisc2_shard2_replica1/select?q=*%3A*&rows=0&wt=xml&indent=true&facet=true&facet.field=year_s\n", "* Mentions of \u201cA study in scarlet\u201d, sorted by time, showing fragments for context: http://openstack9.ad.bl.uk:8983/solr/jisc2_shard1_replica1/select?q=%22A+study+in+scarlet%22&sort=year_s+asc&rows=20&fl=originalname_s%2C+page_i&wt=xml&indent=true&hl=true&hl.fl=content&hl.fragsize=200&hl.simple.pre=*&hl.simple.post=*\n", "* Mentions of \u201cSherlock holmes\u201d, as above, but as a short-range proximity search (i.e. up to one word apart): http://openstack9.ad.bl.uk:8983/solr/jisc2_shard1_replica1/select?q=%22sherlock%20holmes%22~1&sort=year_s+asc&rows=20&fl=originalname_s%2C+page_i&wt=xml&indent=true&hl=true&hl.fl=content&hl.fragsize=200&hl.simple.pre=*&hl.simple.post=*\n", " \n", "Solr also provides an interface for summary statistics, here: http://openstack9.ad.bl.uk:8983/solr/#/jisc2_shard1_replica1/schema-browser\n", "e.g. you can select the field \u2018simpletitle_s\u2019 and the hit \u2018Load Term Info\u2019 to see the distribution of titles (we have 39, and the largest chunk of content is from the Morning Post). Similarly, you can select \u2018originalname_s\u2019 and see there are 146,110 distinct XML filenames, in contrast to the 192,349 lines from the HIVE table, which would appear to imply there are duplicate lines in the database.\n", " \n", "I\u2019ve not moved to use openstack6 instead of 8 yet, as I\u2019m not sure how to do this cleanly without risking breaking what we have.\n", "\n", "Back to WARC\n", "------------\n", "\n", " Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FileAlreadyExistsException\n", "\t at org.apache.solr.store.hdfs.HdfsLockFactory.makeLock(HdfsLockFactory.java:53)\n", "\t at org.apache.lucene.store.BaseDirectory.makeLock(BaseDirectory.java:41)\n", "\t at org.apache.solr.store.blockcache.BlockDirectory.makeLock(BlockDirectory.java:283)\n", " \tat org.apache.lucene.store.NRTCachingDirectory.makeLock(NRTCachingDirectory.java:109)\n", "\t at org.apache.lucene.index.IndexWriter.(IndexWriter.java:705)\n", "\t at org.apache.solr.update.SolrIndexWriter.(SolrIndexWriter.java:77)\n", "\t at org.apache.solr.update.SolrIndexWriter.create(SolrIndexWriter.java:64)\n", "\t at org.apache.solr.core.SolrCore.initIndex(SolrCore.java:511)\n", "\t at org.apache.solr.core.SolrCore.(SolrCore.java:761)\n", "\n", "I then went to add this to webarchive-discovery, but it turned out that Solr was compiled against Hadoop 2.x.x and so to get the same logic to work I had to backport the HDFS part of solr-core::4.7.1 to Hadoop 0.20.2 (shading the modified classes over the top of the original one). Due to semantic subtleties about fsync(), hflush() and plain old sync(), and FileSystem.get() not being thread-safe unless a specific property is set to avoid caching it, the port took a while.\n", "\n", "However, now running on the shuf.1000 and it seems to work fine. Not actually terribly quick, though, as running all three shard reducers on one grunt! (grunt13). Need to re-config so there's e.g. only two reducers per grunt and bump up to the 26 shards (i.e. full production settings).\n", "\n", "Yes, the 1000 took 04:xx:xx to complete indexing. Need to look at the way Cloudera does it, as they build LOTS of little shards and then merge them.\n", "\n", "See e.g. https://github.com/apache/lucene-solr/blob/trunk/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/TreeMergeOutputFormat.java#L139\n", "\n", "Note also that the original SolrOutputFormat code might well work now I've back-ported the HDFS classes to run on 0.20.2.\n", "\n", "Initial attempt at setting up with Solr after indexing failed due to index version - 4.7.1 of Solr required.\n", "\n", "At the same time, running the same 1000 source files through the jisc3 collection i.e. using 24 shards and reducers. Should be significantly faster, roughly 6 times faster, i.e. should be about c.45 minutes for the reduce phase instead of 3-4 hours. Yes, nice: 1hrs, 19mins, 49sec.\n", "\n", "Yes, it works. 6,158,995 resources in three shards. There was a curious error (see also http://tickets.wa.bl.uk/trac/ticket/2338#comment:4) but only on one shard:\n", "\n", "
\n",
      "    Apr 14, 2014 5:09:25 PM org.apache.catalina.startup.Catalina start\n",
      "    INFO: Server startup in 319574 ms 3132 2014-04-14 17:09:25.504; [recoveryExecutor-6-thread-1] WARN  org.apache.solr.update.UpdateLog  \u00e2 Starting log replay tlog{file=/opt/data/solrnode3/ldwadev/data/tlog/tlog.0000000000000000254 refcount=2} active=false starting pos=05504 2014-04-14 17:09:27.876; [recoveryExecutor-6-thread-1] ERROR org.apache.solr.update.UpdateLog  \u00e2 java.io.EOFException\n",
      "        at org.apache.solr.common.util.FastInputStream.readFully(FastInputStream.java:154)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readStr(JavaBinCodec.java:559)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:180)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readArray(JavaBinCodec.java:477)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:186)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readSolrInputDocument(JavaBinCodec.java:393)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:229)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readArray(JavaBinCodec.java:477)\n",
      "        at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:186)\n",
      "        at org.apache.solr.update.TransactionLog$LogReader.next(TransactionLog.java:630)\n",
      "        at org.apache.solr.update.UpdateLog$LogReplayer.doReplay(UpdateLog.java:1272)\n",
      "        at org.apache.solr.update.UpdateLog$LogReplayer.run(UpdateLog.java:1215)\n",
      "        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)\n",
      "        at java.util.concurrent.FutureTask.run(FutureTask.java:262)\n",
      "        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)\n",
      "        at java.util.concurrent.FutureTask.run(FutureTask.java:262)\n",
      "        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n",
      "        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)\n",
      "        at java.lang.Thread.run(Thread.java:744)\n",
      "
\n", "\n", "Interesting. Fortunately it doesn't seem to have significantly damaged the data (the transaction log is only really a 'back up' to be used in case the index itself is not shut down correctly), as we have 6.1 million URLs which is roughly what I'd expect from 1/40th of 2.5 billion items.\n", "\n", "As a precaution, I've modified the code so that the reducer waits while the data is committed to disk. I'd assumed that was the default, but actually the embedded Solr server we use here runs most tasks on background threads. The situation we've seen here is consistent with the background thread having been forcefully killed, so adding a blocking 'wait' should resolve it, hopefully.\n", "\n", "Fixed up the tests again, enabled solr.lock.type configuration, Roger helped resolve a classpath issue (hadoop-core should be 'provided', c.f. http://answers.mapr.com/questions/4811/numberformatexception-setting-up-job). And now running on a random 20,000 input files, which we can expect to take 20-25 hours.\n", "\n", "So, running 5 things on grunt22, some are hanging. One was very unhappy. It had this message earlier on:\n", "\n", " Exception in thread \"Lucene Merge Thread #17\" org.apache.lucene.index.MergePolicy$MergeException: java.lang.NullPointerException\n", " at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:545)\n", " at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:518)\n", " Caused by: java.lang.NullPointerException\n", " at org.apache.lucene.util.packed.MonotonicAppendingLongBuffer.get(MonotonicAppendingLongBuffer.java:75)\n", " at org.apache.lucene.util.packed.AbstractAppendingLongBuffer.get(AbstractAppendingLongBuffer.java:101)\n", " at org.apache.lucene.index.MultiDocValues$OrdinalMap.getGlobalOrd(MultiDocValues.java:390)\n", " at org.apache.lucene.codecs.DocValuesConsumer$7$1.setNext(DocValuesConsumer.java:610)\n", " at org.apache.lucene.codecs.DocValuesConsumer$7$1.hasNext(DocValuesConsumer.java:558)\n", " at org.apache.lucene.codecs.lucene45.Lucene45DocValuesConsumer.addNumericField(Lucene45DocValuesConsumer.java:141)\n", " at org.apache.lucene.codecs.lucene45.Lucene45DocValuesConsumer.addSortedSetField(Lucene45DocValuesConsumer.java:414)\n", " at org.apache.lucene.codecs.perfield.PerFieldDocValuesFormat$FieldsWriter.addSortedSetField(PerFieldDocValuesFormat.java:121)\n", " at org.apache.lucene.codecs.DocValuesConsumer.mergeSortedSetField(DocValuesConsumer.java:441)\n", " at org.apache.lucene.index.SegmentMerger.mergeDocValues(SegmentMerger.java:207)\n", " at org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:116)\n", " at org.apache.lucene.index.IndexWriter.mergeMiddle(IndexWriter.java:4146)\n", " at org.apache.lucene.index.IndexWriter.merge(IndexWriter.java:3743)\n", " at org.apache.lucene.index.ConcurrentMergeScheduler.doMerge(ConcurrentMergeScheduler.java:405)\n", " at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:482)\n", " Exception in thread \"Lucene Merge Thread #18\" org.apache.lucene.index.MergePolicy$MergeException: java.lang.NullPointerException\n", " at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:545)\n", " at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:518)\n", " Caused by: java.lang.NullPointerException\n", " Exception in thread \"Lucene Merge Thread #19\" org.apache.lucene.index.MergePolicy$MergeException: java.lang.NullPointerException\n", " at org.apache.lucene.index.ConcurrentMergeScheduler.handleMergeException(ConcurrentMergeScheduler.java:545)\n", " at org.apache.lucene.index.ConcurrentMergeScheduler$MergeThread.run(ConcurrentMergeScheduler.java:518)\n", " Caused by: java.lang.NullPointerException\n", " \n", "and then somewhat later, lots of\n", "\n", " 2014-04-16 09:46:17 INFO UpdateHandler:540 - start commit{,optimize=false,openSearcher=false,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false}\n", " 2014-04-16 09:46:17 ERROR CommitTracker:120 - auto commit error...:org.apache.lucene.index.CorruptIndexException: codec header mismatch: actual header=1701604449 vs expected header=1071082519 (resource: _mq_Lucene41_0.tip)\n", " at org.apache.lucene.codecs.CodecUtil.checkHeader(CodecUtil.java:128)\n", " at org.apache.lucene.util.fst.FST.(FST.java:318)\n", " at org.apache.lucene.util.fst.FST.(FST.java:304)\n", " at org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader.(BlockTreeTermsReader.java:484)\n", " at org.apache.lucene.codecs.BlockTreeTermsReader.(BlockTreeTermsReader.java:176)\n", " at org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat.fieldsProducer(Lucene41PostingsFormat.java:437)\n", " at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.(PerFieldPostingsFormat.java:195)\n", " at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat.fieldsProducer(PerFieldPostingsFormat.java:244)\n", " at org.apache.lucene.index.SegmentCoreReaders.(SegmentCoreReaders.java:116)\n", " at org.apache.lucene.index.SegmentReader.(SegmentReader.java:96)\n", " at org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:141)\n", " at org.apache.lucene.index.BufferedUpdatesStream.applyDeletesAndUpdates(BufferedUpdatesStream.java:279)\n", " at org.apache.lucene.index.IndexWriter.applyAllDeletesAndUpdates(IndexWriter.java:3191)\n", " at org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:3182)\n", " at org.apache.lucene.index.IndexWriter.prepareCommitInternal(IndexWriter.java:2901)\n", " at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3049)\n", " at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3016)\n", " at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:578)\n", " at org.apache.solr.update.CommitTracker.run(CommitTracker.java:216)\n", " at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)\n", " at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)\n", " at java.util.concurrent.FutureTask.run(FutureTask.java:138)\n", " at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)\n", " at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)\n", " at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)\n", " at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)\n", " at java.lang.Thread.run(Thread.java:662)\n", " \n", "Which is somewhat unnerving, but given the lack of fsync() and hflush() is perhaps not entirely unexpected when the system is under this kind of overload.\n", "\n", "I used hadoop job -kill-task to kill the locked attempt and this failing one, to see if it restarts ok. However, the right solution is to reduce the load and only allow two reducers and, say, two or three mappers.\n", "\n", "Okay, so killing and re-starting with 3M:2R:2GB rather than 5M:5R:1GB. The mappers took a little over four hours last time, so we'll see if they're quicker or slower when we drop the load on each machine.\n", "\n", "Timing seem to be much the same - map phase looks like coming in at about 4 hours. Maybe slightly slower, but not significant, 100% mappers done at 4:30:00.\n", "\n", "Sorting now (about 30mins work...) and reducing away. Should be done by around 15 hours as that was when the faster reducers (newer, fatter nodes as it happens) started to complete.\n", "\n", "for 10 on grunt36, problem started like this:\n", "\n", " 2014-04-16 19:26:17 ERROR CommitTracker:120 - auto commit error...:org.apache.solr.common.SolrException: Error opening new searcher\n", " at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1521)\n", " at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:614)\n", " at org.apache.solr.update.CommitTracker.run(CommitTracker.java:216)\n", " at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)\n", " at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)\n", " at java.util.concurrent.FutureTask.run(FutureTask.java:138)\n", " at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)\n", " at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)\n", " at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)\n", " at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)\n", " at java.lang.Thread.run(Thread.java:662)\n", " Caused by: org.apache.lucene.index.CorruptIndexException: codec header mismatch: actual header=65537 vs expected header=1071082519 (resource: _3x_Lucene41_0.tip)\n", " at org.apache.lucene.codecs.CodecUtil.checkHeader(CodecUtil.java:128)\n", " at org.apache.lucene.util.fst.FST.(FST.java:318)\n", " at org.apache.lucene.util.fst.FST.(FST.java:304)\n", " at org.apache.lucene.codecs.BlockTreeTermsReader$FieldReader.(BlockTreeTermsReader.java:484)\n", " at org.apache.lucene.codecs.BlockTreeTermsReader.(BlockTreeTermsReader.java:176)\n", " at org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat.fieldsProducer(Lucene41PostingsFormat.java:437)\n", " at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.(PerFieldPostingsFormat.java:195)\n", " at org.apache.lucene.codecs.perfield.PerFieldPostingsFormat.fieldsProducer(PerFieldPostingsFormat.java:244)\n", " at org.apache.lucene.index.SegmentCoreReaders.(SegmentCoreReaders.java:116)\n", " at org.apache.lucene.index.SegmentReader.(SegmentReader.java:96)\n", " at org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:141)\n", " at org.apache.lucene.index.ReadersAndUpdates.getReadOnlyClone(ReadersAndUpdates.java:235)\n", " at org.apache.lucene.index.StandardDirectoryReader.open(StandardDirectoryReader.java:100)\n", " at org.apache.lucene.index.IndexWriter.getReader(IndexWriter.java:382)\n", " at org.apache.lucene.index.StandardDirectoryReader.doOpenFromWriter(StandardDirectoryReader.java:288)\n", " at org.apache.lucene.index.StandardDirectoryReader.doOpenIfChanged(StandardDirectoryReader.java:273)\n", " at org.apache.lucene.index.DirectoryReader.openIfChanged(DirectoryReader.java:250)\n", " at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1445)\n", " ... 10 more\n", " \n", "Later followed by repeating...\n", "\n", "\n", " 2014-04-17 08:30:46 ERROR WARCIndexerReducer:168 - WARCIndexerReducer.reduce() - sleeping for 1 minute: pos=769\n", " org.apache.solr.common.SolrException: pos=769\n", " at org.apache.solr.update.HdfsTransactionLog.lookup(HdfsTransactionLog.java:267)\n", " at org.apache.solr.update.UpdateLog.lookup(UpdateLog.java:711)\n", " at org.apache.solr.handler.component.RealTimeGetComponent.getInputDocumentFromTlog(RealTimeGetComponent.java:217)\n", " at org.apache.solr.handler.component.RealTimeGetComponent.getInputDocument(RealTimeGetComponent.java:242)\n", " at org.apache.solr.update.processor.DistributedUpdateProcessor.getUpdatedDocument(DistributedUpdateProcessor.java:892)\n", " at org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:791)\n", " at org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:557)\n", " at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:100)\n", " at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:247)\n", " at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:174)\n", " at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:92)\n", " at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74)\n", " at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)\n", " at org.apache.solr.core.SolrCore.execute(SolrCore.java:1916)\n", " at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:150)\n", " at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:118)\n", " at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)\n", " at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.checkSubmission(WARCIndexerReducer.java:162)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:124)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:34)\n", " at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:469)\n", " at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)\n", " at org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n", " at java.security.AccessController.doPrivileged(Native Method)\n", " at javax.security.auth.Subject.doAs(Subject.java:396)\n", " at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n", " at org.apache.hadoop.mapred.Child.main(Child.java:264)\n", " Caused by: java.io.IOException: Could not obtain block: blk_-2269227342052188925_10888306 file=/user/anjackson/jisc2_shards/shard11/data/tlog/tlog.0000000000000000187\n", " at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.chooseDataNode(DFSClient.java:1993)\n", " at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.fetchBlockByteRange(DFSClient.java:2028)\n", " at org.apache.hadoop.hdfs.DFSClient$DFSInputStream.read(DFSClient.java:2116)\n", " at org.apache.hadoop.fs.FSDataInputStream.read(FSDataInputStream.java:46)\n", " at org.apache.solr.update.FSDataFastInputStream.readWrappedStream(HdfsTransactionLog.java:545)\n", " at org.apache.solr.common.util.FastInputStream.read(FastInputStream.java:114)\n", " at org.apache.solr.common.util.FastInputStream.readWrappedStream(FastInputStream.java:80)\n", " at org.apache.solr.common.util.FastInputStream.refill(FastInputStream.java:89)\n", " at org.apache.solr.common.util.FastInputStream.readByte(FastInputStream.java:192)\n", " at org.apache.solr.common.util.JavaBinCodec.readVal(JavaBinCodec.java:172)\n", " at org.apache.solr.update.HdfsTransactionLog.lookup(HdfsTransactionLog.java:262)\n", " ... 27 more\n", "\n", "So, perhaps autocommit is causing issues?\n", "\n", "and on 1 other (16 on grunt44) and elsewhere I think, a probably data quality problem with the text.\n", "\n", "2014-04-17 09:42:39 ERROR WARCIndexerReducer:168 - WARCIndexerReducer.reduce() - sleeping for 1 minute: org.apache.solr.client.solrj.SolrServerException: java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xfffe at char #2958519, byte #3375884)\n", " org.apache.solr.client.solrj.SolrServerException: org.apache.solr.client.solrj.SolrServerException: java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xfffe at char #2958519, byte #3375884)\n", " at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:223)\n", " at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:118)\n", " at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)\n", " at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.checkSubmission(WARCIndexerReducer.java:162)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:124)\n", " at uk.bl.wa.hadoop.indexer.WARCIndexerReducer.reduce(WARCIndexerReducer.java:34)\n", " at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:469)\n", " at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:417)\n", " at org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n", " at java.security.AccessController.doPrivileged(Native Method)\n", " at javax.security.auth.Subject.doAs(Subject.java:396)\n", " at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n", " at org.apache.hadoop.mapred.Child.main(Child.java:264)\n", " Caused by: org.apache.solr.client.solrj.SolrServerException: java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xfffe at char #2958519, byte #3375884)\n", " at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:155)\n", " ... 13 more\n", " Caused by: java.lang.RuntimeException: [was class java.io.CharConversionException] Invalid UTF-8 character 0xfffe at char #2958519, byte #3375884)\n", " at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)\n", " at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:731)\n", " at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3657)\n", " at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)\n", " at org.apache.solr.handler.loader.XMLLoader.readDoc(XMLLoader.java:397)\n", " at org.apache.solr.handler.loader.XMLLoader.processUpdate(XMLLoader.java:246)\n", " at org.apache.solr.handler.loader.XMLLoader.load(XMLLoader.java:174)\n", " at org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:92)\n", " at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74)\n", " at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)\n", " at org.apache.solr.core.SolrCore.execute(SolrCore.java:1916)\n", " at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:150)\n", " ... 13 more\n", " Caused by: java.io.CharConversionException: Invalid UTF-8 character 0xfffe at char #2958519, byte #3375884)\n", " at com.ctc.wstx.io.UTF8Reader.reportInvalid(UTF8Reader.java:335)\n", " at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:249)\n", " at com.ctc.wstx.io.MergedReader.read(MergedReader.java:101)\n", " at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:84)\n", " at com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:57)\n", " at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:992)\n", " at com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4628)\n", " at com.ctc.wstx.sr.BasicStreamReader.readCoalescedText(BasicStreamReader.java:4126)\n", " at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3701)\n", " at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3649)\n", " \n", "So, tweaked config, disabling some caching/NRT code (as is done in Cloudera's mapper) and putting more time between autocommits. Also, this bad data (above) is blocking completion, so recoding to drop data that fails repeatedly, and also will attempt to cleanup data earlier using a UTF-8 encode/decode cycle.\n", "\n", "So, two reducers now suffer this error, it seems: 0 and 16. At 20 hours, 14/24 had completed, so that's looking ok, if somewhat variable across the cluster. Sizes are:\n", "\n", " [anjackson@explorer ~]$ hadoop fs -du jisc2_shards\n", " Found 24 items\n", " 11819458999 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard1\n", " 24886167105 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard10\n", " 10995867725 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard11\n", " 24675012054 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard12\n", " 20682623820 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard13\n", " 20570860041 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard14\n", " 25995039001 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard15\n", " 29325605594 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard16\n", " 8918695012 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard17\n", " 29250320596 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard18\n", " 24395859879 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard19\n", " 24550889972 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard2\n", " 24869064314 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard20\n", " 22475985139 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard21\n", " 23519811316 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard22\n", " 23880387734 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard23\n", " 25369034114 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard24\n", " 26383915157 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard3\n", " 24074510289 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard4\n", " 28070109687 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard5\n", " 29602983297 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard6\n", " 20425924336 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard7\n", " 24060581760 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard8\n", " 24771455202 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard9\n", "\n", "Mapping is +1, so R10 was the one that crashed, and that's shard 11. Shards 1 and 17 are R0 and R16 which have the bad-data problem. The others are still very variable, from c. 20-30GiB per shard, although some 8 others are still writing data.\n", "\n", "Okay, wiping out, recompiling, and restarting. Running with a small test found a minor bug in the new reporting hooks, but now nicely reports numbers of records processed etc. Seems to be pushing 30,000,000 records per hour, c. 8,000 records per second. Will check proper stats later when it's run for a while.\n", "\n", "So reducer phase kicked in. Some errors, particularly earlier on, from DFS not being able to provide blocks in time, I think. lost c.2,500 records as a consequence. Having the counters reporting this is a great improvement.\n", "\n", "Hm, after 11hrs, 46mins, 47sec, the Reducers have got through 10,306,036 records out of 122,627,207 and are doing quite a lot of retries. This seems somewhat slower than before. Sizes are also much lower:\n", "\n", " 2130092437 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard1\n", " 2585581906 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard10\n", " 2574757668 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard11\n", " 2198718069 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard12\n", " 2419696449 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard13\n", " 2560682336 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard14\n", " 2121469973 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard15\n", " 2120275520 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard16\n", " 2601464617 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard17\n", " 2177693487 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard18\n", " 2370112142 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard19\n", " 2173176068 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard2\n", " 2367320297 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard20\n", " 2291537786 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard21\n", " 2217858387 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard22\n", " 2196315505 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard23\n", " 2176750414 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard24\n", " 2407447171 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard3\n", " 2407425960 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard4\n", " 2171001576 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard5\n", " 2198529851 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard6\n", " 2232396290 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard7\n", " 2218614633 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard8\n", " 2365945226 hdfs://nellie-private:54310/user/anjackson/jisc2_shards/shard9\n", "\n", "Ok, trying re-enabling block caching and re-running... Ah, that's a bit better. After 6hrs, 53mins, 39sec the reducer has got through 42,146,677 records. There have been 98,300 dropped records, same EOF stuff it seems.\n", "\n", "So, after 21:41:18 worked pretty much fine. Mappers saw:\n", "\n", "* 122,627,207 records\n", "* 22,659,814 null records (i.e. redirects, 404s etc).\n", "* 3 failed mappers (two due to 'Java heap space' and one mysterious IOException), but all worked on re-submission.\n", "* Finished after 04:24:10.\n", "\n", "Reducers saw:\n", "\n", "* 122,537,935 submitted ok.\n", "* 611 errors when submitting, leading to 89,272 dropped records.\n", "* Two reduce tasks failed but worked the second time around.\n", "* Finished after 21:22:32 (total time, including mappers, so dedicated reducer time is c. 17 hours)\n", "* Spread of reducer finish times is rather large - some done in about 10 hours, others taking much longer. Perhaps some nodes are faster than others?\n", "\n", "So, currently copying this out, to see how long that takes. It's over half a TB of data, so that's not trivial and we may have to actually run Solr from HDFS if it doesn't transfer reasonably quickly.\n", "\n", "Next decision is whether to re-instate any image analysis. Will bump up memory usage and slow things down somewhat, although it's not clear by how much. Another option would be to randomly sample only a subset of images for analysis, e.g. 1 in 100, so we can gauge it's usefulness without crippling the indexer too badly.\n", "\n", "(as an aside, it's worth noting that extractApachePreflightErrors is currently enabled and not causing any problems, but image analysis is more computationally expensive and there are more images that PDFs).\n", "\n", "Another issue is whether to [enabled storage of the term vectors](http://wiki.apache.org/solr/TermVectorComponent) or use the [More Like This](https://wiki.apache.org/solr/MoreLikeThis) handler to extract high-ranking (TF-IDF) terms for a given facet (a la [in a word](http://inaword.dhistory.org/).\n", "\n", "Hm, only 1/20th of the data and it still takes a whole day of runtime. 20 days is pushing it, and not that much of an improvement over where we were before. I'm really going to have to push the shard count up to ~70 to get a decent speed-up.\n", "\n", "Transfering the 24 shard version (1/20th of the collection) off the cluster took about 6 hours. Not too bad, but still a few days to get the data off.\n", "\n", "Set up a 48 shard run with 45,000 inputs (1/10th). Ran mappers on 275,912,357 records (51,087,107 nulls) in 16 hours but... problems with DOTUK-HISTORICAL-1996-2010-GROUP-AO-XABBKD-20110428000000-00001.arc.gz\n", "\n", "
\n",
      "Error: GC overhead limit exceeded\n",
      "Error: Java heap space\n",
      "2014-04-25 02:41:45 FATAL Child:318 - Error running child : java.lang.OutOfMemoryError: Java heap space\n",
      "\tat java.lang.StringCoding$StringEncoder.encode(StringCoding.java:232)\n",
      "\tat java.lang.StringCoding.encode(StringCoding.java:272)\n",
      "\tat java.lang.String.getBytes(String.java:946)\n",
      "\tat uk.bl.wa.solr.TikaExtractor.extract(TikaExtractor.java:241)\n",
      "\tat uk.bl.wa.analyser.payload.WARCPayloadAnalysers.analyse(WARCPayloadAnalysers.java:107)\n",
      "\tat uk.bl.wa.indexer.WARCIndexer.extract(WARCIndexer.java:449)\n",
      "\tat uk.bl.wa.indexer.WARCIndexer.extract(WARCIndexer.java:220)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerMapper.map(WARCIndexerMapper.java:91)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerMapper.map(WARCIndexerMapper.java:28)\n",
      "\tat org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)\n",
      "\tat org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:391)\n",
      "\tat org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)\n",
      "\tat org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n",
      "\tat java.security.AccessController.doPrivileged(Native Method)\n",
      "\tat javax.security.auth.Subject.doAs(Subject.java:396)\n",
      "\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n",
      "\tat org.apache.hadoop.mapred.Child.main(Child.java:264)\n",
      "Task attempt_201404161414_0096_m_020825_2 failed to report status for 20000 seconds. Killing!\n",
      "Error: GC overhead limit exceeded\n",
      "2014-04-25 02:53:57 FATAL Child:318 - Error running child : java.lang.OutOfMemoryError: GC overhead limit exceeded\n",
      "\tat org.apache.tika.language.ProfilingWriter.addLetter(ProfilingWriter.java:82)\n",
      "\tat org.apache.tika.language.ProfilingWriter.addSeparator(ProfilingWriter.java:87)\n",
      "\tat org.apache.tika.language.ProfilingWriter.write(ProfilingWriter.java:72)\n",
      "\tat org.apache.tika.language.LanguageProfile.<init>(LanguageProfile.java:67)\n",
      "\tat org.apache.tika.language.LanguageProfile.<init>(LanguageProfile.java:71)\n",
      "\tat org.apache.tika.language.LanguageIdentifier.<init>(LanguageIdentifier.java:133)\n",
      "\tat uk.bl.wa.extract.LanguageDetector.detectLanguage(LanguageDetector.java:102)\n",
      "\tat uk.bl.wa.analyser.text.LanguageAnalyser.analyse(LanguageAnalyser.java:54)\n",
      "\tat uk.bl.wa.analyser.text.TextAnalysers.analyse(TextAnalysers.java:74)\n",
      "\tat uk.bl.wa.indexer.WARCIndexer.extract(WARCIndexer.java:461)\n",
      "\tat uk.bl.wa.indexer.WARCIndexer.extract(WARCIndexer.java:220)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerMapper.map(WARCIndexerMapper.java:91)\n",
      "\tat uk.bl.wa.hadoop.indexer.WARCIndexerMapper.map(WARCIndexerMapper.java:28)\n",
      "\tat org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)\n",
      "\tat org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:391)\n",
      "\tat org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)\n",
      "\tat org.apache.hadoop.mapred.Child$4.run(Child.java:270)\n",
      "\tat java.security.AccessController.doPrivileged(Native Method)\n",
      "\tat javax.security.auth.Subject.doAs(Subject.java:396)\n",
      "\tat org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)\n",
      "\tat org.apache.hadoop.mapred.Child.main(Child.java:264)\n",
      "
\n", "\n", "OKAY, so modified to catch OOME and move on instead of failing totally. Re-running. Got past the mappers ok. 9 hours of sorting.\n", "\n", "At 26hrs, 38mins, 50sec, we are at 34,571,153 of 275,918,077 records in the reducers.\n", "\n", "In the end, Total Time: 233hrs, 51mins, 33sec. Of 275,917,465 records, 72 errors caused 612 records tobe dropped. These errors almost exclusively occurred during the first few hours of the index build.\n", "\n", "Okay, upped to 1000 instead of 100 per submission, (was 500 before, when it seemed to work ok), and launching on the second chunk.\n", "\n", "Total: 41hrs, 34mins, 47sec\n", "Currently 29,562,045 of 275,034,327 ingested.\n", "Started at Tue May 06 15:35:33 BST 2014\n", "Sort fninshed at 7-May-2014 03:12:13\n", "i.e. c. 30 hours for one tenth of this tenth.\n", "Definately appears much slower than when processing smaller chunks.\n", "KILLING and reverting to smaller chunks - 22500 per job.\n", "\n", "So, now:\n", "7hrs, 51mins, 21sec, at 2,517,002 of 137,026,829 records.\n", " \n", "GAH.\n", "\n", "Going back to the task tracker, 127,000,000 records indexed in 21 hours!\n", "\n", "From http://194.66.232.87:50030/jobdetailshistory.jsp?logFile=file%3A%2Fusr%2Flib%2Fhadoop-0.20%2Flogs%2Fhistory%2Fdone%2Fbellie-private_1397654045202_job_201404161414_0020_anjackson_..%252Fia.files.shuf.split.aa.nofails_1397773215102\n", "\n", "Submitted At: 17-Apr-2014 23:20:57\n", "Launched At: 17-Apr-2014 23:21:01 (3sec)\n", "Finished At: 18-Apr-2014 21:02:19 (21hrs, 41mins, 18sec)\n", "\n", "So, git diffing against that time. Minor code changes, some config changes, but many Solr changes.\n", "\n", " git diff 'HEAD@{17-Apr-2014 23:20:00}' HEAD .\n", " \n", "Changes are since commit [e3189e0](https://github.com/ukwa/webarchive-discovery/commit/e3189e068838911adac9dd662e84f422f042c223). \n", " \n", "Also, is Cloud config ok? Which config set does the implementation depend on? It caches the config from the server and puts it in the distributed cache.\n", "\n", "OK, so new solrconfig.xml has this line:\n", "\n", " \n", " ${solr.hdfs.blockcache.enabled:true}\n", "\n", "which means this old line (which used to do nothing) from Solate.createEmbeddedSolrServer now kicks in:\n", "\n", "\tSystem.setProperty(\"solr.hdfs.blockcache.enabled\", \"false\");\n", "\n", "overriding the default behaviour I changed before, in the solr-shade config where solr.hdfs.blockcache.enabled is checked.\n", "\n", "This means it is likely that caching is off, and so we are in the same 'slow' case we saw before. There is a slight discrepency as I remember a warning about write caching in the reducer logs, so I should check that. Would also make sense to log whether caching is on or not, so we can tell if this is the case more easily.\n", "\n", "Hm, looks like that error would be there whether or not the block cache was enabled overall:\n", "\n", " boolean blockCacheEnabled = params.getBool(BLOCKCACHE_ENABLED, true);\n", " boolean blockCacheReadEnabled = params.getBool(BLOCKCACHE_READ_ENABLED, true);\n", " boolean blockCacheWriteEnabled = params.getBool(BLOCKCACHE_WRITE_ENABLED, true);\n", " \n", " if (blockCacheWriteEnabled) {\n", " LOG.warn(\"Using \" + BLOCKCACHE_WRITE_ENABLED + \" is currently buggy and can result in readers seeing a corrupted view of the index.\");\n", " }\n", "\n", "I believe this error is not a concern, in that we don't read it until after we've written. A good thing for Cloudera to check.\n", "\n", "Note that solr.hdfs.nrtcachingdirectory.enable is set to false by default, and this seemed to work fine before, so I'll leave that disabled as we are not interested in the NRT case.\n", "\n", "Refactored to enable it again, and improved the logging. Now running much better, I think. \n", "After 13hrs, 44mins, 2sec, 58,423,038 of 138,007,497 records are in. i.e. around half-way through.\n", "After 32hrs, 22mins, 55sec, finished, with 137,823,323 records successfully stored.\n", "Actually slower than 24 shards?\n", "Will try dropping to 1 reducer per node.\n", "\n", "Ok, now with 1 reducer per node: Total time 44hrs, 9mins, 37sec for 137,599,824 records! \n", "\n", "Is this getting slower with index size? Well, Gil is not here, so may as well push in the next chunk and get more timings.\n", "\n", " [anjackson@explorer warc-hadoop-indexer]$ hadoop jar target/warc-hadoop-indexer-2.0.0-SNAPSHOT-job.jar uk.bl.wa.hadoop.indexer.WARCIndexerRunner -c ../configs/jisc.conf -i ../ia.files.shuf.split.22500.af -o shindex-jisc-split-22500-af\n", " \n", " \n", "So, it seems to be slowing down, whichis presumably because adding to the index now requires lookups that are too large to cache effectively. NOTE that we have still not hit LDWA size in terms of number of documents (we're only at about 700,000), so separate solr servers handle this better (presumably because they can keep the ID lookup cached in RAM/MMAPped).\n", "\n", "I can see two options:\n", "\n", " * Build separate indexes and merge them later.\n", " * This should work, and is what Cloudera do, but items with the same ID cause duplicate entries, as opposed to adding an item with the same ID, which would be an update and would merge crawl_dates etc.\n", " * Re-build on a larger Solr cluster:\n", " * Take the data so far, and go back to firing the docs at a separate SolrCloud. \n", " * This worked okay for LDWA before, i.e. up to 1.1 billion docs.\n", " * Plus, we now have lots of new servers to choose from.\n", " \n", "So, I'm willing to accept some failure for totally deal with de-duplication this time, and so have launched a parallel job running on a separate 1/20th of the data (split 22500-ag) which will build a separate index that we'll need to merge in later. We'll see how that goes for speed.\n", "\n", "However, I'll also ask Gil to set up a three-server Solr cloud for the 48 shard collection to go on to, and depending on the timing, switch over to updating that directly rather than building shards on the cluster.\n", "\n", "\n", "Back from HDFS to SolrCloud\n", "===========================\n", "\n", "So, while away at IICP, Gil set up a three-node cluster of 48 shards that includes the data from HDFS (but not the final additional shards). This is called JISC3\n", "\n", "Differences to LDWA are DocValues, NIOFS, 48 v 24 shards, plus codebase/config difference.\n", "\n", "We are also setting up a clean JISC4 install on LDWA01, which uses DocValues/codebase but MMAP and 24 shards. This then allows performance to be re-evaluated, having sorted out the reducer-to-mapper slowdowns via compression, and dropped the number of reducers down to 1/node.\n", "\n", "So, now we run JISC3 and JISC4 side-by-side. We will test indexing performance on both systems. For JISC4, I have also disabled host-level linkage, so only domain-to-domain links remain.\n", "\n", "Gil is experimenting with start-up config and related issues for JISC3. Also looking at disk IO rates, as this appears to be a bottleneck.\n", "\n", "Currently running the first JISC4 index into the LD01 server. Damn, old indexer logic closed the SolrServer connection, leading to a problem when the reducer key changed:\n", "\n", "2014-05-30 15:12:00 INFO WARCIndexerReducer:73 - Configuring reducer, including Solr connection...\n", "2014-05-30 15:12:00 INFO SolrWebServer:79 - Setting up CloudSolrServer client via zookeepers.\n", "2014-05-30 15:12:00 INFO WARCIndexerReducer:89 - Initialisation complete.\n", "2014-05-30 15:12:08 INFO WARCIndexerReducer:204 - Submitted 1000 docs [0]\n", "...\n", "2014-05-30 18:47:08 INFO WARCIndexerReducer:204 - Submitted 308 docs [0]\n", "2014-05-30 18:48:48 ERROR WARCIndexerReducer:227 - Sleeping for 5 minute(s): null\n", "java.util.concurrent.RejectedExecutionException\n", "\tat java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1768)\n", "\n", "Well damn, that looked pretty quick, but then died because I left the 'to HDFS' logic in that closes the shard after each key. Recompiling with that code fixed... And cleared out Solr (delete+commit) and restarting.\n", "\n", "After 6hrs, 15mins, 7sec - 42,449,000 records processed.\n", "After 14hrs, 29mins, 46sec - 120,113,818 records processed.\n", "After 14hrs, 37mins, 8sec - ALL 120,585,548 RECORDS PROCESSED no drops.\n", "\n", "2014-05-31 11:23:24 INFO WARCIndexerReducer:73 - Configuring reducer, including Solr connection...\n", "2014-05-31 11:23:24 INFO SolrWebServer:79 - Setting up CloudSolrServer client via zookeepers.\n", "2014-05-31 11:23:24 INFO WARCIndexerReducer:89 - Initialisation complete.\n", "2014-05-31 11:23:28 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 11:23:30 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 11:23:31 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 11:23:33 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 11:23:34 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 11:23:35 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "...\n", "2014-05-31 14:02:42 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:02:51 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "(above for R3, at 346,3000 records)\n", "...\n", "2014-05-31 14:04:19 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:22 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:25 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:30 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:43 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:47 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:51 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 14:04:56 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "...\n", "2014-05-31 20:14:29 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 20:14:40 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 20:14:42 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 20:14:46 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 20:14:52 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "...\n", "2014-05-31 22:21:07 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 22:21:14 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 22:21:16 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 22:21:17 INFO WARCIndexerReducer:209 - Submitted 1000 docs [0]\n", "2014-05-31 22:21:20 INFO WARCIndexerReducer:209 - Submitted 717 docs [0]\n", "END\n", "\n", "The committed, which took a while, leading to 114,309,425 distinct results.\n", "\n", "Running 2/20: 138,559,865 records in total.\n", "At 11hrs, 45mins, 19sec - 59,537,000 records processed.\n", "At 14hrs, 38mins, 2sec - 79,937,093 records processed.\n", "(looking to be c. 1/3rd slower)\n", "At 22hrs, 14mins, 7sec - 135,804,093 records processed.\n", "At 22hrs, 44mins, 34sec - All 138,559,865 records processed.\n", "\n", "Avoided committing the data, in case that slows things down somehow. Could really do with testing that.\n", "\n", "Running 3/20: 137,655,975 records in total.\n", "At 9hrs, 3mins, 14sec - 30,663,000 records processed.\n", "At 12hrs, 18mins, 34sec - 50,197,000 records processed.\n", "(looking to be c. 1/6th slower)\n", "At 15hrs, 28mins, 27sec - 66,149,000 records processed.\n", "At 27hrs, 56mins, 31sec - ALL 137,655,975 records processed. (+5 hrs)\n", "\n", "Running 4/20: 138,970,852 records in total.\n", "At 9hrs, 47mins, 49sec - 29,392,000 records processed (somewhat slower again)\n", "At 12hrs, 24mins, 0sec - 42,417,000 records processed.\n", "At 23hrs, 7mins, 33sec - 70,937,574 records processed.\n", "At 34hrs, 2mins, 35sec - 119,169,574 records processed.\n", "\n", "-at\n", "-as\n", "-ar\n", "-aq\n", "\n", "Running 5/20 -ao: 138,035,746 records in total:\n", "At 5hrs, 56mins, 13sec - 9,733,001 records processed.\n", "At 6hrs, 43mins, 9sec - 17,338,001\n", "At 7hrs, 4mins, 4sec - 20,532,001\n", "At 7hrs, 32mins, 46sec - 24,908,001\n", "At 16hrs, 15mins, 11sec - 83,220,667\n", "\n", "Ok, interesting, shards running on .183 are REALLY SLOW (c. 2,000).\n", "(note '-DnumShards=48' on 183 shard http://192.168.1.183:8983/solr/#/~cloud - same true for .181/182 but not .203)\n", ".203 shards are all REALLY FAST (c. 200,000).\n", ".181 and .182 are in the middle (c. 80,000) half as fast as those on .203).\n", "\n", "CRASH.\n", "\n", "Cleanup.\n", "\n", "Running 6/20 -ap:\n", "So, jisc3 still crashed. jisc1/2 and ld01 were fine. ld01 fastest, jisc1/2 only a little slower (around 12 hours totoal runtime).\n", "\n", "BEFORE\n", " 4212 tomcat 20 0 110g 49g 44g S 21.8 39.2 35:20.70 0 93k /opt/java/bin/jav\n", " 4069 tomcat 20 0 114g 23g 21g S 30.8 18.8 35:29.51 0 100k /opt/java/bin/jav\n", " 3861 tomcat 20 0 116g 18g 15g S 7.6 14.4 36:13.40 0 98k /opt/java/bin/jav\n", " 3555 tomcat 20 0 111g 15g 12g S 46.3 12.0 47:27.31 0 108k /opt/java/bin/jav\n", " 3648 tomcat 20 0 114g 10g 8.6g S 22.8 8.3 44:54.40 0 89k /opt/java/bin/jav\n", " 3437 tomcat 20 0 110g 5.5g 3.1g S 33.7 4.3 31:48.07 0 72k /opt/java/bin/jav\n", " AFTER\n", " 4212 tomcat 20 0 125g 39g 33g S 127.6 31.1 316:05.59 1420 264k /opt/java/bin/ja\n", " 4069 tomcat 20 0 131g 25g 20g S 36.4 20.3 327:59.17 3072 291k /opt/java/bin/jav\n", " 3861 tomcat 20 0 131g 18g 14g S 162.6 14.7 319:25.06 72m 294k /opt/java/bin/ja\n", " 3555 tomcat 20 0 126g 14g 10g S 133.2 11.9 351:19.75 171m 280k /opt/java/bin/ja\n", " 3648 tomcat 20 0 125g 12g 7.3g S 48.3 10.0 256:06.10 160m 275k /opt/java/bin/jav\n", " 3437 tomcat 20 0 117g 9.7g 4.4g S 120.0 7.7 615:41.91 121m 244k /opt/java/bin/ja\n", " \n", " \n", " top - 19:15:15 up 1 day, 7:27, 3 users, load average: 15.50, 21.18, 22.15\n", "Tasks: 514 total, 3 running, 511 sleeping, 0 stopped, 0 zombie\n", "Cpu(s): 0.1%us, 25.9%sy, 0.0%ni, 73.9%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st\n", "Mem: 132123444k total, 131742060k used, 381384k free, 103544k buffers\n", "Swap: 16777208k total, 540088k used, 16237120k free, 107471016k cached\n", "\n", " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP nFLT COMMAND\n", " 7318 tomcat 20 0 126g 25g 22g S 33.9 20.1 363:11.52 6140 10k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode4/conf/logging.properties\n", " 7535 tomcat 20 0 125g 24g 21g S 52.7 19.1 440:47.60 6364 9936 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode2/conf/logging.properties\n", " 7849 tomcat 20 0 127g 21g 18g S 35.1 16.9 441:48.38 10m 9575 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode5/conf/logging.properties\n", " 7938 tomcat 20 0 124g 19g 17g S 73.6 15.9 446:34.19 4104 11k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode6/conf/logging.properties\n", " 3648 tomcat 20 0 140g 12g 7.7g S 127.5 10.2 1395:46 239m 433k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode3/conf/logging.propertie\n", " 3437 tomcat 20 0 131g 9.4g 4.3g S 26.4 7.5 1483:50 249m 376k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode1/conf/logging.properties\n", " 2508 root 2 -18 102m 14m 3612 S 0.0 0.0 0:02.87 0 10 /sbin/dmeventd\n", " 7107 root 20 0 98284 4008 3036 S 0.0 0.0 4:13.88 0 1 sshd: root@pts/2\n", " 2934 haldaemo 20 0 38704 3472 2236 S 17.5 0.0 179:02.43 456 25 hald\n", " 9259 postfix 20 0 81352 3376 2496 S 0.0 0.0 0:00.00 0 44 pickup -l -t fifo -u\n", " 3398 root 20 0 98284 3208 3016 S 0.0 0.0 20:40.31 776 1 sshd: root@pts/1\n", " 3380 root 20 0 98284 3184 3016 S 0.0 0.0 33:17.52 804 0 sshd: root@pts/0\n", " 3287 root 20 0 81272 2720 2516 S 0.0 0.0 129:46.09 700 0 /usr/libexec/postfix/master\n", " 9302 root 20 0 6204 2712 508 R 0.0 0.0 0:00.01 0 0 pidof -c -o 9300 -o 9295 -o %PPID -x rhsmcertd\n", "\n", "\n", "tomcat 3465 62.9 8.8 133563512 11664320 ? Sl 20:48 2:54 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode1/conf/logging.properties -Xx:+UseG1GC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms5120m -Xmx5120m -Dsolr.solr.home=/opt/solrnode1 -Duser.language=en -Duser.country=uk -Dbootstrap_confdir=/opt/solrnode1/jisc4/conf -Dcollection.configName=jisc4cfg -DnumShards=24 -Dsolr.data.dir=/opt/data/solrnode1/jisc4/data -DzkHost=zk01-dev-private.solr.wa.bl.uk:9983,zk02-dev-private.solr.wa.bl.uk:9983,zk03-dev-private.solr.wa.bl.uk:9983 -Djava.endorsed.dirs=/opt/tomcat/endorsed -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat_instances/solrnode1 -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat_instances/solrnode1/tmp org.apache.catalina.startup.Bootstrap start\n", "tomcat 3554 52.2 6.2 131334484 8299072 ? Sl 20:49 2:07 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode2/conf/logging.properties -Xx:+UseG1GC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms5120m -Xmx5120m -Dsolr.solr.home=/opt/solrnode2 -Duser.language=en -Duser.country=uk -Dbootstrap_confdir=/opt/solrnode2/jisc4/conf -Dcollection.configName=jisc4cfg -DnumShards=24 -Dsolr.data.dir=/opt/data/solrnode2/jisc4/data -DzkHost=zk01-dev-private.solr.wa.bl.uk:9983,zk02-dev-private.solr.wa.bl.uk:9983,zk03-dev-private.solr.wa.bl.uk:9983 -Djava.endorsed.dirs=/opt/tomcat/endorsed -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat_instances/solrnode2 -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat_instances/solrnode2/tmp org.apache.catalina.startup.Bootstrap start\n", "tomcat 3638 54.1 5.9 138602448 7892744 ? Sl 20:49 2:11 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode3/conf/logging.properties -Xx:+UseG1GC -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms5120m -Xmx5120m -Dsolr.solr.home=/opt/solrnode3 -Duser.language=en -Duser.country=uk -Dbootstrap_confdir=/opt/solrnode3/jisc4/conf -Dcollection.configName=jisc4cfg -DnumShards=24 -Dsolr.data.dir=/opt/data/solrnode3/jisc4/data -DzkHost=zk01-dev-private.solr.wa.bl.uk:9983,zk02-dev-private.solr.wa.bl.uk:9983,zk03-dev-private.solr.wa.bl.uk:9983 -Djava.endorsed.dirs=/opt/tomcat/endorsed -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat_instances/solrnode3 -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat_instances/solrnode3/tmp org.apache.catalina.startup.Bootstrap start\n", "[r\n", "\n", "\n", "...\n", "\n", "switched over, stopped two and started three, so four running.\n", "Starts to hang.\n", "\n", "top - 23:00:37 up 3:06, 1 user, load average: 15.97, 9.06, 6.49\n", "Tasks: 509 total, 1 running, 508 sleeping, 0 stopped, 0 zombie\n", "Cpu(s): 0.2%us, 38.5%sy, 0.0%ni, 60.6%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st\n", "Mem: 132123444k total, 131549872k used, 573572k free, 20292k buffers\n", "Swap: 16777208k total, 2156k used, 16775052k free, 115377100k cached\n", "\n", " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP nFLT COMMAND\n", " 3554 tomcat 20 0 142g 43g 38g S 403.6 34.5 96:07.83 620 81k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode2/conf/logging.propertie\n", " 4383 tomcat 20 0 124g 26g 24g S 29.1 21.2 13:14.42 0 6334 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode6/conf/logging.properties\n", " 4299 tomcat 20 0 127g 26g 23g S 29.1 21.1 12:56.23 0 6050 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode5/conf/logging.properties\n", " 4215 tomcat 20 0 126g 24g 21g S 19.4 19.3 12:12.05 0 6030 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode4/conf/logging.properties\n", " 2\n", " \n", " top - 23:04:25 up 3:10, 1 user, load average: 21.82, 15.22, 9.49\n", "Tasks: 509 total, 1 running, 507 sleeping, 0 stopped, 1 zombie\n", "Cpu(s): 0.0%us, 29.0%sy, 0.0%ni, 70.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st\n", "Mem: 132123444k total, 131561344k used, 562100k free, 20408k buffers\n", "Swap: 16777208k total, 2156k used, 16775052k free, 115387020k cached\n", "\n", " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP nFLT COMMAND\n", " 3554 tomcat 20 0 142g 43g 38g S 237.0 34.5 96:26.74 620 81k /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode2/conf/logging.propertie\n", " 4383 tomcat 20 0 124g 26g 24g S 2746.6 21.2 16:53.53 0 6334 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode6/conf/logging.properti\n", " 4299 tomcat 20 0 127g 26g 23g S 2833.7 21.1 16:42.29 0 6050 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode5/conf/logging.properti\n", " 4215 tomcat 20 0 126g 24g 21g S 1617.8 19.3 14:21.11 0 6031 /opt/java/bin/java -Djava.util.logging.config.file=/opt/tomcat_instances/solrnode4/conf/logging.properti\n", " \n", " \n", "Okay, Gil bumping the RAM in jisc3 up to nearer the 160GB of ld01 (n.b. jisc1/2 have 256GB). Also adding SSD for scratch space to jisc1/2/3.\n", "\n", "Right, so, the next chunk (-an) went in fine! With 24 reducers, it struggled a little, but worked in the end.\n", "\n", "And the -am next one, with 12 reducers, worked totally fine but took a little longer. Initial reducer load was 2,4,2,4 so rather imbalanced.\n", "\n", "Running -al with 15 reducers, implying a reducer load of 3,4,3,5, with ld01 having the 5 because it can take it.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Re-Index\n", "-----------" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Querying at scale\n", "-----------------\n", "\n", "So, now we have the 2 billion item index, how to we set it up for queries?\n", "\n", "NOTES\n", "\n", "* Parameters to tweak:\n", " * https://wiki.apache.org/solr/SimpleFacetParameters#facet.method\n", " * Manual query distribution (not clear if that controls the replica/core, but it should I think) https://cwiki.apache.org/confluence/display/solr/Distributed+Requests\n", "* empty records, revisits with no visit, have been found. Presumably some kind of id error.\n", "* DocValues were not stored on disk, so additional memory overhead.\n", "* Apparently, this adds to significant memory overhead per segment, so some say reduce that number (also messes with boot time). Others say single index can be slower due to serial reads. We should probably try to benchmark and tune.\n", "* Fields with many values are a major cause of heap exaustion as the faceting requires the fields to be inverted. Building those inverted tables eats a LOT of RAM (asking for content_metadata_ss consumed all 20GB of available RAM).\n", "\n", "Query features:\n", "\n", " * Field collapsing\n", " * Proximity search\n", " * Random words and phrases (large set, significant # of hits please).\n", " * Filtered on facet queries\n", "\n", "last_modified_year\n", "license_url\n", "parse_error 2482\n", "pdf_pdfa_errors 710424\n", "pdf_pdfa_is_valid\n", "xml_root_ns 292 in 61582 documents\n", "\n", "content_metadata_ss 19,191,627\n", "\n", "postcode 1,454,988\n", "postcode_district 18,768\n", "\n", "\n", "Older points\n", "\n", "* Software RAID plus MMAP is BAD.\n", "* MMAP is pointless when index >> RAM.\n", "* Indexing onto HFDS and the deduplication problem.\n", "\n", "* Try MMAP again, for queries, with less RAM.\n", "* Try docValues onDisk.\n", "* Try reducing the volume of data (remove expensive but 'uninteresting' fields - hosts are tricky).\n", "\n", "* Shine testing\n", "* Replicating down to two servers.\n", "* Dual-configuration testing. (4 v 2 servers while all 4 are present)\n", "* PLUS Selective Archive setup.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Analysing JISC5 Performance\n", "---------------------------\n", "\n", "We run a query sequence on each, with two or four servers, and with distrib=true on automatic or manually distributed over shards. Summaries generated by Gil can now be loaded and plotted.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "from numpy.random import randn\n", "import pandas as pd\n", "from scipy import stats\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "sns.set_palette(\"deep\", desat=.6)\n", "sns.set_context(rc={\"figure.figsize\": (8, 4)})\n", "np.random.seed(9221999)\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "def loadSB( file ):\n", " ins = open( file, \"r\" )\n", " qts = []\n", " nhs = []\n", " for line in ins:\n", " cols = line.split()\n", " if len(cols) > 1 and cols[1] == \"A\":\n", " qts.append(float(cols[2])/1000)\n", " nhs.append(int(cols[3]))\n", " qts.append(float(cols[5])/1000)\n", " nhs.append(int(cols[6]))\n", " qts.append(float(cols[8])/1000)\n", " nhs.append(int(cols[9]))\n", " qts.append(float(cols[11])/1000)\n", " nhs.append(int(cols[12]))\n", " ins.close()\n", " return (np.array(qts), np.array(nhs))\n", "\n", "qts2, nhs2 = loadSB( \"solr-bench/servers-2-distrib-manual.txt\" )\n", "qts2a, nhs2a = loadSB( \"solr-bench/servers-2-distrib-auto.txt\" )\n", "qts4, nhs4 = loadSB( \"solr-bench/servers-4-distrib-manual.txt\" )\n", "qts4a, nhs4a = loadSB( \"solr-bench/servers-4-distrib-auto.txt\" )\n", "\n", "fig = plt.figure(figsize=(12, 6))\n", "max_data = 30\n", "bins = np.linspace(0, max_data, 50)\n", "plt.hist(qts2, bins, normed=True, alpha=.5, label=\"Two Servers\");\n", "plt.hist(qts4, bins, normed=True, alpha=.5, label=\"Four Servers\");\n", "plt.legend()\n", "plt.xlabel(\"Query Time [s]\")\n", "\n", "fig.savefig(\"solr-bench/QTimeHist.svg\")\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAGACAYAAABFth9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl83FW9//FXZiZJ05UWoz8XaKvIAeEiS8VSQECposK1\nCqL9XbkCspXlAXoRBO9PvLgUFBRZKptQQXBBL1yVS8WdS6UoghQXTlm8bqAEi7R0yTLJ74+ZQihp\nJt9JZpLJeT0fD2i+890+nZNp3zk933Oa+vr6kCRJklKWG+0CJEmSpNFmKJYkSVLyDMWSJElKnqFY\nkiRJyTMUS5IkKXmGYkmSJCWvMNjOEEIOWALsAnQCx8QYHynvewnwtX6H7wqcGWO8ska1SpIkSTUx\naCgGFgAtMcZ5IYTXAxeWXyPG+DfgAIAQwl7AJ4CralirJEmSVBOVhk/sDSwDiDHeDczZ/IAQQhNw\nMbAoxuhKIJIkSWo4lULxVGBNv+1ieUhFf4cAv44xPjSilUmSJEl1Umn4xBpgSr/tXIyxd7Nj/gW4\naCg36+vr62tqaspQniRJklSVTKGzUiheTqkn+KYQwlxg5QDHzIkx3jWkypqa6OhYm6U+jSHt7VNs\nvwZm+zUu266x2X6Ny7ZrbO3tUyof1E+lUHwzMD+EsLy8fVQIYSEwOcZ4VQihHXg6e5mSJEnS2DFo\nKC4/OLdos5dX9dvfAexeg7okSZKkunHxDkmSJCXPUCxJkqTkGYolSZKUPEOxJEmSkldp9glJkiRV\npVYL/brmQy0YiiVJkmrkzntX0d1THJFrNRfy7LP79iNyLb2QoViSJKlGunuKdPdsvhhw7Vx66UXE\n+DtWr/47Gzdu5GUveznTp8/g3HMXD+u6d921nK997Qagj40bN3Looe/hzW8+aGSKHiMMxZIkSePE\nySefBsBtt32XP/7xDxx//Ekjct0LLljMddd9jUmTJrN+/XqOPHIhe+45l6222mpErj8WGIolSZLG\nob6+0pjmhx5axVVXfZHPfObz/OAH3+P665fy5S9/lZUrf8WyZbdy4omncu65/8769espFns49tgT\n2X33Oc+71uTJU/jGN77K/vu/iVmzZnPDDd+kubmZZ555hvPOO5c1a9YAcNppp/PKV27HoYcezMyZ\ns5k9ezbLl/8PS5d+lQkTJnDjjddTKOTZb7838tnPfprOzk5aW1s544yPUiwWOfPMDzJt2lbstdfe\nTJjQxrJlt5LL5dhhh9dw2mmn1/T9MhRLkiSNY69+9fb87W+P093dzYoVPyOfz/HUU6u588472G+/\nN7J06dXsuedcDjvsvTz5ZAeLFh3DTTf91/Ou8fnPX8rXv34jH//4R/nHP1bzjnccytFHH8d1113D\nnDl7smDBYfzpT39k8eJzWbLkajo6nuDaa29k6tSpFArN/OQnP+Sgg97OD37wPS666DIuuOA8Djvs\nvcydO4977vk5l19+KccddyKrV6/mmmtuoFAocOyx/8q//dtZ7LDDjtxyyzcpFovk8/mavU+GYkmS\npHFuzz334pe//AUdHU8wf/5b+cUv7mblyl9x3HEn8q1vfZ23vOVtALzoRe1MmjSJp556iunTpwOw\ndu1a/vrXx1m06BQWLTqFJ5/s4KMfPYMQduT3v3+E++67hx/+8PvlY0s9xtOmbcXUqVMBOOSQBVxw\nwWJmzpzFzJmzmDp1Go8++jDXX38tN9zwZfr6+mhubgbgpS99GYVCKZ6eddY5fO1rX+Gxx/7Czjvv\n8mzPd60YiiVJkmqkuTByPZvDudYb3rA/V1xxGSHswJ57zuX88z/JttvOpFAoMHPmbO6//15e/ert\n6eh4grVr1zBt2rRnz+3q6uScc87myiuXMn36DGbM2JoZM7ampaWZbbedxZvf/Fbmzz+Ijo4n+P73\nvwdALvfctHGveMU29PXBjTdezzvfeRgAM2fOYuHCI9h551149NGH+e1vf10+77klNL7znVs4/fSz\naGlp4UMfOoXf/OYBXvva3ap+DyoxFEuSJNXIaE6h1tT0XDDdaad/4k9/+iPve9+RvOpV2/HEE3/j\niCOOBOCII45i8eJz+clPfkRn50bOPPPfnxdOt976RZx66umcccZp5PMFisUie++9L6973VxC2JHF\niz/Bt799M+vWreMDHzh+092fV8vBB/8zX/rSlc+OVT7ppNO44ILz6OrqpLOzk9NO+/ALan7Vq17F\nSScdw8SJk2hvfzGvec3ONXiXntNU667ozfR1dKyt5/00gtrbp2D7NS7br3HZdo3N9mtctl1ja2+f\nkmmVE5d5liRJUvIMxZIkSUqeoViSJEnJMxRLkiQpec4+IUmSVBO1mswg0/NjGiJDsSRJUo3c9fAK\nuos9I3Kt5nyBvbabOyLX0gsZiiVJkmqku9gzYqF4KB5//DHe//6FhLDDs6/tscfrOPLIY0bk+n/+\n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\n", "text": [ "" ] } ], "prompt_number": 125 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(figsize=(12, 6))\n", "plt.hist(qts2a, bins, normed=True, alpha=.5, label=\"Two Servers (auto)\");\n", "plt.hist(qts4a, bins, normed=True, alpha=.5, label=\"Four Servers (auto)\");\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 127, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n7twnaGtr4wtf+HemTduHY489ktGjx7Bo0TsMHTqMz3/+YHbYYSLPPvsMP/3pNZx55rmcd973efnl\nl2hra+OII2YyYcIkDjnk8x3LUFdzwAGf57LLLqa6upra2iGcdda5DB06dFVNf/7zo4wfP55crn21\nvfPO+z6vv/46Cxe+wW677cERR8xc5/ucNm1vnntuHmed9R1mzbqaW265mT/84T6y2Rzbbz+BmTOP\nA2Cvvabzy1/ewnHHfb3P28RQLEmSVCJ///vzHHfcV1Ztn376WcT4LK+99go//vF1tLS0cPTRhzNp\n0mSqqqrWOfShsfF1fvKTnzFixIg1Hj/mmOO5/fZbufLKy1mwYD5Tp+7K17/+LZ566kleffUVZs26\nmqamJo46agY77jiFqqoqpk//KLvvviePPPIw99xzFzvsMJG7776TT33qM9x55x1ssMEoTj75NN55\n522OPfZIbrjhF6xYsYJDDz2CLbbYklmzfsg++3yEz33uYB566AEWL160RiieM+cxNt98i1V1b7vt\nh9h33/1pamrigAM+yRFHzFzjfXb+e5dddmOLLbbkxBNP4R//+Dv33/87rrjiJ2SzWU499UQefvgh\npk7djc0225xrrilNz7uhWJIkqUTGjXv38In77ruX7befAEAul2ObbT7ECy+8sMYx+fzqWS9Gjtzg\nXYEY4PHH/8LnP38wn//8wSxfvpzLL7+Y6667mtGjRxPjs6vCeGtrK6+++goAm246DoCddprCrFk/\nZNGiRcyd+wRf//qJXHjhD3jqqSd45pmngfbZN9555+2O88YCcMghh3H99dfyta/NpKGhgQ9+cNs1\nanrnnbfZZpsPAVBfX8/f/vYMjz/+GEOHDmPlyuZ3vYf2GT7WeOe8+OLf2WabD5HNZgHYfvsJvPDC\nAqZO3Y0xYzZk0aJ31vFJ957zFEuSpFSozuYS/ZPLdL+/WOPGjWfu3CcAaGlp4emnn2STTTahpqaG\nN95oBGDevGdXHZ/JrPvGuVmzLuHJJ+cAUFdXx/vf3/4cm246jokTJ3HppVdy0UWXM23aPqvG4HZ2\nRGcyGaZN24fzzz+bPfbYk0wmw7hx49hnn49y6aVXcs45F7DXXtMZMWLkquMB7rvv13z84/tyySVX\nMG7cB/jVr25fo6ZRo0azZMliAH7967sYPrye0047k4MO+g+amlYAdPM+M7S15Rk7dhzPPPM0ra2t\n5PN5nnhizqpQvnjxIkaNGlXMx16QPcWSJCkVkk6hNmbMcBYuXNKr11zXcIipU3djzpzHOOqow2hu\nbmbvvaez5ZZbse+++3P22Wdw3333sMkmY7s+yzqf+4wzzubii89j8eLF5HI53ve+9/PNb55MXV0d\nc+Y8xjHHHMHy5cvYY49pXYY4rH6uT3xiPw466DMcfXR7sP30pw/g3HPP4thjj2TZsqV89rOf66h/\n9Tlbb70N5557FkOG1JHNZjjppFPXqGnChEk8+OD9fOxjn2Ty5J347nf/ixj/xkYbbUwIW/PGG43r\nfZ/bbrsd3/ve6VxwwWXstdc+zJz5ZfL5NrbbbsKqmwefeeZpJk/euecNkEBV1+75Msg3Ni4u5+up\nDzU01GP7VS7br3LZdpXN9qtctl1y+Xyer371KC666PJVN/31pTPO+H8ceeTRbLTRxgWPbWioTzQ3\nncMnJEmS1CeqqqqYMeMIfvnLW/r8uRcsmM/73vf+HgXiYjh8QpIkSX1m4sTJTJw4uc+fd7PNNmez\nzTbv8+ftZE+xJEmSUs9QLEmSpNQzFEuSJCn1DMWSJElKPUOxJEmSUs9QLEmSpNQzFEuSJCn1DMWS\nJElKPUOxJEmSUs9QLEmSpNQzFEuSJCn1DMWSJElKPUOxJEmSUs9QLEmSpNQzFEuSJCn1DMWSJElK\nPUOxJEmSUi9XzhdbvqKJ5U0rE59XV1sNVPV9QZIkSRIFQnEIIQPMArYDmoDDY4wLuuz/OvBloLHj\noa/EGOet7/nmvfAaT897JVGB1bksH568JZlMNtF5kiRJUk8V6ineH6iJMU4NIewMXNDxWKeJwCEx\nxjmlKjBPvlRPLUmSJAGFxxTvCtwLEGN8FJi81v5JwCkhhP8NIXy7BPVJkiRJJVcoFI8AFnXZbu0Y\nUtHpJuArwF7AbiGET/ZxfZIkSVLJFRo+sQio77KdiTG2ddn+YYxxEUAI4W5gAnB3d084bGhtsgKz\nGcaMGU4uV9Z7ArUeDQ31hQ/SgGX7VS7brrLZfpXLtkuPQklzNrAfcEsIYQowt3NHCGEkMDeE8EFg\nGe29xdcUesGly5qSFZjLsHDhEm+0GwAaGuppbFzc32WoSLZf5bLtKpvtV7lsu8qW9A+aQqH4dmB6\nCGF2x/aMEMLBwPAY41Ud44jvp31mit/FGO9NWrAkSZLU37oNxTHGPDBzrYfnddl/E+3jiiVJkqSK\n5Yp2kiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzF\nkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJ\nSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1D\nsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJ\nklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLP\nUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9XLd7QwhZIBZwHZAE3B4jHHB\nOo77MbAwxnhySaqUJEmSSqhQT/H+QE2McSrwbeCCtQ8IIXwF2BbI9315kiRJUukVCsW7AvcCxBgf\nBSZ33RlCmArsBFwJVJWiQEmSJKnUCoXiEcCiLtutHUMqCCFsDJwGHIuBWJIkSRWs2zHFtAfi+i7b\nmRhjW8fPBwIbAr8GNgKGhhD+FmO8vrsnHDa0NlmB2QxjxgwnlytUqsqhoaG+8EEasGy/ymXbVTbb\nr3LZdulRKGnOBvYDbgkhTAHmdu6IMV4KXAoQQvhPYKtCgRhg6bKmZAXmMixcuIRMJpvoPPW9hoZ6\nGhsX93cZKpLtV7lsu8pm+1Uu266yJf2DplAovh2YHkKY3bE9I4RwMDA8xnjVWsd6o50kSZIqUreh\nOMaYB2au9fC8dRz3074sSpIkSSonF++QJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmK\nJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmS\nlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqG\nYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmS\nJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWe\noViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViSJEmpZyiWJElS6hmKJUmSlHqGYkmSJKWeoViS\nJEmpl+tuZwghA8wCtgOagMNjjAu67D8A+BaQB26MMV5SwlolSZKkkijUU7w/UBNjnAp8G7igc0cI\nIQucDewN7AIcHUIYXapCJUmSpFIpFIp3Be4FiDE+Ckzu3BFjbAW2ijEuBhqALLCyRHVKkiRJJdPt\n8AlgBLCoy3ZrCCETY2wDiDG2hRA+C1wG3AUsK/SCw4bWJiswm2HMmOHkcoVKVTk0NNT3dwnqBduv\nctl2lc32q1y2XXoUSpqLgK6/DasCcacY4y9DCLcD1wFf6vj3ei1d1pSswFyGhQuXkMlkE52nvtfQ\nUE9j4+L+LkNFsv0ql21X2Wy/ymXbVbakf9AUGj4xG/gEQAhhCjC3c0cIYUQI4YEQQk2MMQ8sBVqT\nlStJkiT1v0I9xbcD00MIszu2Z4QQDgaGxxivCiH8N/BgCKEZeBL47xLWKkmSJJVEt6G4owd45loP\nz+uy/yrgqhLUJUmSJJWNi3dIkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1D\nsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJ\nklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLP\nUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJ\nkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTU\nMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklIv193OEEIGmAVs\nBzQBh8cYF3TZfzDwNaAFeAo4OsaYL125kiRJUt8r1FO8P1ATY5wKfBu4oHNHCKEOOBPYM8a4GzAS\n2LdUhUqSJEmlUigU7wrcCxBjfBSY3GXfCmCXGOOKju0csLzPK5QkSZJKrFAoHgEs6rLd2jGkghhj\nPsbYCBBCOA4YFmP8XWnKlCRJkkqn2zHFtAfi+i7bmRhjW+dGR0D+AbA5cEBPXnDY0NpkBWYzjBkz\nnFyuUKkqh4aG+sIHacCy/SqXbVfZbL/KZdulR6GkORvYD7glhDAFmLvW/itpH0bxmZ7eYLd0WVOy\nAnMZFi5cQiaTTXSe+l5DQz2NjYv7uwwVyfarXLZdZbP9KpdtV9mS/kFTKBTfDkwPIczu2J7RMePE\ncOAvwGHAg8AfQggAP4wx3pGoAkmSJKmfdRuKO3p/Z6718LwuP9t9K0mSpIrn4h2SJElKvbLevdbc\ntoJs9cpE52RyWfJ51wORJElS6ZQ1FDcufp0Fbz6X6JwhNTXk+WCJKpIkSZIcPiFJkiQZiiVJkiRD\nsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJ\nklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLP\nUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJ\nkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSr1cfxeggS6/6qe2trY1\ntgur6vNqJEmSSsFQrIIeenwezS2tDK2rZdnypoLHV+ey7DZxyzJUJkmS1DcMxSqouaWV5pY2Wlrb\naG5p6+9yJEmS+pxjiiVJkpR6hmJJkiSlnqFYkiRJqWcoliRJUuoZiiVJkpR6hmJJkiSlnqFYkiRJ\nqWcoliRJUur1aPGOEEIGmAVsBzQBh8cYF6x1zFDgt8BhMcbY14VKkiRJpdLTnuL9gZoY41Tg28AF\nXXeGECYDDwLjgXyfVihJkiSVWE9D8a7AvQAxxkeByWvtr6E9ONtDLEmSpIrT01A8AljUZbu1Y0gF\nADHGh2OML/VpZapw+V78I0mSVF49GlNMeyCu77KdiTG2FfOCNdXZZMfnsoweNYza2tpiXk691NbW\nxtC6Wlpa25t72NDC7TCkJsdjz/ydltZkATeXy/CR3bYlk/H+z1JpaKgvfJAGJNuustl+lcu2S4+e\nhuLZwH7ALSGEKcDcYl9wZXNrouMzVa28+dZSctmVxb6keiXPsuVNNLe0MWxoLUuXNRU+o62V5pY2\nmluS/d1UncuwcOESoKrIWtWdhoZ6GhsX93cZKoJtV9lsv8pl21W2pH/Q9DQU3w5MDyHM7tieEUI4\nGBgeY7wq0Suql3o7vMDAKUmStLYeheIYYx6YudbD89Zx3LS+KErd+9P8R2hubUl0TnU2xy6bTylR\nRZIkSZWtpz3FGkCaW1sSh2JJkiStn3c0SZIkKfUMxZIkSUo9Q7EkSZJSz1AsSZKk1PNGOxWQpzrX\n/rdTLptZ9XN3crlM4jmKJUmS+pOhWAW9unwBy5pWUtOUYWVz4bA7vLWWf6v9gMFYkiRVDEOxCmpq\nbqapeSV5sj1akbA6l4GiV+XuzeIkLkwiSZKKYyjWgFGdy3QsTJJsKXAXJpEkSb1lKNaA0r4wSbJQ\nLEmS1FuGYvW5KtpvtuvJTXld5XIZVpamJEmSpG4ZitXnanLVvLx0PkuWNyU6b4P8MEbVDilRVZIk\nSetnKFZJdN6cl8TKlhrAUCxJksrPxTskSZKUeoZiSZIkpZ7DJ/pEsXPrdp6XZH7dfC9eT6uVs816\nc16x5xTDOaIlSellKO4j7fPrtiQ6p666lpa2ZFOQ1VV3roqRNMB0hmnDS6dytVmx55V//uV84s9k\ndY3+XkmSKpuhuI+0z6+bLGDlsjlaEs7Lm8tmeaXxLZYmnNlhaG0thGJ6mQdvr3S52qw355XbC680\nsryp579bdbW17LJ5CQuSJKlMDMUVqK0NWtuShdVcNsef5j9aVA9nJjPQewGLDfvlDPz5tf7d03PK\n27vf1pZP9LvVlvD3UJKkgWoQh2LHR66tmNXictlsiarpW4/MXcDyFc09Pr5uSDXUFj6uLyXt4a+r\nrYVQwoIkSdIqgzgUJx8zWv4xnOorLS2tNLe09fj46pbWsofipD389sJKklQ+FRKKi/mqu43m1uaE\nY0bzQBvJZ6pzRghJkqRKNuBDcTZTxZ+feoEVK5N97V8/rJaXFr6V6KahYXW1PNL0fKKv4aF/voqX\nNFA5dEuSKtGAD8UALa1tib4abz+ntYibhpJ/DQ/981W80qI330KUc37jgV5jeTl0S5IqT0WEYqmQ\nXC5Dda7nw15yuQwrS1hPX8hkqnhkbvJvLqpzWXabuGWJqlpTJdTYH4qZ7k+S1L8Mxap4uWyOl5fO\nZ0mCmR02yA9jVO2QElbVN4r55qLcKqFGSZIKMRRrUGhqbqapued9vytbaoCBH4olSVJ5JJ1mQZIk\nSRp07CnWAOP0dpIkqfwGfCiuouMmqtakyxrbCV5pMlVVvNL4dqJV3wBG1Q8vUUWSJCktBnworslV\n88rS+SxZkWyugNFVw8lkBud0T4NZ0lXfAPLe4yVJknppwIdiSH4TFcDK5mRTREmSJCm9KiIUS2m0\nauhQgvkozwb3AAAI1ElEQVSXgY7j371ceVtbG92P1x6sY7l7+74G8jdO5Xxvg/lzlCRDsTRg1eSq\nE8+/DLDBsGH8af6bNLeuuTT60Loali1f/zcuddW1g3bIUdIV5qByVpkr53sbzJ+jJBmKpQGsqKFD\nLTUdK6qtGYpb2jLdBppcNltUjcUrpuex85xkPZzNrc3v+jwGi3KunudKfZIGM0Nxv8qv9W8pHapz\nmY5ex2RBta66lpa2ZMGsrtpFWiRJhRmKuyh2DGculyFZX95qrzS+lWgKMqcf02Cxrt7sQnLZLC++\n1pjomtlg2HAaxnjdSJK6ZyjuougxnPlhjKqtpZge36RTkDn9mAaX0l8zbXm/iVEh3kQoyVD8LsWM\n4WxpreWVxuUuOiH1UC6X4fl/vcXyJq8ZDQwPPT6P5pZk31xU57LsNnHLElUkqdwMxX3ERScqUTFL\nSudxKeq+0daWr4BrptibASvh96PY3/3BqbmlleYW/6MspZmhWKnUmyWlV7Y0+61ACuSyuaJvBhzo\ninlvlfC+JKk3DMVKrWJ79/1WYLWib07NJju+vxR3M2Cx/1ld/+/U+hdeKb73Nul7K/59FatcU/YV\n+1o9P3fd7TcYxyE7NluVzVAsDUrvDkv5fN9//V3szamjq4aXeaGQcg6VSf4Z57LZbhfGqBtSw/IV\n777Xofjp5oqZDrI3n0eeYgJP0sVCipmyD9oXGKnOjU48fKKnUwt2XThnsC9m4gIvqmSGYmmQWd/Q\nkOpcttsbiYod4lHUAiPNzUW9VjHKPVSm2Cng/tHNVHPra7veTDdXzHSQxXwedbW1EJJW1y7pYiHF\nTNkHMKyulvcPHZ20PKBnPe6FFs4ZTFzgRZXMUCwNQusa4pHNd39j22Ad4gHlHSpT7BRw3b3W+tqu\nN9PNFTMdZFGfR8Lju7wixfRMF1djosMllVX5bvA1FEuSBqSXEk7b5w2t0uBU7LCcTzV8JNE5huJU\nGdxTKkkDh9dap/aRxMWNRU46bV//fdvRfY1rjufPA61A0ptNO99c0vM6X7eYm1u98U0DQ7mG5RiK\nU6I34yol9Vwx19pgvs5qqqv50/xHi5rarrw3YybX00Vouo4JH1U/nF8+8luWrUg4Vn14+5jupOeN\nHDaMDUcNS/T5e+Ob0qrbUBxCyACzgO2AJuDwGOOCLvv3A/4f0AJcG2O8uoS1qpecSkwqj/Iu3z7w\ne6WLm9ouW6Jq3q03Uwv2pDe765jwfBs0taxkWcLVHOtqamhqaU58Xm11Nc2tNQk//+JnDCmfSpj+\nrTfj6aH4GpOcVwmfY/kU6ineH6iJMU4NIewMXNDxGCGEauBCYDKwDJgdQvhVjPH1UhYsSWrnN0B9\no3KmFkyumN+R3swYUk6VMP1bMTWunlow4bLjRb43lzhfrVAo3hW4FyDG+GgIYXKXfVsD82OM7wCE\nEB4C9gBuLUWhkqR38xugvjHQpxbsjaS/I8XPGFJelTD9WzE15rI5Wor4dqVYLnG+WqFQPAJY1GW7\nNYSQiTG2dex7p8u+xcDI7p5sg+H1jH/PexMVOHRILf96eyFJr9HamhqqMlWJLu5izin3ef1ZY3Uu\nQy5T+MLxcxyYNRZqv4FQYynOGww1rq/tBlKN6zOkpobqIoZCVGdyDKmpGRRt3bX9BmqNXdXV1rD6\nxr4k8h1tnazG9nPaSPq1fzleq6WlheI+Cyi6xkyWqiKGNRT7OdYNqaY6YU9xLlfMaxWrN22dTKFQ\nvAio77LdGYihPRB33VcPvNXdk+2y7Q5Vu2y7Q+IiJUnSwPepho8OutdqaOi2v69b5fw8irXf3hP7\nu4SCyvU5FrqrYDbwCYAQwhRgbpd9zwJbhBBGhRBqaB868aeSVClJkiSVUFW+mxWRQghVrJ59AmAG\nMAkYHmO8KoSwL3Aa7eH6mhjjj0pcryRJktTnug3FkiRJUhoUs8SNJEmSNKgYiiVJkpR6hmJJkiSl\nXqEp2fpEoeWiNfCFEB5n9bzUz8cYv9yf9aiwjlUoz4kxTgshbA5cR/vEkk8Dx8QYvaFggFqr7SYA\ndwLPdez+UYzxF/1XnbrTsdrrtcBYoBY4C/gbXn8D3nra7iXgLmBex2FefwNUCCELXAVsSfukxkfR\nnjmvo4fXXllCMd0sF62BL4QwBCDGOK2/a1HPhBBOAr4ILOl46ELglBjjgyGEHwGfBu7or/q0futo\nu0nAhTHGC/uvKiXwH0BjjPGQEMIo4ElgDl5/lWBdbfdd4AKvv4qwL9AWY9wthPBh4Psdj/f42ivX\n8Ik1losGJnd/uAaY7YGhIYTfhBB+3/GHjQa2+cBnWb3c0MQY44MdP98D7NMvVakn1m67ScAnQwgP\nhBCuDiEM77/S1AO30D5VKbT/P7YZr79Ksa628/qrEDHG/wG+0rE5jvYF5SYlufbKFYrXuVx0mV5b\nvbcUOC/G+FHav4640fYb2GKMvwRaujzUdS3OJRRYkl39Zx1t9yjwzRjjh4HngdP7pTD1SIxxaYxx\nSQihnvaQ9V+s+f9ar78Bah1tdyrwf3j9VYwYY2sI4Trgh8CNJPx/X7mCTXfLRWvgm0f7LxcxxueA\nhcDG/VqRkup6vdUDb/dXIUrs9hjjnI6f7wAm9GcxKiyEsAnwB+D6GONNeP1VjLXa7ma8/ipOjPFQ\nIABXA0O67Cp47ZUrFHe3XLQGvhm0jwMnhPBe2nv+X+3XipTUnI4xVgAfBx7s7mANKPeGEHbs+Hlv\n4C/9WYy6F0L4N+A+4KQY43UdD3v9VYD1tJ3XX4UIIRwSQji5Y3M50Ar8Jcm1V64b7W4HpocQZnds\nzyjT66pvXAP8JITQ+cs0w57+itF5l+03gKtCCDXAM8Ct/VeSeqiz7Y4CLg8hNNP+x+iR/VeSeuAU\n2r+iPS2E0Dk+9WvAJV5/A9662u544CKvv4pwK3BdCOEBoJr26+5ZEvy/z2WeJUmSlHreLCVJkqTU\nMxRLkiQp9QzFkiRJSj1DsSRJklLPUCxJkqTUMxRLkiQp9QzFkiRJSj1DsSRJklLv/wNI71anmKXP\nhAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 127 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(figsize=(12, 6))\n", "plt.hist(qts4, bins, normed=True, alpha=.5, label=\"Four Servers\");\n", "plt.hist(qts4a, bins, normed=True, alpha=.5, label=\"Four Servers (auto)\");\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 128, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 128 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(figsize=(12, 6))\n", "plt.hist(qts2, bins, normed=True, alpha=.5, label=\"Two Servers\");\n", "plt.hist(qts2a, bins, normed=True, alpha=.5, label=\"Two Servers (auto)\");\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 129, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 129 }, { "cell_type": "code", "collapsed": false, "input": [ "jp = sns.jointplot(qts2, nhs2, kind=\"scatter\", size=10, xlim=(0,250), ylim=(0,2.5e9))\n", "jp.ax_joint.set_xlabel('Query time (two servers) [s]')\n", "jp.ax_joint.set_ylabel('Number of results')\n", "jp.fig.savefig(\"solr-bench/QTvN-2.svg\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nHPfNJE9LMmW47urqyooVD3asVjqvv3+hNmww7dd82rDZtF+z9fcvLHq9Bx5YX/R6bLmp2rSTNzTu\nneR7GZ5z8UcT9i1Kck1VVU9Osj7JbyW5uFO1AADATOhkz/V5SRYleV9VVe8b2XZRkgV1XV9UVdW7\nk/woyaNJflDX9Xc6WAsAAHRcJ8dcn53k7Gn2fynD464BAGC70ORFZAAAYE4RrgEAoBDhGgAAChGu\nAQCgEOEaAAAK6egiMgDA9uu6667Nxz9+YXp6enLccc/M6ae/cdz+Rx99JO9//3uzevXqzJ8/P+95\nz59n8eLFSZLBwcH82Z/9aV760lfk+ONPSJK8+93nZM2aNent7c3OO++cCy74WEfr/+xn/zY/+9ll\n6e3tyR/90Ttz+OFPGbf/7W8/a/TxHXfcnhe/+GU566y3zXidNItwDQBslQsv/FA++MELsu++++WP\n//js3HRTnSc9qRrdf8kl/5xDDjk0p5/+xvzwh9/L5z53cc4++525++7l+cAH3pcVK1bkZS975ejx\ny5cvzxe/+OUZqb2ub8iyZVfloos+l1//+lf5X//r3Fx00efHHfOJT/x/SZK7716e888/L6ed9oYZ\nr5PmEa4BoIO+9a2v5/LLf5rVq9dkzZrVOeOMN+XZz35urrrqf3LRRX+T7u7u7Lff/vnjPz4vjz76\nSD784Q9k3bqHsnLlirzylb+Xk09+Vf7wD9+UffbZOytWrMo55/xJPvShP09PT29arVb+7M8+kL32\n2juf+MRf5dprlyVJXvjCF+X3fu8P8sEPnp958+bl3nvvzapVK/Oe9/xZDj30sJxyykty4IFLs3Tp\n0rz97eeM1nruue/Iww8/vqz20qUH55xz/mTS97Vu3UPZsGFD9t13vyTJccedkP/+7/8aF66vvXZZ\nXvOa05Ikxx9/Yv7+7z+TJHn44Yfz7ne/L//wD59Lq9VKktx//6o89NCDOffcd+Shhx7Ma1/7+px4\n4km5/PKf5aab6rz2ta8fve69996TD37w/Oyyyy5ZtWplTjzxN3PmmW8eV9/m3ss111yd4457ZpJk\n771/I4ODg1mzZnUWLVq8yXv9+McvzFve8kfZeeedp6wTNhKuAaCDurq6MjTUysc+9qmsWrUyZ511\nek488aT85V9+MJ/+9GezePHifOYzn863v/2NVNVhecELfifPec7zsnLlivzhH56Vk09+Vbq6uvKS\nl7wkRx11fL72ta/kyU8+Mm95y9tzzTVX56GHHspNN92YX/3qnvzt3/59BgYG8ta3npmnP/3YdHV1\n5Td+Y9/88R+fl69//V/yb/92Sd71rj/NihX35e/+7h+z2267jav1Ix/5q7bf17p16zJ//oLR5/Pn\nz88999y9yTG77rrr6P5169YlSQ455EmbXG9gYCCnnvra/N7vnZo1a9bkLW95Qw4//Ck5/vgTRoeN\njPXrX/8qX/jCl9PX15e3vvXMPPvZz82hhx7W9ntZv35dFi1aNKb+BXnooYc2Cdc333xT1q9fn2OO\nOXbaOnffffdpX48dh3ANAB329Kc/I0my555LsuuuC7Nq1crcf/+qvPe9wz2pjz76aI477pk54YRn\n5ctf/lIuvfTfM3/+rhkcHBy9xtKlS5MkL3nJy/MP//C5vPOdf5Rdd12Qs856W+644/YcddTTkiS9\nvb15ylOOzG233ZYkOfTQ4Z7k/v69Rnu2Fy1avEmwTpJzz/1/8/DDD48+P+igg/POdz7e2/vVr345\nP/7xD9PV1ZXzzjs/69c/3jM8HKQXjrveggULRgP1+vXrR4P2ZPbYY8+8/OWnpLu7O7vvvnsOPbTK\nXXfdMWVoffKTj8jOO+88+viuu+4cF643914WLFgwrv7169dl4cLx9SfJ9773rbzsZa/Y6jrZ8QjX\nANBhN9zwyySn5P77V+WRRx5Jf/9e2WuvvfKXf/nRzJ+/IJde+uMsXLgwX/rSF3PEEUfm5JNflSuv\nvCI/+9l/jl6ju3t4gq+f/OQ/ctRRT8vpp78x3//+d/LFL34uz33u8/Otb/1bXv3q/ycDAwO57rpl\n+d3ffXEuv3zyerq7uybd/pGP/PW07+OUU16dU0559ejzvr7e3H338uy773757//+ec44403jjj/y\nyKPys59dlsMPf0p+/vPLctRRx0x57Suu+K989av/Nxdc8LGsX78+t956Sw46aOmUx99yy00ZGBhI\nV1dXrr/+F+MCcDvv5cgjj86nPvXxnHrq6/LrX/86Q0Ot7Lbbok2O+5//uSKvfe3pW10nOx7hGgA6\nbPnyu3L22W/N+vUP5V3vene6u7tz9tnvzLvedXZaraEsWLBr3vOeP0+r1cpf//UFufTSH2fp0oMz\nf/78bNiwYdy1Djvs8Hzwg+enr68vg4ODOfvsd+ZJT6py1VX/kze/+Yxs2LAhz3/+C0d7cbu6usb9\nPWzycL2l3vWu8/L+9783Q0ODOe64E0Zn2zjnnD/MRz7y13nFK16VD3zg/Lz1rWemr29ezj//A5tc\nY2Ndz3zmibniiv/KWWednu7u7rz5zX+Y3XZbNOmY643v4dxz35G1a9fkBS/47SxdevAW1V5Vh+Wo\no47OWWednlZraLRX+8orr8g111yd17/+zCTJAw/cP66Xf6o6YaOujTcSNEBrxYoHZ7sGtkF//8Jo\nw+bSfs2nDWfHt7/9jaxevTqnnvrabbrOjtp+DzzwQL7xjX/J6173eO/xvffek7/6qwu2aIz4bOvv\nX1jmE82IFSsebEyA215N1aYWkQGADusqGqt2NK2ceurrxm3p6uryNWXO0nPNjNlRe122F9qv+bRh\ns2m/ZtNzvf3Rcw0AAB0mXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAA\nFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQi\nXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwD\nAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBA\nIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHC\nNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUA\nABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAU\nIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJc\nAwBAIcI1AAAUIlwDAEAhwjUAABTSO9sFtGvN2vX52Be+l6HWULpaQ7ln5UNJkn33WpTTX/Hs/PLm\nuzM4OJR0JT3d3Tn2iKVJkiuuuy2DQ0NJK+np6c5Rhx2QZTfcObotXcngwFDu/NWqpKsrS/dbkuOf\n+sRpz00y7vGxRyxNX2/PJjWvf+SxXPKDK5Ikr3jBsenr7ckV19027Tnt2jAwOHqtie+pp6d7m6+/\nLfXM9GsDAMwVXa1Wa7ZraMsZf/rZ1pbUetB+S9JKK3fcvWrc9p3n9eaRxwamPffAffdMujLtuWMf\nL91/Sc485TnjAuX6Rx7Lhy/6xugxO83rzd5Ldsud99w/5Tnt2jAwmM989T9y2/KVU76nbbn+ttYz\n1Wv39y/MihUPdrweOkP7NZ82bDbt12z9/Qu7Sl5vxYoHmxHgtmNTtWljhoVs6YeA2+9euUk4TrLZ\nYJ0kd9yzarPnjn182/KVo722G13ygyvGHfPoYwOjwXqqc9p1xXW3jQbZibWUuP621jOTrw0AO6bW\nLP9hKo0ZFgIAwLArr79jeDjsDOvp6c4xhx8446/bJI3pue7q2rLfphy035IcuN+em2zfed7mP08c\nuO+emz137OOl+y8ZHeO90StecOy4Y3aa15sD9t1j2nPadewRS7N0/yWT1lLi+ttaz0y+NgDsiAYH\nhzI41Jr5P7MQ6JumY2Ouq6rqS/LZJAcm2SnJB+q6/vqY/S9N8t4kA0k+W9f1Z6a73pq161sXfObb\nbmgc0cQbGo0XbDbt13zasNm0X7OVHnP9rR8taw0OzfzwjJ7urjzjiKVJir6dRpqqTTsZrl+f5Kl1\nXZ9TVdXuSa6u6/rAkX19SX6Z5Ngk65NcluQldV3fN80lW36oNJv/GJpN+zWfNmw27ddspcP1dy+9\ntjW7w0KE66natJNjrr+S5J9HHndnuId6o8OT3FzX9ZokqarqP5M8e8zxAABM4ZjDD4iAOzd1LFzX\ndb0uSaqqWpjhoP2eMbt3S7JmzPMHkyza3DX7+xeWLJFZoA2bTfs1nzZsNu3HRosXL0hfn3kp5qKO\ntkpVVU9I8rUkn6zr+p/G7FqTZOxPiIVJHtjc9fw6rNn8SrPZtF/zacNm037NVvqD0erV66PnenZN\n1aYdC9dVVe2d5HtJ3lrX9Y8m7L4hyZNGxmKvy/CQkAs6VQsAAMyETvZcn5fhoR7vq6rqfSPbLkqy\noK7ri6qqOifJdzM8Hvviuq7v7WAtAADQcZ0cc312krOn2f+NJN/o1OsDAMBMa8wiMgAAMNcJ1wAA\nUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCI\ncA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHAN\nAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAA\nhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI\n1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcA\nAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQ\niHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhw\nDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0A\nAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACF\nCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhfR2\n+gWqqjo+yYfrun7ehO3vSPKGJCtGNp1V1/WNna4HAAA6paPhuqqqc5O8NslDk+w+Jsnr6rq+qpM1\nAADATOn0sJCbk7wySdck+56e5Lyqqn5SVdW7O1wHAAB0XEfDdV3XX0syMMXuLyU5K8lvJTmpqqoX\nd7IWAADotI6PuZ7Gx+q6XpskVVV9M8nTknxzuhP6+xfORF10kDZsNu3XfNqw2bQfGy1ePD99fbMZ\n45jKrLRKVVWLklxTVdWTk6zPcO/1xZs7b8WKBztdGh3U379QGzaY9ms+bdhs2q/ZSn8wWr16fSYf\ndctMmapNZypct5KkqqpTk+xa1/VFI+Osf5Tk0SQ/qOv6OzNUCwAAdERXq9Wa7Rra1fKJvdn0ujSb\n9ms+bdhs2q/Z+vsXFu1mXrFibUvP9eyaqk0tIgMAAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcA\nAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQyGbDdVVVe1ZV9cKRx+dVVfWVqqqe3PnSAACgWdrpuf5S\nksOqqnpBklcl+XqST3e0KgAAaKB2wvXudV1/IsnLk3yuruvPJ5nf2bIAAKB5ets4pquqqqcnOTnJ\nc6uqOrrN8wAAYIfSTs/1nyS5IMmFdV3fkuRTSc7paFUAANBA7YTr/eu6/q26rv86Seq6PjHJ4Z0t\nCwAAmmfK4R1VVb0jyW5J3lxV1YFJusac85okn+x8eQAA0BzT9VzfnOFAPfHPI0lO63xpAADQLFP2\nXNd1/fUkX6+q6v/WdX39DNYEAACNNN2wkNvGPJ64u1XX9cGdKgoAAJpouin1njfNvlbpQgAAoOmm\nGxZye5JUVXVaJg/Tn+9QTQAA0EjtLAbzvDwervuS/GaSSyNcAwDAOJsN13Vdv37s86qq9kjy5U4V\nBAAATdXOIjITrUtyUOE6AACg8Tbbc11V1Y/GPO1KcnCSb3asIgAAaKh2xlz/eYbHXHclGUqysq7r\nX3a0KgAAaKB2hoX8LMnquq5/nOQJSU6vqmqfjlYFAAAN1E64/mKSV1VVdXyS85OsTfK5ThYFAABN\n1E64XlrX9XuTnJLk4rqu/yLJ7p0tCwAAmqedcN1TVdWSJCcn+ebIkJD5nS0LAACap51wfUGSy5N8\nq67ra5P8OMlfdLIoAABoonYWkfnHJP84snhMkhxe1/VQZ8sCAIDm2WzPdVVVR1dVdUOSZVVVPSHJ\nTVVVPb3zpQEAQLO0MyzkE0lemeH5re9K8uYkf9PRqgAAoIHaCdfzxy4aU9f195Ps1LmSAACgmdoJ\n16uqqjp645Oqql6T5P7OlQQAAM3UzvLnb83wojFPrqpqTZKbkrymo1UBAEADtROuX1DX9bOqqto1\nSU9d12s6XRQAADRRO+H67Uk+Xdf1Q50uBgAAmqydcH1XVVX/nuGFZB4Z2daq6/r9nSsLAACap51w\n/fORv1tjtnV1oBYAAGi0dlZoPH8G6gAAgMZrZyo+AACgDVOG65HZQQAAgDZN13P9oySpqupTM1QL\nAAA02nRjrhdWVfUPSV5UVdXOGX8TY6uu6zM6WxoAADTLdOH6t5M8N8lJSf4jw+G6NeZvAABgjCnD\ndV3Xdyb5fFVVy5Jcn6RK0pPkurquB2aoPgAAaIx2ZgvpS3Jjks8l+bskd1ZV9cyOVgUAAA3UziIy\nH0/y+3VdX54kI8H640mO62RhAADQNO30XC/YGKyTpK7rnyfZuXMlAQBAM7UTrh+oqurkjU+qqnpF\nklWdKwkAAJqpnWEhb0ryxaqqLs7wTCG3JHltR6sCAIAG2my4ruv6xiTHjazY2F3X9drOlwUAAM3T\nTs91kqSu64c6WQgAADRdO2OuAQCANmw2XFdV9eaZKAQAAJqunZ7rt3e8CgAA2A60M+b6rqqq/j3J\n5UkeGdnWquv6/Z0rCwAAmqedcP3zkb9bI393dagWAABotHam4jt/ZBq+Jya5Nsl8M4cAAMCm2rmh\n8flJrk7yr0n2SXJ7VVW/0+nCAACgadq5ofFDSX4zyQN1Xd+d5DlJLuhoVQAA0EDthOvuuq7v3fik\nrutf5PHx1wAAwIh2Zwt5aZJUVbU4yduS3NnRqgAAoIHa6bl+c5LXJHlCkluTPC3JmzpZFAAANFE7\ns4X8OskfVFW1W5INdV0/3PmyAACgeTYbrquqenKSv8/wVHypqur6JKfVdX1LZ0sDAIBmaWdYyEVJ\nzq/res+6rvdMcmGSiztbFgAANE874XqXuq6/tfFJXdeXJFnUuZIAAKCZphwWUlXVHhle6vzKqqre\nkeQzSQYzfHPjpTNTHgAANMd0Y66vzOPzWT8/yR+NPO4a2X52B+sCAIDGmTJc13V90AzWAQAAjdfO\nbCGHZXhe693HbG7VdX1Gx6oCAIAGameFxkuSfCnJNWO2Wf4cAAAmaCdcP1DX9fs7XgkAADRcO+H6\n76uq+mCSHyYZ2LixrmszhgAAwBjthOvnJnlGkhMnbH9e8WoAAKDB2gnXxyY5tK5r46wBAGAa7azQ\neG2Sp3a6EAAAaLp2eq6fmOFVGn+V5LGRba26rg/uXFkAANA87YTrl2d4VcaxDBEBAIAJ2r2hcbIw\n/fmypQAAQLO1E66fl8fDdV+S30xyaYRrAAAYZ7Phuq7r1499XlXVHkm+3KmCAACgqdqZLWSidUkO\nKlwHAAA03mZ7rquq+tGYp11JDk7yzY5VBAAADdXOmOs/H/O4lWRlXde/6FA9AADQWFOG66qqDhh5\neOtk++q6vrNjVQEAQANN13N9aSafgm/fkfN6OlIRAAA01JThuq7rg8Y+r6pq1yQfTfLbSd7Y2bIA\nAKB52potpKqqFyS5duTpkXVdf79zJQEAQDNNe0PjSG/1hUl+J8kbhWoAAJjalD3XeqsBAGDLTNdz\n/b0kGzI8xvqaqqrG7mvVdX1wJwsDAICmmS5cC88AALAFppst5PYZrAMAABqvrdlCAACAzROuAQCg\nEOEaAAAKEa4BAKAQ4RoAAAoRrgEAoBDhGgAACul4uK6q6viqqn40yfaXVlX1X1VV/bSqqjM7XQcA\nAHRaR8N1VVXnJrkoyU4Ttvcl+WiSFyZ5TpI3VVW1VydrAQCATut0z/XNSV6ZpGvC9sOT3FzX9Zq6\nrjck+c8KTIx5AAAfoUlEQVQkz+5wLQAA0FEdDdd1XX8tycAku3ZLsmbM8weTLOpkLQAA0Gm9s/S6\na5IsHPN8YZIHNndSf//CzR3CHKcNm037NZ82bDbtx0aLF89PX99sxTimM1utckOSJ1VVtXuSdRke\nEnLB5k5aseLBTtdFB/X3L9SGDab9mk8bNpv2a7bSH4xWr16fTUfdMpOmatOZCtetJKmq6tQku9Z1\nfVFVVeck+W6Gh6ZcXNf1vTNUCwAAdERXq9Wa7Rra1fKJvdn0ujSb9ms+bdhs2q/Z+vsXFu1mXrFi\nbUvP9eyaqk0tIgMAAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAA\nhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI\n1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcA\nAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQ\niHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhw\nDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0A\nAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACF\nCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjX\nAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAA\nUIhwDQAAhQjXAABQiHANAACFCNcAAFCIcA0AAIUI1wAAUIhwDQAAhQjXAABQiHANAACFCNcAAFCI\ncA0AAIUI1wAAUIhwDQAAhfR26sJVVXUn+VSSpyZ5NMmZdV3fMmb/O5K8IcmKkU1n1XV9Y6fqAQCA\nTutYuE5ycpJ5dV2fWFXV8UkuHNm20TFJXlfX9VUdrAEAAGZMJ4eFPCvJd5KkruvLkxw7Yf/Tk5xX\nVdVPqqp6dwfrAACAGdHJcL1bkrVjng+ODBXZ6EtJzkryW0lOqqrqxR2sBQAAOq6Tw0LWJlk45nl3\nXddDY55/rK7rtUlSVdU3kzwtyTenu2B//8LpdtMA2rDZtF/zacNm035stHjx/PT1dTLGsbU62SqX\nJXlpkq9UVfXMJNds3FFV1aIk11RV9eQk6zPce33x5i64YsWDHSqVmdDfv1AbNpj2az5t2Gzar9lK\nfzBavXp9kq6i12TLTNWmnQzXlyR5YVVVl408P72qqlOT7FrX9UUj46x/lOGZRH5Q1/V3OlgLAAB0\nXMfCdV3XrSRvmbD5xjH7v5ThcdcAALBdsIgMAAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBA\nIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHC\nNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUA\nABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAU\nIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJc\nAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMAQCHCNQAAFCJcAwBAIcI1AAAUIlwDAEAhwjUAABQiXAMA\nQCHCNQAAFCJcAwBAIcI1AAAU0jvbBbTrnR/6UgYHW3nz7z8vey7eNRsGBnP5NbfkjntW5sB9luT4\no56Yvt6eJMmGgcFccd1tGRwaSlpJT093jj1i6ej+qWw8L0lbx3fSVLXMpRoBgNnSauOYro5XwaYa\nE67vX7M+SfKXF38r7zztd/LVH/xPbr97ZZJkWb08y266K2961XOTJJ/56n/ktuUrx51/dX1nzjzl\nOVOG0Q0Dg+PO29zxnTRVLUnmTI0AwOy58vo7Mzg4NOm+np7uHHP4gTNcERs1cljIJ//ph6PBeqM7\n7l6VK667LVdcd9smwTpJblu+crTHdzITz9vc8Z00VS1zqUYAYPYMDg5lcKg1+Z8pQjczo5HhGgAA\n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\n", "text": [ "" ] } ], "prompt_number": 120 }, { "cell_type": "code", "collapsed": false, "input": [ "jp4 = sns.jointplot(qts4, nhs4, kind=\"scatter\", size=10, xlim=(0,250), ylim=(0,2.5e9))\n", "jp4.ax_joint.set_xlabel('Query time (four servers) [s]')\n", "jp4.ax_joint.set_ylabel('Number of results')\n", "jp4.fig.savefig(\"solr-bench/QTvN-4.svg\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n+owkq5K8uZTy5vFtZyXZodZ6Vinl9Um+meS+JF+vtX6lj7UAAEDf9bPn+tQkp25m/2cy1ncNAABb\nhS4/RAYAAJYU4RoAABoRrgEAoBHhGgAAGhGuAQCgkb4+RAYA2Dp89KMfzve+990MDw/lD//wNTn4\n4MducszIyEje8pb/nWc/+3k59tgnJUn+6q8+kP/8z+9nYGAgL3/5H+SII45a1DovvfSSvO99Z2Zo\naCjHHPPEnHjiS+c875577smf//mf5Kab1mbjxo159atPz+677563vOWMyetdeeUVecUrXpXnPOf5\nff170R3CNQCwWbVenosu+kHOOuvj+elPb8ob33h6zjrrE9OOueGG6/P2t78569aty6//+ljQvOKK\ny3PZZT/Mhz/8sdx009q8/vWvycc+9ulFrfPMM/8k73jHu7Lnnnvlda87NVdeWTM62pv1vE9/+hN5\n1KMekze96W25+uqrcsUVl+eggw7O+9//V0mSSy+9OGed9aH8+q8/r29/J7pHuAaAPvjSlz6f8877\n96xff1tuu219TjrpZXnqU0/ID37wnznrrL/M4OBg9tpr77zudWfkvvvuzTvf+fbcddedufnmdXn+\n838jz33uC/MHf/Cy7LLLrrn99tvy9re/La973ekZGhpOr9fLW97y9uy++x55//v/IpdcclGS5FnP\n+uX8xm/8Vt7xjrdm+fLlWbt2bW655ea84Q1vyYEHHpQXvODXst9+a7JmzZq86lWnTdZ6+umvzj33\n3P847TVrDshpp/2vyfcXX3xhjjnmiUmSPfZ4REZGRnLbbeuzatXOk8fcc889ef3r35y/+ZuPp9fr\nJUkOPPCgnHnm+5Mka9femJUrxx4Xfd5538uVV9b8zu+8ZPL8tWtvzDve8dY87GEPyy233JzjjntK\nTj755dP+TR9MnevXr8/OO4/Vedddd2bDhg3Zc8+9kiTHHPOkfP/7/zfLly/LE55w7Cbnff/75+Xp\nT39WTjvtVdlhhx2mfa9er5f3vOfP85a3vD0DAwPz+C+CbYVwDQB9MDAwkNHRXt773g/mlltuzimn\nnJjjjnty/vRP35EPfeij2XnnnfORj3woX/7yF1LKQXnmM38pxx//tNx887r8wR+ckuc+94UZGBjI\ns571S3nKU07I1772uRxyyGF5xStelYsvvjB33nlnrrzyitx004358Ic/lo0bN+aVrzw5Rx11dAYG\nBvKIR+yZ173ujHz+8/+Uz33unLz2tf8769b9d/76rz+dnXbaaVqtf/Znf7HZv8vdd9+VVatWTb5f\nsWKH3HnnndPC9aMf/ZhZzx0aGspf/dUH8g//8Hd59atflyQ59tgnTbaNTPXTn96UT37y77Js2bK8\n8pUn56lPPSEHHnjQQ6rzrrvunBKu78qKFTtM2b8iN954QzZsWD7reevXr8+dd96Rd7/7/fnKV76Y\nD3zgPXnjG/8oSfLd756bAw54VPbZZ9/N1sS2R7gGgD456qgnJEl23XW37Ljjytxyy8352c9uyZve\nNDYDet999+WYY56YJz3pF/J3f/eZnHvuN7JixY4ZGRmZvMa+++6fJPmN3/iNvOc9/yevec0fZscd\nd8gpp/x+rr32xzn88COSJMPDw3nsYw/LNddckyQ58MCSJFm9evfJme1Vq3beJFgnyemn/8/cc889\nk+/33/+AvOY198/S7rDDDrn77vtnjO+++67JWej5OOWU38+LX3xiTjnlJTn88CMmZ45nOuSQQ7P9\n9ttPvv7JT66bFq4fap0z9991113ZcceVWbZseJPzdtxxx6xatSpPfvJTkyTHHfeUfOpTH5885mtf\n+0p+8zdfNO9/A7YdwjUA9Mnll/9XkhfkZz+7Jffee29Wr949u+++e/70T9+dFSt2yLnnfisrV67M\nZz7zqRx66GF57nNfmAsuOD/f+953Jq8x0XLw9a9/PYcffkROPPGl+Zd/+Uo+9amP54QTnpEvfelz\n+c3f/H+zcePGXHrpRfmVX/nVnHfe7PUMDs7evvBnf/aezf49Djvs8fngB9+XF73oxfnpT3+a0dFe\ndtpp1WbPSZL//M/v59/+7Rs57bT/leXLl2d4eDiDg3MvVHb11Vdm48aNGRgYyGWX/XCTXuaHWucO\nO+yYZcuGc8MN12fPPffK97//HznppJdlcHBo2nm9Xi+rVu2cxz3u8fn3f/9ODjzwoFx00QU54IBH\nTV7r8sv/K4ce+rgt/huw7RGuAaBPrr/+Jzn11Ffm7rvvzGtf+/oMDg7m1FNfk9e+9tT0eqPZYYcd\n84Y3/NF4/+67cu6538qaNQdkxYoV2bBhw7RrHXbYYTnttNdm2bJlGRkZyamnviaPeUzJD37wn3n5\ny0/Khg0b8oxnPGtypncilE/vB35wvcGlHJTDD398TjnlxPR6o5OzxRdccH4uvvjCvOQlJ087fuJ7\nHnHEUfnmN/81r3jF72V0dDQveMFv5hGPeOSsPdcT9Z1++qtz++235ZnP/MWsWXNA8zpf+9oz8ra3\nvSmjoyM55pgnTa4mMvW8id7qF7/4xPzpn/5xXv7ykzI8PJw3vvFtSZJbb701O+644wOqjW3HwMRN\nBx3QW7fujsWugYdg9eqVMYbdZfy6zxgurC9/+QtZv359XvSi32lyva1p/G699dZ84Qv/lBe/+MTJ\nbWvX3pi/+It3bbGvuqtWr17Z9K7Hdevu6EyA21rNNaYeIgMAfWIRibn08qIXvXjaloGBAf9ebBXM\nXLNgtqZZl22R8es+Y9htxq/bzFxvfcxcAwBAnwnXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0Ihw\nDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0A\nAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACN\nCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjX\nAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA\n0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCI\ncA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHAN\nAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAA\njQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I\n1wAA0Mhwvy5cSlmW5KNJ9kuyXZK311o/P2X/s5O8KcnGJB+ttX6kX7UAAMBC6OfM9W8nWVdrfWqS\nX07yfyZ2jAfvdyd5VpLjk7yslLJ7H2sBAIC+62e4/mySN0/5Phun7Ds4yVW11ttqrRuSfCfJU/tY\nCwAA9F3f2kJqrXclSSllZcaC9hum7N4pyW1T3t+RZNWWrrl69cqWJbIIjGG3Gb/uM4bdZvyY8PCH\n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\nXfTR6tUrjWGHGb/uM4bdZvy6rfUPRuvX351Nu25ZSHON6UKF616SlFJelGTHWutZpZTTknw1Y60p\nZ9da1y6iPtB8AAAbyklEQVRQLQAA0BcDvV5vsWuYr56f2LvNrEu3Gb/uM4bdZvy6bfXqlU2nmdet\nu71n5npxzTWmHiIDAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0A\nAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACN\nCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjX\nAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA\n0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCI\ncA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHAN\nAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAA\njQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I\n1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcA\nANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQiHANAACNCNcAANCIcA0AAI0I1wAA0IhwDQAAjQjXAADQ\niHANAACNCNcAANCIcA0AAI0M9+vCpZTBJB9M8rgk9yU5udZ69ZT9r07ye0nWjW86pdZ6Rb/qAQCA\nfutbuE7y3CTLa63HlVKOTXLm+LYJRyZ5ca31B32sAQAAFkw/20J+IclXkqTWel6So2fsPyrJGaWU\nb5dSXt/HOgAAYEH0M1zvlOT2Ke9HxltFJnwmySlJnp7kyaWUX+1jLQAA0Hf9bAu5PcnKKe8Ha62j\nU96/t9Z6e5KUUr6Y5IgkX9zcBVevXrm53XSAMew249d9xrDbjB8Tdt55RZYt62eM48Hq56h8N8mz\nk3y2lPLEJBdP7CilrEpycSnlkCR3Z2z2+uwtXXDdujv6VCoLYfXqlcaww4xf9xnDbjN+3db6B6P1\n6+9OMtD0mjwwc41pP8P1OUmeVUr57vj7E0spL0qyY631rPE+629mbCWRr9dav9LHWgAAoO/6Fq5r\nrb0kr5ix+Yop+z+Tsb5rAADYKniIDAAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAA\nNCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQi\nXAMAQCPCNQAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAANCJcAwBAI8I1AAA0IlwD\nAEAjwjUAADQiXAMAQCPCNQAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAANCJcAwBA\nI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPC\nNQAANCJcAwBAI8I1AAA0IlwDAEAjwjUAADQiXAMAQCPCNQAANCJcAwBAI8OLXcB8/dH7/ykbNozk\nJc97SlZsvzznXXx1rr3x5uz3yN1yWNknX/jWD5Ikv3bCEfmvq25Ikhx96JosGx5KkmzYOJLzL70m\nSXL4Qfvmosuv2+SY2Uw9b0vHAgCwbRvo9XqLXcO8nPj6s3tJMjCQ7L3HLvnJTT+b9biBgWTir7Rm\n791y8guOT5J85B/+Lddcf3OSZPvlw7n35xunHTNbaN6wcWTaeZs7li1bvXpl1q27Y7HL4EEyft1n\nDLvN+HXb6tUrB1peb92623rJbJds+m3YjLnGtDMz1xN6vcwZrCf2T7jm+psnZ50nAnKSyWA99Zgn\nPf7Rm1zr/EuvmXbe5o4FAFgoF1x2XUZGRiffDw0N5siD91vEipjQuXANALCtGxkZzcjo1O6D0TmP\nZWF17obGgYFkn0fsstn9E9bsvVuOPnRNjj50Tdbsvdvk9u2XD29yzGxmnre5YwEAoDMz1/vvtetD\nuqHx5Bcc/4BvaFw2PDTtPDc0AgBLwdDQYKbOVo+9ZynozA2NSXpu5Og2N+N0m/HrPmPYbcav29zQ\nuPXp/A2Nv//WT2S018vv/9YzssvOO06bhb7ghz/OtWtvzn577pYjD9k/F10+3uQ/kAwNDs4642yJ\n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\nSrkg9z8s6EdJ/iTJxzLWr3Rpkt+vtbqjdomZ2pNWSnl0ZhmzUspLk7wsycYkb6+1fnHRCmaaGeN3\nRJLPJ7lyfPcHa62fNX5L0/gytR9Nsl/GfnX99iSXxWewE+YYv+uTfCHJFeOH+QwuHQcn+ctSSpIs\nS3JFrfWrSb4688BSyhlJvltrfUMpZe8k3yilHFprnXUGuws9189NsrzWelyS1yc5c5HrYR5KKdsn\nSa31aeNfv5fk3UnOqLU+NWO/hnnOYtbIpmbpSdtkzEopj0jyqiTHJfmlJH9SSlm+GPUy3Szjd1SS\nd0/5HH7W+C1pv51k3fjn7ZeTfCBj/5/nM9gNs43fkUnO9Blcki5P8uLxmxvPyNhExFx2yP1PHb81\nY2F8aK6Dl/zMdZJfSPKVJKm1nldKOXqR62F+Dk+yopTy1Yz9d/aGJEfWWs8d3//ljN0g8E+LVB+z\nm9aTltnHbCRjP8FvSLKhlHJVxn6zdP5CF8smZo7fUUkOLKU8J2Oz1/8zyTExfkvVZ5P8/fjrwSQb\n4jPYJbON31FJis/gkjLxG/NXJPlkKWV4fNtJmznnXUn+erxtZFmS/11rvWeug7sQrnfK/T8tJMlI\nKWXqo9RZmu5K8q5a69mllMdk/AekKe7M2E0BLCGz9KRNfbzuHRkbs51yf7vP1O0sslnG77wkH661\n/mD815pvSXJhjN+SVGu9K0lKKSszFtTemOn9nz6DS9gs4/eGjPXpnuUzuDTUWn+csd8YpNZ6QZJ5\nLclXa12f5Hnz/T5daAu5PcnKKe8F6264IsnfJEmt9cqM3Ym7x5T9K5OsX4S6eGCmftZ2ytiYzfxM\nrszYr8lYes6ptf5g4nWSI2L8lrRSyj5JvpHkE7XWz8RnsFNmjN/fxmdwm9SFcP3dJP8jSUopT0xy\n8eKWwzydmPH++FLKnhn7H4+vlVKOH9//K0nOneNclo4fzDJm/zfJU0op25VSVmXsppBLF6tANusr\npZQnjL9+ZsZ+7Wz8lqhSyh5Jvpbk9Frrx8Y3+wx2xBzj5zO4DepCW8g5SZ5VSvnu+PsTF7MY5u3s\njPUnTQToEzM2e33W+I0b/5X7e9NYeiZ60l6TGWM2vlLB+5J8O2M/oJ8x1x3TLJqJ8Xt5kg+UUjYk\nWZvkZbXWO43fknVGxtoD3lxKefP4tlOTvM9nsBNmG7//meQvfAa3LQO9npXQAACghS60hQAAQCcI\n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\n/BumcPDY+PronQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 121 }, { "cell_type": "code", "collapsed": false, "input": [ "data = [qts2a,qts2,qts4a,qts4]\n", "fig = plt.figure(figsize=(10, 10))\n", "plt.ylabel(\"Query time [s]\")\n", "sns.set_context(rc={\"figure.figsize\": (10, 10)})\n", "ax = sns.boxplot(data, names=[\"Two Servers (auto)\", \"Two Servers\", \"Four Servers (auto)\", \"Four Servers\"], \n", " color=\"pastel\", alpha=0.75, fliersize=0.0 );\n", "ax.semilogy()\n", "plt.scatter(np.repeat(1, qts2a.shape[0]),qts2a)\n", "plt.scatter(np.repeat(2, qts2.shape[0]),qts2)\n", "plt.scatter(np.repeat(3, qts4a.shape[0]),qts4a)\n", "plt.scatter(np.repeat(4, qts4.shape[0]),qts4)\n", "fig.savefig(\"solr-bench/QTimeBoxPlot.svg\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 146 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Faceting so far has been 20 threads. Currently collecting data for...\n", "\n", "* no-faceting for\n", " * individual servers \n", " * 2M and \n", " * 4M server configurations" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import re\n", "\n", "def loadSB2( file ):\n", " ins = open( file, \"r\" )\n", " qts = []\n", " nhs = []\n", " for line in ins:\n", " line = re.sub(\"FACETS-.+\\.QTime\",\"FACETS-QTime\",line)\n", " cols = line.split()\n", " if len(cols) > 1 and re.match(\".*QTime.*\",cols[0]) and not re.match(\".*-ALL.*\",cols[0]):\n", " qt = float(cols[1])/1000.0\n", " nf = int(cols[3])\n", " wc = float(cols[5])/1000.0\n", " qts.append(qt)\n", " nhs.append(nf)\n", " ins.close()\n", " return (np.array(qts), np.array(nhs))\n", "\n", "qtnf181, nfnf181 = loadSB2(\"solr-bench/testv3-no-facets-181-only.log\")\n", "qtnf182, nfnf182 = loadSB2(\"solr-bench/testv3-no-facets-182-only.log\")\n", "qtnf203, nfnf203 = loadSB2(\"solr-bench/testv3-no-facets-203-only.log\")\n", "qtnf215, nfnf215 = loadSB2(\"solr-bench/testv3-no-facets-215-only.log\")\n", "qtnf2m, nfnf2m = loadSB2(\"solr-bench/testv3-no-facets-2servers.log\")\n", "qtnf2m2, nfnf2m2 = loadSB2(\"solr-bench/testv3-no-facets-2servers-2.log\")\n", "qtnf4m, nfnf4m = loadSB2(\"solr-bench/testv3-no-facets-4servers.log\")\n", "qtaf4m, nfaf4m = loadSB2(\"solr-bench/testv3-all-facets-4servers-100threads.log\")\n", "qtaf2m_fcs, nfaf2m_fcs = loadSB2(\"solr-bench/testv3-all-facets-2servers-fcs.log\")\n", "\n", "\n", "fig = plt.figure(figsize=(12, 6))\n", "plt.scatter(np.repeat(1, qtnf181.shape[0]), qtnf181, label=\"181\");\n", "plt.scatter(np.repeat(2, qtnf182.shape[0]), qtnf182, label=\"182\");\n", "plt.scatter(np.repeat(3, qtnf203.shape[0]), qtnf203, label=\"203\");\n", "plt.scatter(np.repeat(4, qtnf215.shape[0]), qtnf215, label=\"215\");\n", "plt.scatter(np.repeat(5, qtnf2m.shape[0]), qtnf2m, label=\"2m\", color=\"red\");\n", "plt.scatter(np.repeat(5.1, qtnf2m2.shape[0]), qtnf2m2, label=\"2m2\", color=\"red\");\n", "plt.scatter(np.repeat(6, qtnf4m.shape[0]), qtnf4m, label=\"4m\", color=\"red\");\n", "plt.scatter(np.repeat(7, qtaf4m.shape[0]), qtaf4m, label=\"AF-4m\", color=\"green\");\n", "plt.scatter(np.repeat(8, qtaf2m_fcs.shape[0]), qtaf2m_fcs, label=\"AF-2m-FCS\", color=\"green\");\n", "plt.semilogy()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "qtaf181_1s_fcs, nfaf181_1s_fcs = loadSB2(\"solr-bench/testv3-all-facets-181-fcs.log\")\n", "qtaf181_1s, nfaf181_1s = loadSB2(\"solr-bench/testv3-all-facets-181-1shard.log\")\n", "qtaf181_2s, nfaf181_2s = loadSB2(\"solr-bench/testv3-all-facets-181-2s.log\")\n", "qtaf181_3s, nfaf181_3s = loadSB2(\"solr-bench/testv3-all-facets-181-3shards.log\")\n", "qtaf181_4s, nfaf181_4s = loadSB2(\"solr-bench/testv3-all-facets-181-4s-2.log\")\n", "qtaf181_6s, nfaf181_6s = loadSB2(\"solr-bench/testv3-all-facets-181-6shards.log\")\n", "qtaf182_6s, nfaf182_6s = loadSB2(\"solr-bench/testv3-all-facets-182-6shards.log\")\n", "qtaf182_4s, nfaf182_4s = loadSB2(\"solr-bench/testv3-all-facets-182-4s.log\")\n", "qtaf182_3s, nfaf182_3s = loadSB2(\"solr-bench/testv3-all-facets-182-3shards.log\")\n", "qtaf203_6s, nfaf203_6s = loadSB2(\"solr-bench/testv3-all-facets-203-6shards.log\")\n", "qtaf215_1x1, nfaf215_1x1 = loadSB2(\"solr-bench/testv3-all-facets-215-1by1.log\")\n", "qtaf215_6s, nfaf215_6s = loadSB2(\"solr-bench/testv3-all-facets-215-6shards.log\")\n", "\n", "qtaf181_6s2, nfaf181_6s2 = loadSB2(\"solr-bench/testv3-all-facets-181-6s-2.log\")\n", "qtaf182_6s2, nfaf182_6s2 = loadSB2(\"solr-bench/testv3-all-facets-182-6s-2.log\")\n", "qtaf203_6s2, nfaf203_6s2 = loadSB2(\"solr-bench/testv3-all-facets-203-6s-2.log\")\n", "qtaf215_6s2, nfaf215_6s2 = loadSB2(\"solr-bench/testv3-all-facets-215-6s-2.log\")\n", "\n", "fig = plt.figure(figsize=(12, 6))\n", "plt.scatter(np.repeat(1, qtnf181.shape[0]), qtnf181, label=\"181\");\n", "plt.scatter(np.repeat(3, qtnf4m.shape[0]), qtnf4m, label=\"4m\", color=\"red\");\n", "plt.scatter(np.repeat(4, qtaf4m.shape[0]), qtaf4m, label=\"AF-4m\", color=\"green\");\n", "plt.scatter(np.repeat(5, qtaf2m_fcs.shape[0]), qtaf2m_fcs, label=\"AF-2m-FCS\", color=\"green\");\n", "\n", "plt.scatter(np.repeat(6, qtaf181_1s_fcs.shape[0]), qtaf181_1s_fcs, label=\"AF-181-1s-FCS\", color=\"blue\");\n", "plt.scatter(np.repeat(6.5, qtaf181_1s.shape[0]), qtaf181_1s, label=\"AF-181-1s\", color=\"blue\");\n", "plt.scatter(np.repeat(7, qtaf181_2s.shape[0]), qtaf181_2s, label=\"AF-181-2s\", color=\"blue\");\n", "plt.scatter(np.repeat(7.5, qtaf181_3s.shape[0]), qtaf181_3s, label=\"AF-181-3s\", color=\"blue\");\n", "plt.scatter(np.repeat(8, qtaf181_4s.shape[0]), qtaf181_4s, label=\"AF-181-4s\", color=\"blue\");\n", "plt.scatter(np.repeat(8.5, qtaf181_6s.shape[0]), qtaf181_6s, label=\"AF-181-6s\", color=\"blue\");\n", "\n", "plt.scatter(np.repeat(9, qtaf182_3s.shape[0]), qtaf182_3s, label=\"AF-182-3s\", color=\"orange\");\n", "plt.scatter(np.repeat(9.5, qtaf182_4s.shape[0]), qtaf182_4s, label=\"AF-182-4s\", color=\"orange\");\n", "plt.scatter(np.repeat(10, qtaf182_6s.shape[0]), qtaf182_6s, label=\"AF-182-6s\", color=\"orange\");\n", "\n", "plt.scatter(np.repeat(12, qtaf203_6s.shape[0]), qtaf203_6s, label=\"AF-203-6s\", color=\"red\");\n", "\n", "plt.scatter(np.repeat(13, qtaf215_1x1.shape[0]), qtaf215_1x1, label=\"AF-215-1by1\", color=\"purple\");\n", "plt.scatter(np.repeat(14, qtaf215_6s.shape[0]), qtaf215_6s, label=\"AF-215-6s-1zero\", color=\"purple\");\n", "plt.scatter(np.repeat(15, qtaf215_6s2.shape[0]), qtaf215_6s2, label=\"AF-215-6s2\", color=\"purple\");\n", "\n", "#plt.semilogy()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\noC/Xx8OrHuLhVQ/Rl+tLu52y8jeCVMATzz5eUi1tMzIzS6opPdWSyY48srRaqgYS5qAk1cZg3+9d\nXFJNpcncvI76rhEvbLq6yNw8wRc2qnh9uT5uXbqejSvuZOOKO7l16fqaCs4V+CtbqhzHHjl6KkZS\nLW07n32ypJrSs2TJ6D8cSbWxeO650mpjsWdPabVU9SV8kUm1Mcgd/356jjywAkfPkaeTO/79Ezrn\nlFYV30gqt+0dP2bnlgMXlnZueZztHT9OsaPyMjRLBQwmvHueVEvbEQlTMZJqSs+FF/Zy+ukHQvLp\np/dx4YUTuzp6yy2jl9pPqtWazK83lFQbs5GX/ivxbYAqktlwY0k1qZr4W0Eq4InuhOkZCbW0zUyY\nipFUU22ZjCkfVTGNZDDhxoKk2hhkHvsSzV33DR83d91H5rEvTeicU1n9E0+UVFNtmdN+ErPaDrwb\nO6vtWOa0n5RiR+VVab8KpYry+9njSqqlrbNn9NueSTWl5ytfaWLbtgNXgbdta+QrX5nYagJf/vI+\nYORdeoNDtfFrbi6tNiY9nWR/eCHZH14IPRNfkaK/+aiSamOR2dlRUk2l6X3FaSXVVFsaM40suOGt\nzD43MPvcwIIb3kpjpnbe/TI0SwWc9tLRv+STamnr2tdVUk3pufHG0X84kmpj8R//0QSMnC9UN1Qb\nv6Qtsye0jXZPJy+5+yQyT91E5qmbeMndJ004ODftua+k2ljU7XuqpJpK07B79Ngl1VRb+nJ93H7B\nLezYENmxIXL7Bbd4I6A0VTz8m4dLqqVt3+CzJdWUnmeeGT0ZPqk2Ft/4xujQnVQbi6RdCieyc2H2\npx+gfmDE9tQD3WR/+oHxnxAmZXpG3cBvSqqpNHW//W1JNdUWbwSUJksuR2bVl8ms+vLE/ipPohN/\n9+SSalIxp5wyOtQl1cbiscdGh+6k2lj0JGyCl1QrVcPeR0qqjcVg44tKqklSORmalY5cjhlLF5Nd\n8UGyKz7IjKWLKzI4/+CpB0qqScWcemp/SbWx2Lu3tNpYzJhRWq1Udc/vLqk2JpOw6dBg/YtLqqk0\ngyM2NilUU22ZvSjQ3HLgJojmlmZmLwopdlRehmalItOxhuYtm4aPm7dsItOxJsWOkj3a9d8l1VR7\ncjlYtaqJVauayvJ67j/+Y/S0iaRa2n7nd0Zv/5dUK1Vdf8K0h4TamM6ZMPUoqTYmVbFsSPWof3L0\n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\n", "text": [ "" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(figsize=(12, 6))\n", "plt.xlim([1,1e10])\n", "plt.semilogx()\n", "plt.semilogy()\n", "plt.scatter(nfnf4m, qtnf4m, label=\"NF-4m\", color=\"green\");\n", "plt.scatter(nfnf2m, qtnf2m, label=\"NF-2m\", color=\"red\");\n", "plt.legend()\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAF5CAYAAACPy6x8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuYFOWd//3PwDQUYgNRZ5X8shwCSbmu4gmVQaJLsp5F\nEUQQZDO7yopciQZNRjc+iTmYREkUT8thcdwxiA8oMHhayLq/+ECAEWUBWWKsFRbR3UgWD8AIFswM\n8/zR554+VHdXd1V3v1/X5SXT01199z1V1d+663t/75quri4BAAAAyKyH1w0AAAAAygGBMwAAAOAA\ngTMAAADgAIEzAAAA4ACBMwAAAOAAgTMAAADgQK2bGzNN81xJ35JUI6nRsqz/dXP7AAAAgFfcHnHu\nLek7kl6RVO/ytgEAAADPuBo4W5a1UdJpkr4raZub2wYAAAC85DhVwzTNCyQ9YFnWWNM0e0iaJ2mE\npCOSbrEsa5dpmudJ2izpCkn3SbqjCG0GAAAASs7RiLNpmo2SFimUiiFJ4yX1sixrtKR7JD0Ufvx4\nSU9J+qWkJe42FQAAAPCO0xHnnZImSFoc/nmMpDWSZFnWJtM0R4b//Zqk19xuJAAAAOA1RyPOlmWt\nlNQR91BQ0sG4nzvD6RsAAABARcq3HN1BhYLniB6WZR3LdSNdXV1dNTU1eTYBAAAAcKzgoDPfwHmD\npHGSnjdNc5Sk7flspKamRvv2teXZhMpSVxekL8Loixj6Ioa+iKEvYuiLGPoihr6IoS9i6uqC2Z+U\nRa6Bc1f4/y2SLjFNc0P4578tuCUAAACAjzkOnC3Lek/S6PC/uyTdVqQ2AQAAAL7DhD4AAADAAQJn\nAAAAwAECZwAAAMABAmcAAADAAQJnAAAAwIF86zgDAAAACbZs2azvf/+7+vWvl+nP/uxkSdKCBU9o\n8OAhampaqFNOGajI4nf9+vXTz372y5Tb2br13/XTn/5QK1e+UrK2O0HgDAAAUMU6jnXI7rR1fOB4\nV7YXCPTSz3/+Yz3yyLyEx2tqajR37j8qEAhkfP2f/rRXy5YtUWdnpyvtcROBMwAAQJX69e//WY9t\neViftX+mUQNHa+GlT6l3z955b6+mpkbnnDNSUpdWrHhOEyfekPD7rq6u1C8MO3LkiB566AE1Nt6r\nm2++Kfr45MnjdcYZZ+qDD97Xueeep0OHPtPbb/9egwYN1g9+8JO825srAmcAAIAq9Kn9iR588+fa\nd/hPkqR/2f2SHvn3X+nu8+/Ne5uRwPiuu+7RjBnf1KhRoxN+f+ed34qmakydOl319WMSfj937hzd\neON0nXRSXcLje/d+qMcfX6gTTjhRV175DS1a9LRmzx6iSZOu1aFDn6lvX3dGy7MhcAYAAKhCn3z+\niT4+vC/psY9d2Xa/fv11++136f77f6gzzjgr+nhyqsb27du0aNF8SdK4cddp+/Zt+p//+W9J0sGD\nB/WjH92rH/3oZ+rff0A0Z7pPH0ODBw+RJB1/fF8dPXpUffu60uysCJwBAACq0KB+g3XOyedq85/e\nlCQdHwjq4j8f69r2L7zwa1q37jWtXv2yZs26PeVzRow4S48/vjD686WXXh7997XXXqYf/ehnkqTw\nILXnCJwBAACqUKBnQE9d/ox++eYDOtx+SJcOuVxXfnlcQdusqamJpmJI0h133KUtWzZHfpvr1hz8\nu7RqsiVpF1nXvn1tXr6/b9TVBUVfhNAXMfRFDH0RQ1/E0Bcx9EUMfRFDX8TU1QULjrhZAAUAAABw\ngMAZAAAAcIDAGQAAAHCAwBkAAABwgMAZAAAAcIDAGQAAAHCAOs4AAABwxZYtm/X9739Xv/71suhK\nfwsWPKHBg4eoqWmhTjllYLTOc79+/fSzn/0y4fV79+7VL37xEx071qmuri41Nt6rQYMGl/xzpEPg\nDAAAUM06OiTblo4/3pXNBQK99POf/1iPPDIv4fGamppuS24na2paoEmTJmvMmIv1xhuva+HCJ7oF\n114icAYAAKhSxq//WX0ee1g1n32mjlGjdXDhU1Lv3nlvr6amRuecM1JSl1aseE4TJ96Q8PtsC+99\n61vfUd++oQC+o6NDvXsbkqTJk8frjDPO1AcfvK9zzz1Phw59prff/r0GDRqsH/zgJ3m3N1cEzgAA\nAFWo5tNPdNyDP1fPfX+SJPX8l5d03CO/0uG77817m5HA+K677tGMGd/UqFGjE35/553fiqZqTJ06\nXfX1YxJ+37//AEnS+++/p3nzHtUvfvGQJGnv3g/1+OMLdcIJJ+rKK7+hRYue1uzZQzRp0rU6dOiz\naLBdbATOAAAAVajHJ5+ox8f7Eh6r+eRjV7bdr19/3X77Xbr//h/qjDPOij6enKqxffs2LVo0X5I0\nderfqL7+Qm3ZslkPP/ygfvCDn+rP/3yQpFBAHcmZ7tPH0ODBQyRJxx/fV0ePHlXfvq40OysCZwAA\ngCrUOWiw2s85V702vylJOnZ8UO0Xj3Vt+xde+DWtW/eaVq9+WbNm3Z7yOSNGnKXHH18Y/XnLls16\n9NGH9NBDj+vkk0+JPh4epPYcgTMAAEA1CgR08Kln1PeXD6jm8CEdvfRyHb1yXEGbrKmpiaZiSNId\nd9ylLVs2R36b9fWPPfawOjs7dP/990mSBg8eou9+9x+SXutdFF2TLUm7yLr27Wvz8v19o64uKPoi\nhL6IoS9i6IsY+iKGvoihL2Loixj6IqauLlhwxM0CKAAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIAD\nBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAME\nzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTO\nAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4A\nAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAA\nAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAA\ngAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACA\nAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIAD\nBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAAwTOAAAAgAME\nzgAAAIADBM4AAACAAwTOAAAAgAMEzgAAAIADBM4AAACAA7Vubsw0zW9ImizpOElzLMva7ub2AQAA\nAK+4PeLcx7Ksv5f0K0mXurxtAAAAwDOuBs6WZb1smmZfSbdLanZz2wAAAICXHKdqmKZ5gaQHLMsa\na5pmD0nzJI2QdETSLZZl7TJN8yRJcyT90LKsj4rSYgAAAMADjkacTdNslLRIUu/wQ+Ml9bIsa7Sk\neyQ9FH78IUknS/qFaZoTXW4rAAAA4BmnI847JU2QtDj88xhJayTJsqxNpmmODP/7m663EAAAAPAB\nRyPOlmWtlNQR91BQ0sG4nzvD6RuAb9gdtpp3NKl5R5PsDtvr5gAAgDKXbzm6gwoFzxE9LMs6ls+G\n6uqC2Z9UJeiLmEL7wu6wNemZcVq7Z60k6ZU9q7TmpjUyag03mldS7Bcx9EUMfRFDX8TQFzH0RQx9\n4Z58A+cNksZJet40zVGS8q7XvG9fW74vrSh1dUH6IsyNvmje0RQNmiVp7Z61evx3C9Rw+s2FNq+k\n2C9i6IsY+iKGvoihL2Loixj6IsaNC4hcA+eu8P9bJF1imuaG8M9/W3BLAAAAAB9zHDhblvWepNHh\nf3dJuq1IbQIKNuXUaWp5d4VaP1wvSaofOEZTTp3mcasAAEA5c3XJbcAvjFpDy8at1NJ3lkgKBdLl\nmN8MAAD8g8AZFcuoNcoupxnlx+6wuUADgCpB4AwAebI7bE1+aUI0Jajl3RVaNm4lwTMAVChqLwNA\nnpa+syQaNEtS64fro6PPAIDKQ+AMAAAAOEDgDAB5mnLqNNUPHBP9meotAFDZyHEGgDxRvQVFYdsy\nlob2KXvKNMlgnwL8gsAZAApA9Ra4yrbVf/IE9WoN5c73blmhA8tWEjwDPkGqBgAAPmEsXRINmiWp\nV+v66OgzAO8x4gyg6lGLGQDgBIEzgKpGLWb4iT1lmnq3rIiOOh+tHxPKcwbgCwTOAKpaulrM5C3D\nE4ahA8tWMjkQ8CkCZwAA/MQwZDdw4Qb4EZMDAfiK3WGreUeTmnc0ye6wi/5+1GIGADjFiDMA3/Ai\n35hazAAApwicAfiGV/nG1GIGADhBqgYAAADgAIEzAN8g3xgA4GekagBlqhIX7SDfGADgZwTOQBmq\n5EU7yDcGAPgVqRpAGUo3iQ4AABQPgTMAAADgAIEzUIaYRAcAQOmR4wyUISbRAQBQegTOQJliEh0A\nAKVFqgYAAADgACPOAFxTibWlAQCIIHAG4IpKri0NAIBEqgYAl1BbGgBQ6QicAQAAAAcInAG4gtrS\nAIBKR44zAFdQWxoAUOkInAG4htrSAIBKRuAMoKQoWQcAKFcEzgBKhpJ1AIByxuRAACVDyToAQDkj\ncAYAAAAcIHAGUDKUrKsedoet5h1Nat7RJLvD9ro5AOAKcpwBlIyTknVZJw/atoylod/bU6ZJBvnR\nfkMuO4BKReAMoKQylazLGnDZtvpPnqBeraHf925ZoQPLVhI8+0y6XHZKFZYYF5mA60jVAOAb2SYP\nGkuXRINmSerVuj4aGACIE77IDDbOVrBxtvpPniDZpMwAhSJwBgC4yq+57NWUd81FJlAcpGoA8I0p\np05Ty7sroqPOyQGXPWWaeresiAYER+vHhG5Bw1f8uPw6edcA3EDgDMA3sgZchqEDy1aSt1kG/Lb8\nenIa0Jb31+sPc2ap/osXVuR+xEUmUBwEzgB8JWvAZRiyG/wTkJWlKp801rtdWv2MNHbPcknLK3OS\nKReZQFEQOANANanSyiTxaUAN26Sxe2K/i+T/VtwFGReZgOuYHFgmqmlSC+Arti2juUlGc1NFVCWo\n1kljkTSgORfN1YSvXO91cwCUKUacy0BRJ7VU+S1bIKMqHZ2tVNE0oOHTdHTTXvJ/AeSMEecykK22\nbd6o84lMKmykNR+VODprT5mmo/WxUnFVGTSG83/b5sxV25y5XAwBcIwR5yqWLiggJw6MtFYwJo2F\nkP8LIA+MOJcBvy4mgMpViSOt+ajY0dlw0Gg33FydQTMA5IkR5zJQrMUEqPMJZMHobNmwO2xfLbgC\noDIROJeJoiwmQFDgS/EBwLe/NtObNnBRFcMtfd9jVcAKw6R1+BiBc7UjKPCV5ADglT2rtPiy50sf\nAHBRhTKSbgK1n1YuhEPMr4DPkeMMpOBV3ezkAGDtnrXuVFDJR455sNQaB1Ao5lfA7xhxBpJw2zd3\nbvYZuarIVfyqgFJ4AvWQiaFSiuKOCQD3MOIMJCla3WwHkiuoXDz44rKooOJWn0UC8MZ1s9W4brYm\nvzSB0WtkFb8q4JyL5mrZJc/q5GlTqVFfhiq2kg0qBiPOgI8kV1D59tdmqu3Tdo9bVTrkqlaeUt1B\niJ9AbTQ3UaO+XDG/Aj5H4AwkSXnbt4SjvgkBQK2hNvk/cPa6z+BPpD0hL0xah48ROJcp8kCLp1h1\nsyuZW31WDgE4x55zXt1BoJwigGIhcC5DjOIUX1HqZlc4N/rM64uWbEGxk2OPwNoHuN0PoEgInMsQ\neaBwhU8XGfDqosVJUJzt2OOiNpGndxC43Q+gCAicAS94HbSyyEA3blyQclGbyOs7CADgNsrRlaHk\nkmV+zANFBuGg1ctSWSwykJ98jr3WP26o6kVhIncQGk6/maAZQNljxLkMMYpT3tIFrSW9rdyeolJH\nqseqiJO0gmzHXvI2+vXqp5ady0P/VXnaBgBUAgLnMsXkNcBdTi9IMx178dto/eMGtexcHv1dpaZt\nMBkSQDUhcAZKzBelsgIBZ49VGbcqg0S2ER84Rzip3FEugSiTIQFUGwJnoNR8UCrLF8G7D7kZtKZK\n/Rg/fGLGQLPcAlEmQwKoNgTOSOR1tYdq4XWpLB8E737jdtCaKvUjW6BJIAoA/kbgjBhKlHkv+cJF\nweK9l9fBu88UI2it9LkI5bDSIwC4icAZUb6o9lDNUly46Levetwob5RTnm8usgWa5RaIUuEHQLUh\ncC4F0h/gQKoLFzU3y752opa+s0Ttx0Ll4gI9AmUfoGQKjNOlTBR19F2lCVqzBZrlGIhW+qg6AMQj\ncC62Mkp/8PWEsSq9+GjvbE8IIiP8Pmksk2y5xOlSJr438DtFbVepgtZsgSaBaBwvj/sqPecAyIzA\nucjKKv3BrxPGyujioxCpLlyePlNq/b/ruz23nCeN+W0CXPLotx/7NLmNxR599wUvj/sqOecAyB2B\nMxL5cMJYWV18FCLFhUvn3hVFfctCconzfW0k5STdY+OHT9T9r9+ng0cPSgqtvjd++ETH7cpFQZU0\nSjQimaqNv/27ys999/K4r5pzDoCc9fC6AZXOnjJNR+vHRH/2VfoDise2ZTQ3yWhukmzb+evCFy52\nw82SYajh7AbVDxzT7Wlu5N9GArLGdbPVuG62Jr80QXaHs7YW8tpsVu1cEQ2aJeng0YNatbM4FxCp\nRr/v+O2s7J8lPCIZbJytYONs9Z88Ibe/c4FtbN7aXJT3ykm++zgAlDFGnIvNr+kPZSRt7rVfcxBd\nvM0bn3ebbXJgriPAhaRMFPLaQI/uKxSmeswrLTuXa++hvRlHnqt+RLIEqQxezrnw9XwPAJ4icC4F\nH6Y/lJVUFx+Sb3MQ3Q6qnEwWS76dP/+tJ3TLGbdq+mkNvptAmG9JNrvDVvOOpuhz3Phcye8V4XXe\ndbxU/dFwdoPaPu2e8lIqJblw8HLQgQEPAGkQOKM8JF18GM1N1T3ilyR5BHj3gV26d32jXt71YtqR\n00LKrxXy2nxKsknS5c9crrV71kpyr6pI5L3u+O0stexc7vh1pRyRTNdfbfIucFZ7ivdO9VihvBx0\ncPO9/Xp3DEDOCJwBl9lTpinQ8pyM1tbQz/X1nt3mzTRyWkj5tVxemyqFxElJtsgS1ZE0lUjQnO1z\n5cqoNfTo1+dp76G9zi8ESjwiSYm6MkaFDqCiEDijLPk5B9GulSZNq9GpJ4R+fueKGi2uldz4mkyX\nx5wu5SCbQgKyfFJInI4UJ79uaP9hebXRqbwuIqo5BSuQIic91WMgHx6oMATOKE8+zkFc+s4Srf1o\no9aeF37go40pR0dzncyXKQiNBH6L327Wk9sXavfBXZK8X7I530mEqVJPhp8wXDs/2SmpeKv6FX1U\nt0Ju2RftwrVC+gdA5SJwRvkq4xG/fEZiswWhRq2hGSNmavppDWW1ZLNTt59/u+zDnZLK9HNV0i37\nYly4VlL/xPHz3TEAuSNwBlzmZOJcMVfPc5pCUYrgOt9JhKleN+PcGZ5WkihUxd2yd/nCteL6J8LH\nd8cA5I7AGXBZIZPuMimkkkW8glbLS7nB8O315KoKgYA0ZVq3OtRL31mStU98WUkCyFcZ3x0DkKim\nq6vLy/fv2revzcv39426uqDoi5Bq6Ivk4LV+4JiUwWtyX7gxUty8o0mN62YnPDbnorn5jXYn3V5P\ndrR+jA4sWym7Vo4+byZlv18k9VWkb/IZfSz7vkglz/6pyL7IE30RQ1/E0BcxdXXBmkK3wYgz/MW2\npQVLZLTZFX1LM99Rab+VJUu+vZ4scru9eaSKlppSNrhlnxn9A6AMEDjDEylHTsMjTmpdr6AqZ3JQ\nOl4FwW6lfHgqx+oLdoet57c36/Q1b2jkKeerc2qDN/sVt+wzo38A+ByBM0ouXY7tgEqdHOQzbuZg\nJy/2kixSQWBKrXIP1pODYwWjj+dSfcHusDV95Xjd98uNGrtHkpbLfqFFbcteqNiLMgBAcRA4o+TS\nVZSY6WGbqo1ro92GoXn3Xaf/fLxVtZ2xh080TtQdo+6OjuwaUm7BeorgWL99NfSWOV5gLX1niU5d\nHQmaw81ubVV7sS/KqEkMABWHwDlHpSrjVY2od+ouR/tqrsFdiud39gpo4XnJT/xYx58fUEPc9nIJ\n1lMFx2puliaWyf5QoTWJAaDaETjnwPUyXlVq/PCJmr/tie6r29WGJgfVvbJCbX6YHFjsEcM0248P\neL/9tZl5tcPRvpohuMuUg578/CmnTtP8t57Q7gO7XOiU7HK9wJpy6jRNv+J5vbYjNups19cXflGW\n4e+Sd01iRqkBwNcInHNQzEUrqoXdYeubq6dGg+ah/Yfp6SuejQV0hiHNnCnb69I5xR4xTNp+n/lP\n6PNbbtX+G6do8qtTo/vZqztX6sV/7ojmEDtth5N9NV1wt/+mac5z0Bc3ywgE1Nr+d7q4z5OyPt8t\nKXwxNGSijOam0MfNMQjsFhxfMFq92ttlNDfJHj9RR66+RsdOOUXtI8+XPb0h47aNWkOLJ6zS88Ob\n1e7W5MBi7B+MUqPYuDBDIdh/JBE4Ix8FHDzJAd3uA7u0aueK7Bcfqd6ziAdxxhFDF943efu1u3cp\neG+jPn1uobZcvUsKhB7/8gu/kxE3764UEyaT/0Zb3l+vP8yZpYv2dH+u8eRCBXbvUlDStvp6zbvv\nNnX2CmjKkIk6edrU/IPA+NJk7e3q3bJcuv12BSX1/ckP1eOz0IVVj717Q4Fzts3VGpp+zkzpnJnq\nzPpsB83LMqKcT9pRxa6cB3/gwgyFYP+J6uF1A8rJlFOnqX7gmOjPZVnGq1DhgyfYOFvBxtmh8nG2\nXfr33L+/9O1I1ZZJ42UsWhAaWXXh/Qe9tUsN2wpvppN91Z4yTUfrY8+JBHc9j7br1jelW9+U+n0u\nrX5GuvSR5TJalutYv37R53eeeJICu2PpGUZrq2ZsD6jh9Js1YPmKlEFgTiKlydrb1WvzG9GHI0Fz\n3tvNl23LaG4K/a2TV0mUoisjSooG/m1z5qptzlz3vmDCbdCCBaXZ370U39+V/llLIN2FGeAE+08M\nI845yKWMV6VOIix0VCyfGsKp3jN4951FHZ1LN2LYrS2bNqrXpo2ScrsCT95+vC/3HyYpFJD+17Vf\nk/1JLFXD6YRJR/tqqgUnJM36cUt0lHt2q2R+EntJj4MHZV9znXr+x/aEoLmYjJblmZ+QIoh1XfKq\ndqPqZV9wgYxNmyRJrw2Wfnz8Ki3uaEhIO8plf8w6Sp3Uhv71Syp3xIfRLQA+ReCcIyeVAZhEmJ6b\nNYSLJpyKceTqa3Tk6mukQMBRSkZOwXskaF3cHE13kELB0o33P6ua91ZICk0ObLu8Te15pIY42ldr\npcUj2kMLgzzbrkCnEmoyxwfNET33vJcyaD56wWgpLg/ZrQopnYOHKPDW1rxe65ZuF0yvt+rfvnWd\nlp8U+rn5LOnIRxsLm/OQZeW8akrlqKbPWipULcpdpQ6A5YP9J4bAuQgqeRKhGwdPrjWEU71n24MP\nq8feve4fxMkji/VjEka6Mo0U58wwZM+YKXt6Q0KwZBix/jFqDbUZ7TkHDE5O+KkWBmkfOrTb89qH\nDksIlFMFsfY116nH/+5V8N5GSeERwqeflbFqRfRz5Tta2ParR9X1b/+iPoePpH5CIJDXdqPyzFk/\nVtszRRm+ArFyHoqFJc1zwgBYEvafKAJn5HZV7cXBk+Y9i9GOrCNdyZPWXmpRr9dzS6Po/qbuBktO\nT/ipFgYJ7N6tjqHDVBs3An7g6WcV/O4dMl5sSfl+R+vHqP2C+mjQLIX7bdUKdz7XgAH6p6U/1En/\ncK96HJO+9Jn0tQ9i713QBZPDlIBUF29/cfvDqn91b8mWLq+mEZ9q+qwlxYWZY5U8AJY39h9JBM5F\nkU8er1fyuqr24uBJ9Z5eHcRx75s8WuyHK/BCT/if33JrdBQ3+pl69uz2vPYzz5Y97W+iud/FNGHk\nDE3/7r9q7Z616t0u/WT3MN0y4taCy8o5TglIcaFmGCVOO4prQzBo6MBVE32xvxUFo1sAfKoogbNp\nml+XdKNlWTMyPnHBAqkCT/5lkccbxlV1opxHusr4CjztwiAp6iK3jzy/2yQ9+4YbCyq/lguj1tCa\nm9bo8d8tiLa9s9THVIq/tWtLl+fYhmBdUPK61nkBHN3lKuNjq+Qi6UZBoyK/U71QTgNgKC3XA2fT\nNIdJOktS9iP3ttsqdmZ4yb9QK5nDHNRCJnIkvHbJsxqwvPDcXK84PeHnsjCIPWmK+j5wv3q0HZQk\nHQv2kz1pStzGij9CWIxjipSA0iN31GXVVG2lhMppAKwUmCgZU9PV1VWUDZumudiyrOmZ372mS5La\n5syt+pGFurqg9nkwgpT8JVY/cIznX2IJfZFlsl5EIZ/Dj30Qke9+4fZJzmhuUrBxdsJjCcdtCVaU\nKtoxUoarYXl1vnBD844mNa5L3JfmXDQ374uicu4LN2Q9NqtUte8X8QrtCz9/R+aqri5YU+g2chpx\nNk3zAkkPWJY11jTNHpLmSRoh6YikWyzLKk1hV7jGD1fVyUGeFIy1z2EOaiEpJ5WYrlLSOx7lXnOX\nlAAASKsSvyML4XjlQNM0GyUtktQ7/NB4Sb0syxot6R5JD+XTAG6NlkCWFbgiQVbD6Td7EjRPfmmC\nGtfNVuO62Zr80gTZHXFtLObiFuF+OfPFDepdzDU08lkBzWcrxKVbZVBiRSnkhhVY3ZXp2ATgvlxG\nnHdKmiBpcfjnMZLWSJJlWZtM0xwZ/+SsaRqSNH9+Zc8M94N8RwNLdPs61ZVs89ZmTRwyTbJt9X4p\nsQTa0QtGp/xSyHkiR1y/XCpp41f7afSkgzoScPmLPJ/+92POIlUO4BI/3OWqKNVUbaUEut8BVdXv\nq0yUTOQ4cLYsa6VpmkPiHgpKOhj3c6dpmj0syzrm+N1nzizrmeHlIK8VuHxy691YuiRaIzniyDXj\nU7Yj1y8SRV0YAAAgAElEQVTj5H455z8P6sVD1+utay509eSYT//7dtW0NCkNrk6wK8N844hKnjzj\nes48k6fdVSHVVryWnMu78t3n1NVVo017N0qq3omsXOwmKqSqxkHFJ6NKuQXNYXV1wexPqhJF6Ytg\n9507GDRCJ9h0FiyRkgK3uldWhC50XPbtr83UK3tWae2etZKkiwdfrIazG0IHZaq2nxDM0Pagvjfw\nO87eOMW2LzW/oUvHuvwZ8+n/fF7jqaD021el5mZJUq+GBtXlE/DatjRpnLQ2tC8EX1klrVmTEDz7\n9Xxhd9ia9My46H78yp5VWnPTmqJ+uZSqL7z4bLny637hhbLoC9uOni/U0FC0C+Rc+2LBm4l3QF//\nMHHgpvXD9Xrlv1do5nnufxcWW+H7RQ7frxWukMB5g6Rxkp43TXOUpO35bIRZryFFmwF81UT1r1+S\nWJXiqokZRyWMNlvJh1hbmy3bYftyHZ1afNnz3Z6/b19b+rZ/sK/wUck8+iUvad7H/nBf+j4qVdvc\nNjE8ytzWHvovR0Zzk4LhoFmStHat2h5fEB3l9vMs+eYdTdHAUpLW7lmrx3+3wPmoarqRdttWz2eb\ntXnvG9px+fmaNCJ0Uel6X2QY6Y//bL3bpVOXr9W6t6br7Dvn5R/wuHhnwc/7RamVqi8KugORXCnp\n18VJRcunL9o+yz6fpO0zu+z2N46RGDcuLPMJnCP161okXWKa5obwz39bcGvgvjxyUwu59Z5Pjda0\nt21TtV1yJ42kVDm7Kd7HrlXmPqqwnMVKTmFwRbrUKEnBydfKaG3VpZICLcs1/XurtHjCKqnbpW0R\n3j9pn+vdLq1+RuHFcpbr6Ka9jvL1ux1jPkkFQ34KrcPt21Q0dc/lHTWwPiFVo9pzexGSU+BsWdZ7\nkkaH/90l6bYitAluy7XcVgFBpetla5LabjQ3uXfSLVUZsqT3WbqjKXsfVUjOYi5fsuW8GEkhk2cy\nVSUxWmO3isfukZat3qilpy1x9ZZptkAm8tlGvLg+usJkqud1kyZA9nPghOwquTRZqlxeicmBSFSU\nJbdRAVwIKnu3Sw3bpDP3b5CGl9dEL7gjpy/ZMq7c4fnkmSJOqox8tj/8YZakxGXXA60b0r5f2guC\nVCUmi1l2Er5S7AvkyB2u4PGGrvrSxJyPw1R3QCvhogDuIXBGjAtfvpHRqS3vr8/9tq6TJpbxqGRE\nxZX2cTNoK+PFSPKtFJFpnw60PBcddbZOkP7rr0fp3uR9pcDUByfHlFFr6Ow75+nopr0JwbDRslw9\n9rpzbKM8ZDp/OUrLKuIFcvcV7pZUZRUMFFfRltx2qIuE9RDPk/cdLm3taFMdtv4wZ5YufSRxdMrp\nMrBZ+8LDkmVu5es63Y7n+0U2WfYbN5dq9X1fFCLdPr1/vwZcdrECu3eHfldfr7ZlL6juz+uifeHK\nkstOjynbVvCOWTJaHBzbafYNY+kSV5eIruj9IkdeTg70w7LMbi/nXik4RmJKvuQ2KpebeYdGraH6\nL16o5Nu6rvFoVLLQSTHxKqWObbb9xvMUhnKRZp82Vq2IBs1SKOe5fekS6Xsul4VyekwZhtrrL+wW\nOKd7bqqRxUq4a1TtUp2/Kjn3GYjneMltIBf7r5+o988cFv25Er4c030xIDMvl3SvBqVecjmn9wsH\n5HbDzbFR7HBA3TZnrtrmzCXNA65hOXeUAiPOkORu7rDdYWvyq1O15epdaviS9OX+w3Tj/c/K4Mux\nvNi2jMXNCmx+Q+0jz5c9vaFbgMPooUvSpEqk69+EYnSlnlTpxvuVcS47UvPD3I34O1z5Tg4EsiHH\n2QVu5L36IgfJpdzhQvPMUvWFH2oBe5HD59l+Ydvqf8O1CUueH71gtA48v6r7flGinPOS9IUX+fPZ\n5hekaJMvzhc+QV/EZOqLUpxD/XCejmC/iKEvYshx9gE3814958YokG3rzBc36NZ3peazpCOBwpvl\nlz4uu3zdAoJAY+mShKBZknpt2pg6773MRw8jX/Y9j7Zr1o9bolUsSrUwR9b5BcXuX7cvFjycvIvU\nin0O9VPADBQbgXOBmBARx7bVf9J4Xbppoy6VdON/SJdNl84ZVNgtOz/1cdlM6mN1NkfiA4pb35SM\nuGuFSlyYo1uA0+HSSpzRN2C/86NinkPjj6He7VLXk0/olhG3qnNqgyRxEYWKQ+Dsc/GjYQ3bpECP\nQElPQLmMJBiLm9Vr08bozxe/L7184DqZ4xYyAlFihVZJsadMU++Vz3VL1fBV/nKeI5vx+3T7sfaE\ngKKU7Yi+PCmP+f0zh2n5iHZN6rBdPW6SRx1feft5vfxvJ7u6il/JVwW0bbX/Y7O27lynHZefr0kj\nGhz1WVFHSNPtD7nuJ2Uych8JymNLsu+Snm3U0ZZVUk1X9BzCRRQqBYFzgYo5ISLyRRdZTOSE8HK3\npToB7bf367LlY7X74C5J2W/vBTa/0e2xMf/TU20Ffin5YdJJ3srky68bw9CB517IOjnQTTkFMylG\nNv+05FktfW9F4uuT+t+uVULweKJxUnSTzWdJk3couqy0owB2/3594bKxqt29K9qOnI/N8GS7ns82\n68ntC/XDobt05PVGLd/zYvrjzbZlLFqgwOY3dPics9V8XkCdvQKxz71/v/o03qH3D76nV79zvSaM\nnJEw6ti7Xbrvlxt1/J7um05YxS/H/bf9yOFuj9VsXCfD4eu7fcZM723bCk6+VoHWVl0qKdCyXNO/\nt0qLJ6zKuO/YH+/V29NH64uff6RZV6c/r+UVXKcbcVeOI/suj9yX4hzasE2JS7LHDaJIlXkHB9WJ\nwLlAxcx7jXzR3Zp8QirBCcjusHXZiljQLGW/vdc+8vxu9V3bR55fcFvKLrc4wsPb1q5UuzAM2TNm\nyp4xswgtTJQpBzPVErqpRjYXNJ6jn5/+kaTQaOrKT69S8KmnFIgLahffd03CCPPH9kcyehqyO20d\nCUg//t5onXbgKj39+6eyB7C2rQFxQXOkHd2OTSfBp2Go6fyA7rYdHG+2LU28SsHf/S700pblOndQ\nKC2q5d0VWjx6vr446jz1OWTrNEkDN2zV5Ade0l+dMSG6ieQgJ/UfJcf917b12XNP6oS4hz7tLX1h\nVYu0qsXZ/h/pq/Z29X5xVTT4SvVaY+mSaD66FPo8y1Zv1NLTMqQg7N+vk0aO0GWHbEnSlTulId/p\n3s/55gSnXWY8/O/kx9Odw90euS/mOTQSlEsF3rkBygSBswvKJu81B0vfWaLdB3Zlf2Ice3qDer/U\nEr01d3RUfWiU0gXl2Mclv22d8OYlLlGWJ7vD1vPbm3Xc0v9XI/Zt1ZbwhNJI0Djl1Gmpl9BNsa2P\nPw8FzZHR1BP2dB/xOn3NKdKApDZ02rpu+PWq/+KFmnLqNP36nSW6uz17AGssXRINyhMkjdi6ffFk\nLF0ihYPmiIvfDwXDCwPr9R9/M0rDwoGhJH3hiPTNJ1/XnkcnqH7gGLV+uF61nRneIBCIvk+uwV7d\nf+xOeOwLR2L/zrr/J/VVPLeOneDdd8pI6pt5L0t/vCzxeX6aV+GWYp1DI0H584Ob9f5/L9Sgt0LH\nxNELRiekalCqEpWCBVB8LFLMvfks6bXBsce9OgEN7Tcs8+298O396MIGz73gy2CtaqRafMJH7A5b\n01eO19m3Nmpm81YteCWUI9k7HHe2H2tPG8AkL8Lx2uBQqoWUeTR15Cnna2j/Yd0er//ihUVZoCXT\nCGQytxZvOHT0UMrHAz0CWjZupeZcNFfjh1+X8jnFPre0H2tP+7vkvsrGnjJNdn199OfXBkvvXDE6\n5z47qc9J7qXXpVkcJtdFakq9qE2hjFpD08+ZqT4vtcbO/8+vSvw+IL8ZFYIRZx+Lv7229WvtOrOE\nkwOTc+KG9h+m30x8LXtgUealydzE4iCZLX1niU5dvTEhyB27Jzxyel6WF8eNqLf+cYOu6bs8a+nD\no/Vj1Dm1Qb/RlITc/eQA1Wk+qD1lmvrMfyIhVUNSdMQ2V05vp9tTpin40sqEUee1g0IXDkP7D9Os\nq3fpyp2x0d5Pe0tP3zJKTeHtNZx+s4zNktSSuN3rrlfbo/OyLr6STvLzf//VE/WR/bEufj/0+9cG\nS1vPkqbn0Tcp39sw1LbsBfV8caleC08OXJxlcmDbgw+r1//9V/U4eFCS9HlfQ6ct3tjtNXnnBGe4\n05PTHSCX7hiVvExcivM/3weoNCyA4hOeFihPt2qZR7U5K6pYe4GTA0vZF6X+ezfvaNKuh2ZrwSuJ\nj8+8KhQ4z7lobopUje6LziTno5p9hmpLy8k67vXXJUkdQ4fp81tuTZjcmO2zOu6L/fs14LKx0ZSN\nVIuXZFzcJE91wYDaHn682+TA8cMn6purp+r3/7Ve816W+vbqq533fU+Tz5+V+BmctquAShCLRrTr\n+79rVMO20K+az5J++o0MCyElt2lUvY6Mu04KZB4syPkY2b9fwbvvlBQKpDVgQMqnlWNt4vi+8GLB\nJj+pqO+RAtEXMW4sgELg7BOerhBXhC/26Obz+PLhII8pVV948SUbSdW475exUefXBktX3BSq/Z1p\ncmCqbSXXJy5ZfneKyh0rNy/SJY8s16B+Q/T5Tx+UsfoVV9viygpxRa74knafyvS3yaNNfjtf5HPO\ncytIrwsG1Pb4AkmhC5e7Xm9M+H0uK7iWO7/tF16iL2IInCtIXjt2li8ZJydjo7lJwcbE5bHb5sxN\ne3stlxN8vsEYB3lMQX2RQxBS6DLp+YpMDjx9zRs6s+5sLTk3NnK6amdiaTm39ouM+3C4z9qPtav5\nLIVKvA2ZqAHLQ23J1o92h62bl12jZfe8Hk2V6OzXT59s3pF2ZNNx2+Lk0xeFXly4EhAmLbhytH5M\n6jKCOfDT+SKfc55rF622rbrpk6S1ayWFyil+9epdCSlMBM7Vib6IYcntapZltn4hS6y2H2tX844m\nSYlfZLlusxJnppeNpP3DmP+E7KR0BT+ITCrSOaGSd9OVfj+Tgs42atvq+fQi7X1tuf542hCZdz4q\n4/hQ0Jq87RX/+byuGT5eRofU8GZ7Qvm6swdL46dIY5b/g/58V6gSQ3K96OQAf+k7S/TNJ19PqCbR\n8+BBBe++U20Ln8rc7PAI/KmrQ9VALrnoMb1041oNMLIH3Fm7pMPWDS9dq9c/DFU4ePntpVr9TE00\nnSXQ8pzalr0gu1Ypg+Pk18/b9pj+9frsbYvkVEcC6DNf3KBLkyZLPnvvxbrHDFXjeN5apvFfmaBA\nj0D6IDr5gtAOyGhuiv3s4d2yZ7ct0ogX12uEQqkpTs55bp0njaVLokGzJA16a5d+8pfDdPdXU+fy\no4TKtZ4/UiJwLlPZSkU5PRknT+ix6+s14fhVWrsu9OUdHxwTCPuDozsJSftHYPcuBe5tVO+XX0yZ\nijPl1Gla+e5z0cBoaL+haj/WLtvl1esyiXyu1j9u6Laf3fHbWXp28uK0r4l8BqNDCk4aJ2PTJp0g\n6bTfbtXWNf9XJ/3rDskwdMdvZyVse9Pejdr2wcaEBYYixu4JlSqr3xUrX9ardb2e/X8u1j1fDQV6\n979+nw4eDU00e/CNn2nUKaN1Y4rP9l8HdumVHU0ZA7Dntzcnpq3s2K1xNRfr1Zs2Ffw3WPx2c/Rv\nK0l/sXqTjns99nujtVUHFi/S5JNWR/vnH7c+pjP/7CxdMLBe7Z3tCa9/7+BujVpytu46725NPy3z\nhLyEZc3flS5N+v3ug7ESdm/+6XW9+adQw1JemCcPGKx8TgrURmtau1UrPdUqiys/G59xcrb92X5d\n/O2f6u7wXNHZrdL5MwpqRsFuGXGras4PDTmXS552xWEZ+opD4FztkmZvLxrRrrVxeXGFBMdlveKf\nn8SNVuy/fqImvzo1rzsJUvgC66lFsmd9u9vvurpid7B2H9yte9c36uVdSYt/FGnkJDlQSdayc7ku\nf2afFl/2fMY7IC9/eo2MTZsSXnv2zoNa/cgd+ulf7ku5fUeLgcTZfSAW6EWCZim0mMor772obeP7\n6sqdh6Kjzm19eqr+vK06uG5rxr/X6Wve6FZh5K/W7tbSkdmPv2wXU5v3dl/VM1nLu8vV2r41+vOe\ntt3a07ZbL+5q0Qm9T+z2/E+OfJx6H0kSf8GdvDrj+qG1aj6rI+XrUp17ug0YxC0JL7lX7znVKouR\nuuDpAp8/PHanLo27yDI/kbY21Spw68SM7+XWedKeMk3BV1ZFR50jVWQaCNA85Wk9fxQFdZzLVLY6\nnznVhI2r99vZK30prVzrzEbKa825aK7mXDTX1zO67Q5bzTua1LyjSXaHnf0FpRIerQg2zlawcba6\nrhurLe93H/Xv9rKk/SNe3wd+Ku3fn/DY0neWaNPejd2em7D9pLb0nzwhtIqdk4+RpX+T72aksnbP\n2oTPmuoOSLoAcc/B97JuP9lrg6VZVyfWUI+vF53O/wQO6duPXaO3v362dvzVmfrS7Z062CfWxlR/\nLylUYzofkQuIxnWz1bhutia/NKFbHydvO7k2/NpBUs/OY7r1zVgd7XifHPk47ftn+kzJjgRCkz9n\nXhX676+ndmQtI+i1bktJZ6jFnezLH3VE8+PTce08aRjSmjXUTQaKjBHncpWlzme+S6xmGv3IZ5ue\nrvjncHS0kHzwvJqVbpJWZMW5+PJbzc0JoxWD3tqlhi/lUOd4cbOO+9mP1PPw4eiveti2o5zbbpvM\nc+SklP274/LzdVHrBwmjzluH99OBG66X3tia8Nxrvnydtn+0Tc1n7U4YBf34/5yopy48Xj/4yp5o\noBdfUi0+0Iss153szK+MVd3Sm9W8o0kHkyZdptM5tUGHV62M5h1HFvS4N8voo5MUqumnNejFnaui\nF0fxn6u2U5puGZqx+C3NUGhE+Iqb1C2gHRwcrD1tOQzNh4+/m48cVo8/DNW7n+2O9l/8/ju039Bo\nukawVz+1hUfxU12Yd6stPapevQK10ZrWbtVKTz4POvmcI/udro+Pb9GJnyUuy9j6xw36i47M50rX\nzpPU0fcd6vlXHgLncpblJJnPyThbcOzWCb7oNVJT5JWlm71fytzt5CDy1beW6ZXH/qTA7sSliqO3\ng1P4cv9hkhxM+DEM7f/bBr2+8kFd8u+HUz8nLF2gkO2ugpOgwEn/plpwJ3nJ9+EnDM+6UMmkEQ1q\ne75Bh5MmB041DL3wweqE5z7x1wtld9i6bPlYjZ+yS/NeDq0id9rijZrSf4Da327W5r1v6Mw/O1tr\nBr0czfG94JTRumZ4KN/1iiFXadyqy/ReXJ7uBafEVq/L9TZ857gJ+uyUgXr9S9L2q+uzLujhlFFr\n6PlLl+oPj92pzmOdeuCrf9S6jzZp4XnS93ecpAt2fxR97tg90nMv99G/DvxcHT1DFwtnD6rX4rFP\n690n7tb//O9/6uQ/7NbBjsOadbX0l19O8ZmSjr+7wg//wwdD9Td//2da99GmaH88fcWz0QmW3aqp\ndEjGM4kT/5IHDOrqgtESbG6lD8WfB3uOapf9SYuM1hRLR2dYJlwKXfxc03e5znlpr6PqGuVWNxoO\nuLSYDfyDcnQ+4YdyMaU6cWcrv1RXF9QHH+4rqC2pyuzNmZo4wzzynkUtxZY06t28c0n0vXq3S2/N\nD+VCptI2Z66C356po1+/JO/yXc07mnT/b2brvUdiK8l93tfQZ1v/s1t5tMjfP7IscrfKBklBQqqa\ny+na4KR/49+//Vi7nt7xVHR1v6H9h2nLzM1qb+uZ8jVO+iLdc+3P9qvrurEa9FaaRUyyvI/dYWtx\nOMgeecr53SbLOWpjjvXUc17oImn7dn295t13nTp7BXTzG+064Z7Gbu8RsWfEUPVY9hud/Hd/1y1A\n/LyvoY82b5dx4ikJj6c6/iI+eWCOmpxMWHPYJyU5d6a5e5Xpcy75S+nm8bGR+0znFLdK0vnhe8Qv\n6IsY+iKm/MvRLVggXTWRqy8fKOXt9GwjkMVqy3/FjWDGv2fRJjGmGPXued810V83bEsfNEelGK0w\njNxG/Q/2kYZ8J1QhQpI++sUPNDVFTeH4uwmRYG/pO0tiwU24LVsfnqWV7y6P3nbPNkLvqH9tWwOW\nLtHNx9pDVV0+CqUUDO0/TLeccaumn9agAcYA7WtLPPnncgck+bkJJdLeiu0bqVJQMr2PUWtoxoiZ\nmjFipqP3TfmcAiYQOUmhSt6+0dqqGdtvCM1rGG7r6Asvph01Hbx9t+zvfz/l7/scslX3/e/nlPYT\n6BFw9Dfz1aSqPFIgfjeke7pLOlQsAsqHt4Hzbbepf/2SgicxcIurcH46cTdvbS64Lcl5Ze+fOUzN\nZ+1K+dx888GzSfXF37DtGi0fOCZr7mTkdnBQKihvcfzwiZr/1hParV26aVJ4JGtk5hpZ8Rcuvdul\nrief0C0jblXn1AbJMPTWNRdq4brljtuQtX+TLjDuGxzLsd19YJcCPQKuH9PZSqSVm4JSqMIXRME7\nZslocf53zST5+IuotPzOdJ/Trq/XO1fUSOELQCoKAZXD8xznQkcRSj2xC4UrSZm6pJHamusn6py4\nMm7J71mqSYyBHoG0uZPtQ4bKbrhFOu44V/Lg7A5b31w9NZorPLTfMD19xbNZj43IRVTvdmn1M9LY\nPbukZxt19IVQDeh8/n4ZR2yTLjDG7gmNxmedAFmATCXSvAjuUl3oLR/Rrkku1dHOOkHJMNT26Dz1\n2Ls3ZbDb9uDDKX93rF8/tT34cPc3jD/+Uk16daPNfpDhcy5Os5hMKpTuBMqHtznONTVdUuYlnrPx\naqlgt3mdg+Tasq85vF+6L5XgFwL6+lOXuN6Wkt+ZcJKjmaXyRyH7Rb7HRuR1t74pLXgl8XeRY9XN\nvkyVJzrzqlDgHP+3d/MYSe6b3u3Si4euV/0XLyz65J20fWfb6vlss57cvlA/HBpaKjndvp9XXzip\nMhN5TqpgN/K7w4cV2LJZ6tkzFDQ7WEo8bw7a7PW50y1uHFOV0hduoC9i6IuY8s9xlk9HEapQsdIV\nMr1fppzRoqROlLo0npPZ1Iah/TeFlmrWziWlTzVKEZhERr+k9OkkbvZlqtUrv/rt6zSnV4ZllwuU\nPMJ3zqAx+otx82QXue8z3iEzDDWdH9Dddupc/II5SfnJ9Jy435Ws0nkVlVfztHQnAMe8DZznz9eB\nAicHjh8+MWHZ2369+mn88MwrNVUbpyMZfjpx+6ktBcnyxe9GqlG6v2+627+R5/c82q5ZP46livSZ\n/4Q+/c1rMgYM0LJxK/X84Ga9/98LE6pNFOUiN8UFxvQiTxgu9YVihJ/mEgAAcudt4DxzplTg7YNV\nO1ckLHt78OhBrdq5gi+iMHLA/a3QQCrT3zdVcCgpNinuTcmIW7G4dvcuDbhsrPavbZVhGJp+zkzp\npQa1laL+qAcji368OCPXFQD8zfNUDRQXI1z+Ez9CHKmZnP1FqXM9U/19F7/dHC2NlhwcNu9o0pb3\n1+vWbdLX3uv+NoHduxIn61bRrfJSyBYYezUSDgBwpuwDZ0ZokI4fyxQmjxBfcMpojRpYH12VLl2N\n4+R60JlKOD75Hwu7LcIR0fNoe7hSRujnw7XScR0ufThk5ajmsg9HwgEAIWUfOFfrCI3ToLDSLiyc\nfu5SpqjkEqAnjxBv2rtRPxszRxO+ckPa12daCGLKqdM0f9sT0RX2pFDt43R3FRq2SSfsif18XIfU\nceKJqv34Y0lM1i0FAmMAKF9lHzhL1fdFlEtQWLQLCyelrVzm5HNHgtjWP25wPUUlVYDsRoDudCW1\nVIxaQ7eMuFX3rk+/ZHL830qd3X/9+Z13S4HQEmel+lsCAFCOKiJwrja55i27fmGRY+pAzpvvsNW8\no0lSYqCf61LdbkoXIOf6t8jnDkC2hSCmn9agl3e9mHqbybWkLxito6Pq1ev11ti2pjcQLAMA4ACB\nM3KWKXWgUHaHrUnPjNPaPWsl5TaCmxzExis0RSVdgJyrvO4AZKkHnWmb3f5Wmzaq7Uc/05EJN6Tc\nFgAASI/AuQxVWt5yvKXvLIkGzVLiCG4+n/u64aHV4Eq1kEahy0+nf1Hm6ha5bNN4+intX9tKwAwA\nQI4InL0WyT8NGpLDxWC8nhCZLXWgWLJ97lRB7KNfn+dK36QLkL3+W2RjT5mmPvOfUO3u2OTBbiXn\nAACAIzVdXV1evn+XF+un+6ZMWXL+af0YV3OFi6pIkwPtDlvTfzMpOupcP3BMTpPtivm39WK/qasL\nqtBjxFi0QMF7EycPts2ZW3aBsxt9USnoixj6Ioa+iKEvYuiLmLq6YE2h26i6wDl5kleugZmbjOYm\nBRtnJzxWjgGN24JfCOjx3y2Q5JMRXA8qiES4csIr5wu0OJz8Y+iLGPoihr6IoS9i6IsYNwLnykjV\nyCGwKdlKeh4GW+UuY75uqft1/34NuGysAuFUB7criJRElsmFAADAmfIPnItcGq2YbfIqVzgjPwf8\npf5b27a+cNnYhPxgNyuIlBRLZwMAULAeXjegUOlKo6Uz5dRpqh84JvpzMSpSOG5TeCSwbc5caf58\n3wT8wcbZCjbOVv/JEyTbdvQ6o7lJRnOTs+fnKde/tRvvFx80AwCA6ubpiPOCNxfoqi9NLGkOq++q\nIIRHAoN1QcnjHKS86jP7ccS/iNqHDnN2V8DPI/cAACAvno443/Yvt2nySxNkd+Q/SmlPmaaj9bER\nZCfpDpEc2obTby5K0JxPm8pVKUeBS92vye/XMXSY9v/mtexBcL4j96k2FV5FsXlHU0HHCQAAKJzn\nOc4FT87z48QnP7bJAV/mXMcrdb/m+X5uraxYyCqKAADAfZ4Hzq7w48QnP7YpmzwCxZIH26XuVw//\njplWUQQAAKXneeBcSctFV4RcA8UyHV0vJt+P3AMAgLx4GjjPv3J+yScHogjKcXS9mFy6mJhy6jS9\nsmdVwiqKXGQCAOAdTwPnmefNZDUbVCYXLiaMWkNrblrjr1UUAQCoYp6nagBIL+MqigAAoKTKfgEU\nAIatcfgAAAceSURBVAAAoBQInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAA\nAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAA\nBwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAH\nCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcI\nnAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwic\nAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwBAAAABwicAQAAAAcInAEAAAAHCJwB\nAAAAB2rd3JhpmqMl/X34xzssyzrg5vYBAAAAr7g94jxDocC5SdJkl7cNAAAAeMbtwLmnZVlHJX0o\naaDL2wYAAAA84zhVwzTNCyQ9YFnWWNM0e0iaJ2mEpCOSbrEsa5ekw6Zp9pL0RUl7i9FgAAAAwAuO\nRpxN02yUtEhS7/BD4yX1sixrtKR7JD0UfvyfJC1UKGVjsbtNBQAAALzjdMR5p6QJigXDYyStkSTL\nsjaZpjky/O8tkv7W7UYCAAAAXnM04mxZ1kpJHXEPBSUdjPu5M5y+AQAAAFSkfMvRHVQoeI7oYVnW\nsTy2U1NXF8z+rCpBX8TQFzH0RQx9EUNfxNAXMfRFDH0RQ1+4J99R4g2SrpQk0zRHSdruWosAAAAA\nH8p1xLkr/P8WSZeYprkh/DN5zQAAAKhoNV1dXdmfBQAAAFQ5JvQBAAAADhA4AwAAAA4QOAMAAAAO\n5FuOrihM0xwt6e/DP95hWdYBL9vjNdM0vy7pRsuyZnjdFi+ZpvkNSZMlHSdpjmVZVVnFxTTNcyV9\nS1KNpEbLsv7X4yZ5yjTNkyW9bFnWeV63xUumaZ4p6XFJuyQ9bVnW/+dti7xjmuZpku6Q1EvSryzL\n+r3HTfKMaZp3SDpL0lckPWNZ1gKPm+QZ0zSvkjRRUkDSQ5ZlbfO4SZ4xTfMGSZdKOirpXsuyPvW4\nSZ6Ij69yjT39NuI8Q6HGNykUKFUt0zSHKXTSM7xuiw/0sSzr7yX9SqEDvlr1lvQdSa9Iqve4LZ4y\nTbNG0vckvedxU/zgfEkfKrRIVdUGimG3SPpvSbaqfN+wLOtRhb5Pf1/NQXPYR5K+KOn/SPrA47Z4\n7VpJt0p6UqGYq+rExVe9ww/lFHv6LXDuaVnWUYW+BAZ63RgvWZa1y7Ksh71uhx9YlvWyaZp9Jd0u\nqdnj5njGsqyNkk6T9F1JVTtiEjZT0jMKBUjVbr1CAeMchfaNajZModH35ZL+xuO2+MFUSSu8boQP\nzJB0g6QHJV3lcVu89rikRZLGSTrJ47Z4Ii6+qgk/lFPsWbJUDdM0L5D0gGVZY8PLc8+TNELSEUm3\nWJa1S9Jh0zR7KXRluLdUbSs1h31RFZz0hWmaJykUFPzQsqyPPGxu0Tjsh/MkbZZ0haT7FLolXXEc\nHh9/HX7sfNM0J1qWVZHBgcO+OEuhE/5++Sz9zk0O++J/JR2W9Kn8NzDkmhy+Q75mWdYtXrWzFBz2\nRa2kQwqNPJ/mWWOLzGFfDFToQvsiSWd41tgiyTO+yin2LMmJxTTNRoWucCLD4uMl9bIsa7SkeyQ9\nFH78nyQtVOjqcHEp2lZqOfRFxcuhLx6SdLKkX5imObHkDS2yHPrheElPSfqlpCWlbmcpOO0Ly7Im\nWpZ1m6RNFRw0O90v3lNoFOlBSY+VuJklkUNfLAg/7zuSni11O0shx++Q40rcvJLKcb9oUmiOSLXH\nFp9I+meF0jV+Xep2FlMB8VVOsWepRid2SpqgWIPGSFojSZZlbTJNc2T431tU+asQOuqLCMuyppe2\neSXldL/4pjfNKxmn/fCapNc8aWHp5Hp8VPLteKf7RaukVk9aWDpO++LfJXG+CLMsa2rpm1dSTveL\n1yW97kkLS8dpX6yVtNaTFhZfXvFVrrFnSUacLctaqdDElYigpINxP3eGh9QrHn0RQ1+E0A8x9EUM\nfRFDX8TQFzH0RQx9Ubo+8KoTDyr0gaLtsCzrmEdt8Rp9EUNfhNAPMfRFDH0RQ1/E0Bcx9EUMfVGk\nPvAqcN4g6UpJMk1zlKSqrMsbRl/E0Bch9EMMfRFDX8TQFzH0RQx9EUNfFKkPSj0Duyv8/xZJl5im\nuSH8c6XnNadCX8TQFyH0Qwx9EUNfxNAXMfRFDH0RQ18UuQ9qurq6sj8LAAAAqHIVnSgOAAAAuIXA\nGQAAAHCAwBkAAABwgMAZAAAAcIDAGQAAAHCAwBkAAABwgMAZAAAAcIDAGQAAAHCAwBkAAABwgMAZ\nAAAAcOD/B5Gc6L4EErboAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "fig = plt.figure(figsize=(12, 6))\n", "plt.xlim([1,1e10])\n", "plt.semilogx()\n", "plt.semilogy()\n", "plt.scatter(nfaf181_6s, qtaf181_6s, label=\"181 6 shards\", color=\"red\");\n", "plt.scatter(nfaf182_6s, qtaf182_6s, label=\"182 6 shards\", color=\"blue\");\n", "plt.scatter(nfaf203_6s, qtaf203_6s, label=\"203 6 shards\", color=\"green\");\n", "plt.scatter(nfaf215_6s2, qtaf215_6s2, label=\"215 6 shards\", color=\"lightgreen\");\n", "plt.scatter(nfaf4m, qtaf4m, label=\"4 Servers\", color=\"purple\");\n", "plt.legend()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nAODA/wMRXdvIlvtpfgAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* all-facets for\n", " * 4M servers, with more threads.\n", " * 4M servers, with no threads specified.\n", " * 4M servers, enum method\n", " * 4M servers, fcs method\n", " * As above, but against a single shard (distrib-false).\n" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }