Im zweiten Schritt der Backend-Kette (siehe Eintrag von gestern) für eine Entity Oriented Search werden sehr grosse Dokumente erzeugt. Zu gross für ein bearbeiten auf commodity Hardware. Die Dokumente für alle Jahre (year = XXXX) mit den Konzepten brain und liver sind jweils knapp 124 MB gross geworden. Hadoop ist mit einem OutOfMemoryError ausgestiegen, wenn org.apache.hadoop.io.Text#write aufgerufen wurde - bei patient würde das Ergebniss vermutlich noch desaströser werden. In den Java-Tiefen wurde ein ByteArrayInputStream kopiert. Ich hätte natürlich den Speicher erhöhen können. Statt 1 GB hätte ich es mit 1,2 GB oder mehr versuchen können. Bei 3 Prozessen würde das mit dem Hauptspeicher der Rechner (4 GB) gerade noch so hinhauen, dass sie nicht swappen. Was aber wenn die Dokumentenmenge grösser wird? Deswegen berechne ich die Daten jetzt neu, nur auf Jahres-Basis.
Vermutlich werde ich den Zwischenschritt sowieso eleminieren, da ich aus diesem direkt den Lucene Index bauen kann. Das ist natürlich Blödsinn - es widerspricht der Idee, dass jeweils ein Programm für eine Aufgabe da sein soll. Immerhin will ich den Lucene Index mit unterschiedlichen Normalisierungen berechnen.
Nebenbei habe ich auch noch den Code für die Strategy beim Fully Distributed Cache angepasst.
