Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Wir leben in einer erstaunlichen Zeit, in der man schnell und einfach mehrere fertige Open-Source-Tools zusammenschalten, sie mit einem "abgeschalteten Bewusstsein" nach den RatschlĂ€gen von Stackoverflow konfigurieren kann, ohne sich mit "vielen Buchstaben" auseinanderzusetzen und sie in den kommerziellen Betrieb nehmen kann. Doch wenn es Zeit wird, sich zu aktualisieren oder zu erweitern oder wenn jemand versehentlich ein paar Maschinen neu startet — wird einem bewusst, dass man in einen zwangshaften schlechten Traum aufgewacht ist, alles hat sich plötzlich unkenntlich kompliziert, der RĂŒckweg ist versperrt, die Zukunft ist ungewiss und es wĂ€re sicherer, anstatt Programmierung Bienen zu halten und KĂ€se zu machen.

Es ist kein Zufall, dass erfahrene Kollegen, die mit Bugs ĂŒberhĂ€uft und bereits grau geworden sind, das unglaublich schnelle Ausrollen von "Containern" in "Kubik" auf Dutzenden von Servern in "modernen Sprachen" mit integrierter UnterstĂŒtzung fĂŒr asynchronen, nicht blockierenden Input/Output betrachten — bescheiden lĂ€cheln. Und still wiederholen sie "man ps", verlieren sich bis zum Bluten in die Quellcodes von "nginx" und schreiben-schreiben-schreiben Unit-Tests. Die Kollegen wissen, dass das Interessanteste noch bevorsteht, wenn "das alles" irgendwann ĂŒber Nacht zu einem Paket zum Neuen Jahr wird. Und ihnen kann nur ein tiefes VerstĂ€ndnis der Unix-Natur, eine einstudierte TCP/IP-Zustandstabelle und grundlegende Sortier- und Suchalgorithmen helfen. Um zum Glockenschlag das System wieder zum Leben zu erwecken.

Ach ja, ich habe mich etwas abgelenkt, aber ich hoffe, ich konnte den Zustand der Vorfreude vermitteln.
Heute möchte ich unsere Erfahrungen mit der Bereitstellung eines benutzerfreundlichen und kostengĂŒnstigen Stacks fĂŒr DataLake teilen, der die meisten analytischen Aufgaben im Unternehmen fĂŒr ganz verschiedene Abteilungen löst.

Vor einiger Zeit kamen wir zu dem VerstĂ€ndnis, dass die Unternehmen zunehmend die FrĂŒchte sowohl der produktbezogenen als auch der technischen Analytik benötigen (geschweige denn die Kirschen auf der Torte in Form von Machine Learning), und um Trends und Risiken zu verstehen — mĂŒssen immer mehr Metriken gesammelt und analysiert werden.

Grundlegend technische Analytik in "Bitrix24"

Vor einigen Jahren, parallel zur EinfĂŒhrung des Dienstes „Bitrix24“, haben wir aktiv Zeit und Ressourcen in die Erstellung einer einfachen und zuverlĂ€ssigen Analyseplattform investiert, die dazu dienen sollte, Probleme in der Infrastruktur schnell zu erkennen und den nĂ€chsten Schritt zu planen. NatĂŒrlich sollten die Werkzeuge möglichst einfach und klar sein. Schließlich haben wir uns fĂŒr Nagios zur Überwachung und Munin zur Analyse und Visualisierung entschieden. Jetzt haben wir Tausende von ÜberprĂŒfungen in Nagios, Hunderte von Grafiken in Munin, und unsere Kollegen nutzen sie tĂ€glich und erfolgreich. Die Metriken sind klar, die Grafiken verstĂ€ndlich, das System funktioniert seit mehreren Jahren zuverlĂ€ssig und es werden regelmĂ€ĂŸig neue Tests und Grafiken hinzugefĂŒgt: Wir fĂŒhren einen neuen Dienst in Betrieb — fĂŒgen einige Tests und Grafiken hinzu. Gute Fahrt.

Finger am Puls — erweiterte technische Analyse

Der Wunsch, Informationen ĂŒber Probleme „so schnell wie möglich“ zu erhalten, hat uns zu aktiven Experimenten mit einfachen und klaren Werkzeugen — Pinba und XHProf — gefĂŒhrt.

Pinba sendete uns in UDP-Paketen Statistiken ĂŒber die Geschwindigkeit von PHP-Teilen auf Webseiten und man konnte in Echtzeit eine kurze Liste von Problemen in der MySQL-Datenbank sehen (Pinba kommt mit einer eigenen MySQL-Engine zur schnellen Ereignisanalyse) und darauf reagieren. XHProf ermöglichte es, automatisiert die AusfĂŒhrungsgraphen der langsamsten PHP-Seiten bei Kunden zu erfassen und zu analysieren, wodurch wir feststellen konnten, was dazu gefĂŒhrt haben könnte — entspannt, wĂ€hrend wir Tee oder etwas StĂ€rkeres genossen haben.

Vor einiger Zeit wurde das Werkzeug um eine weitere recht einfache und verstĂ€ndliche Engine auf Basis des Algorithmus der inversen Indizierung erweitert, die hervorragend in der legendĂ€ren Bibliothek Lucene implementiert ist — Elastic/Kibana. Die einfache Idee der mehrthreadigen Dokumentenspeicherung im inversen Lucene-Index basierend auf den Ereignissen in den Logs und der schnellen Suche danach mit Hilfe der Fassetten-Teilung hat sich tatsĂ€chlich als nĂŒtzlich erwiesen.

Trotz des recht technischen Aussehens der Visualisierungen in Kibana mit Konzepten wie „Buckets“, die „nach oben fließen“, und einer neu erfundenen Sprache, die noch nicht vergessene relationale Algebra ist — hat uns das Werkzeug gut bei den folgenden Aufgaben unterstĂŒtzt:

  • Wie viele PHP-Fehler gab es bei dem Kunden Bitrix24 auf dem Portal p1 in der letzten Stunde und welche? Verstehen, verzeihen und schnell beheben.
  • Wie viele Videoanrufe wurden in den letzten 24 Stunden auf den Plattformen in Deutschland getĂ€tigt, mit welcher QualitĂ€t und gab es Schwierigkeiten mit dem Kanal/Netzwerk?
  • Wie gut funktioniert die SystemfunktionalitĂ€t (unsere C-Erweiterung fĂŒr PHP), die aus den Quellcodes im letzten Update des Services kompiliert und an die Kunden ausgerollt wurde? Gibt es Segfaults?
  • Werden die Kundendaten im PHP-Speicher abgelegt? Gibt es keine Fehler bezĂŒglich des Überschreitens des zugewiesenen Speichers: „out of memory“? Finden und beheben.

Hier ist ein konkretes Beispiel. Trotz sorgfÀltiger und mehrstufiger Tests trat beim Kunden in einem sehr untypischen Fall mit beschÀdigten Eingabedaten ein Àrgerlicher und unerwarteter Fehler auf, die Sirene ertönte und der Prozess der schnellen Behebung begann:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

ZusĂ€tzlich ermöglicht Kibana, Benachrichtigungen zu bestimmten Ereignissen zu organisieren, und in kurzer Zeit wurden Dutzende von Mitarbeitern aus verschiedenen Abteilungen – von Support und Entwicklung bis QA – Werkzeuge im Unternehmen.

Die AktivitĂ€t jeder Abteilung innerhalb des Unternehmens kann bequem ĂŒberwacht und gemessen werden – anstelle der manuellen Analyse von Logs auf Servern genĂŒgt es, einmal das Parsing der Logs und deren Versand an den Elastic-Cluster einzurichten, um beispielsweise die Betrachtung im Kibana-Dashboard der verkauften zweiköpfigen KĂ€tzchen, die im vergangenen Mondmonat auf 3D-Druckern hergestellt wurden, zu genießen.

BasisgeschÀftsanalyse

Jeder weiß, dass die GeschĂ€ftsanalyse in Unternehmen oft mit einer extrem aktiven Nutzung von, ja, ja, Excel beginnt. Aber das Wichtigste ist, dass sie dort nicht endet. Das Spiel wird noch zusĂ€tzlich angefacht durch Google Analytics – man gewöhnt sich schnell an das Gute.

In unserem harmonisch wachsenden Unternehmen tauchten hier und da „Propheten“ fĂŒr eine intensivere Arbeit mit grĂ¶ĂŸeren Datenmengen auf. RegelmĂ€ĂŸig gab es Anforderungen an tiefere und facettenreichere Berichte, und die BemĂŒhungen von Mitarbeitern aus verschiedenen Abteilungen fĂŒhrten vor einiger Zeit zur Organisation einer einfachen und praktischen Lösung – der Anbindung von ClickHouse und PowerBI.

Lange Zeit half diese flexible Lösung ausgezeichnet, aber allmÀhlich wurde klar, dass ClickHouse nicht dehnbar ist und man nicht so mit ihm umgehen kann.

Hier ist es wichtig zu verstehen, dass ClickHouse, wie Druid, wie Vertica, wie Amazon RedShift (basierend auf Postgres), analytische Engines sind, die fĂŒr recht bequeme Analysen (Summen, Aggregationen, Minimum-Maximum pro Spalte und ein wenig Join) optimiert sind, da sie fĂŒr die effiziente Speicherung von Spalten relationaler Tabellen organisiert sind, im Gegensatz zu dem bekannten MySQL und anderen (row-oriented) Datenbanken.

Im Grunde genommen ist ClickHouse nur eine grĂ¶ĂŸere "Datenbank", mit nicht sehr bequemer punktueller Einspeisung (so ist es gedacht, alles in Ordnung), aber mit angenehmer Analyse und einer Reihe von interessanten leistungsstarken Funktionen zur Datenverarbeitung. Ja, man kann sogar einen Cluster erstellen – aber, verstehen Sie, es ist nicht ganz richtig, NĂ€gel mit einem Mikroskop zu hĂ€mmern und wir begannen, nach anderen Lösungen zu suchen.

Nachfrage nach Python und Analysten

In unserem Unternehmen gibt es viele Entwickler, die fast jeden Tag seit 10-20 Jahren in PHP, JavaScript, C#, C/C++, Java, Go, Rust, Python, Bash programmieren. Außerdem gibt es viele erfahrene Systemadministratoren, die nicht eine, sondern mehrere völlig unglaublich Katastrophen ĂŒberstanden haben, die nicht in die Gesetze der Statistik passen (zum Beispiel, wenn die meisten Festplatten in einem RAID-10 bei einem starken Blitzschlag zerstört werden). Unter solchen Bedingungen war lange Zeit unklar, was ein "Analyst mit Python" ist. Python ist wie PHP, nur mit einem etwas lĂ€ngeren Namen und weniger Substanzen, die das Bewusstsein im Quellcode des Interpreters verĂ€ndern. Doch wĂ€hrend immer neue analytische Berichte erstellt wurden, begannen die erfahrenen Entwickler mehr und mehr die Bedeutung der Spezialisierung auf Werkzeuge wie numpy, pandas, matplotlib, seaborn zu erkennen.
Eine entscheidende Rolle spielten wahrscheinlich die plötzlichen OhnmachtsanfĂ€lle der Mitarbeiter in Kombination mit den Worten "logistische Regression" und der Demonstration des effektiven Aufbaus von Berichten ĂŒber große Datenmengen mit, ja, pyspark.

Apache Spark und seine funktionale Paradigmen, auf die die relationale Algebra hervorragend passt, haben so einen Eindruck bei den Entwicklern hinterlassen, die an MySQL gewöhnt sind, dass die Notwendigkeit, erfahrene Analysten in den Reihen zu haben, offensichtlich wurde.

Die weiteren Versuche von Apache Spark/Hadoop abzuheben, und was nicht ganz nach Plan verlief

Es stellte sich jedoch bald heraus, dass mit Spark offenbar etwas grundlegend nicht stimmte oder man einfach seine HĂ€nde besser waschen sollte. Wenn das Hadoop/MapReduce/Lucene-Stack von erfahrenen Programmierern erstellt wurde, was offensichtlich ist, wenn man sich die Quellcodes in Java oder Doug Cutting Ideen in Lucene ansieht, dann ist Spark plötzlich in einer sehr umstrittenen, praktischen Hinsicht und im Moment nicht mehr entwickelten exotischen Sprache Scala geschrieben. Das regelmĂ€ĂŸige Versagen von Berechnungen im Spark-Cluster aufgrund der unlogischen und wenig transparenten Speicherverwaltung fĂŒr Reduce-Operationen (da viele SchlĂŒssel auf einmal ankommen) hat um ihn einen Nimbus des Wachstums geschaffen. ZusĂ€tzlich wurde die Situation durch eine Vielzahl von seltsamen offenen Ports, temporĂ€ren Dateien, die an den unverstĂ€ndlichsten Orten wuchsen, und ein Netz von jar-AbhĂ€ngigkeiten verschĂ€rft — das rief bei den Systemadministratoren ein vertrautes GefĂŒhl hervor: loderne Hass (oder vielleicht hĂ€tte man die HĂ€nde mit Seife waschen sollen).

Wir haben als Ergebnis mehrere interne Analyseprojekte â€žĂŒberlebt“, die intensiv Apache Spark (einschließlich Spark Streaming, Spark SQL) und das Hadoop-Ökosystem (und so weiter) nutzten. Obwohl wir im Laufe der Zeit gelernt haben, „das“ ganz gut zu handhaben und zu ĂŒberwachen und „es“ praktisch nicht mehr plötzlich aufgrund der verĂ€nderten Datenmuster und der Unausgewogenheit des gleichmĂ€ĂŸigen Hashing von RDD fiel, wurde der Wunsch, etwas Fertiges, Aktualisiertes und Administriertes irgendwo in der Cloud zu nehmen, immer stĂ€rker. EMR und haben anschließend versucht, die Aufgaben bereits darauf zu lösen. EMR ist Amazons fertiger Apache Spark mit zusĂ€tzlicher Software aus dem Ökosystem, Ă€hnlich wie die Cloudera/Hortonworks-Bundles.

Ein „gummibereites“ Dateispeicher fĂŒr Analysen – ein dringender Bedarf

Die Erfahrung der „Zubereitung“ von Hadoop/Spark mit Verbrennungen an verschiedenen Körperstellen blieb nicht ohne Ergebnis. Es zeichnete sich immer klarer die Notwendigkeit ab, einen einheitlichen, kostengĂŒnstigen und zuverlĂ€ssigen Dateispeicher zu schaffen, der gegen HardwareausfĂ€lle resistent wĂ€re und in dem Dateien in verschiedenen Formaten aus verschiedenen Systemen gespeichert werden könnten, um daraus effektive Datenabfragen fĂŒr Berichte in angemessener Zeit zu erstellen.

Es wĂ€re auch wĂŒnschenswert, dass die Software-Updates dieser Plattform nicht zu einem nervenaufreibenden Neujahrsnacht-Albtraum werden, bei dem man 20-seitige Java-Tracebacks lesen und kilometerlange detaillierte Protokolle des Clusterbetriebs mit Hilfe des Spark History Servers und einer Lupe mit Beleuchtung analysieren muss. Ich möchte ein einfaches und transparentes Werkzeug haben, das keine regelmĂ€ĂŸigen Tiefenuntersuchungen erfordert, wenn der Entwickler die Standard-MapReduce-Anfrage nicht mehr ausfĂŒhren kann, weil der Arbeitsspeicher des Reduce-Datenarbeiters bei ungĂŒnstigen Partitionsalgorithmen nicht mehr ausreicht.

Amazon S3 – ein Kandidat fĂŒr DataLake?

Die Erfahrungen mit Hadoop/MapReduce haben gezeigt, dass eine skalierbare, zuverlĂ€ssige Dateispeicherlösung sowie skalierbare Worker nötig sind, die nĂ€her an den Daten arbeiten, um nicht stĂ€ndig Daten ĂŒber das Netzwerk zu bewegen. Die Worker sollten in der Lage sein, Daten in verschiedenen Formaten zu lesen, aber idealerweise keine unnötigen Informationen lesen und die Daten im Voraus in Formate speichern, die fĂŒr die Worker praktisch sind.

Nochmal - das Hauptkonzept. Ich habe kein Interesse daran, große Daten in eine einzige Cluster-Analysemotor zu laden, der irgendwann ohnehin ĂŒberfordert ist und dann unschön shardet werden muss. Ich möchte einfach Dateien in einem verstĂ€ndlichen Format speichern und mit verschiedenen, aber intuitiven Werkzeugen effiziente Analyseanfragen durchfĂŒhren. Es werden zunehmend mehr Dateien in verschiedenen Formaten generiert, und es wĂ€re besser, nicht den Motor zu sharden, sondern die Rohdaten. Wir benötigen einen skalierbaren und universellen DataLake, haben wir beschlossen...

Was wĂ€re, wenn wir die Dateien in einem vertrauten und von vielen bekannten skalierbaren Cloud-Speicher wie Amazon S3 speichern, ohne uns um die eigene Zubereitung von HĂ€hnchen zu kĂŒmmern?

Klar, personenbezogene Daten sind "no go", aber was ist mit anderen Daten, wenn wir sie dorthin bringen und "effektiv verarbeiten"?

Das clusterbasierte Big Data-Analyse-Ökosystem von Amazon Web Services – sehr vereinfacht gesagt.

Nach unseren Erfahrungen mit AWS wird dort schon lange und aktiv Apache Hadoop/MapReduce unter verschiedenen Aspekten verwendet, beispielsweise im Dienst DataPipeline (ich beneide meine Kollegen, die haben gelernt, wie man es richtig zubereitet). Hier haben wir Backups aus verschiedenen Diensten von DynamoDB-Tabellen eingerichtet:
Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Und diese werden seit mehreren Jahren regelmĂ€ĂŸig auf den integrierten Clustern von Hadoop/MapReduce wie die Uhr ausgefĂŒhrt. "Einmal eingerichtet und vergessen":

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Außerdem kann man effektiv Daten-Satanismus betreiben, indem man Jupiter-Notebooks in der Cloud fĂŒr Analysten hochzieht und AWS SageMaker fĂŒr das Training und Deployment von KI-Modellen verwendet. So sieht das bei uns aus:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Ja, man kann sich oder dem Analysten ein Notebook in der Cloud einrichten und es an ein Hadoop/Spark-Cluster anschließen, die Daten berechnen und anschließend alles ‚festhalten‘:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Es ist wirklich praktisch fĂŒr einzelne Analyseprojekte und fĂŒr einige von ihnen haben wir erfolgreich den EMR-Service fĂŒr großangelegte Berechnungen und Analysen genutzt. Und wie sieht es mit einer systematischen Lösung fĂŒr DataLake aus, wird das klappen? In diesem Moment waren wir am Rande von Hoffnung und Verzweiflung und setzten unsere Suche fort.

AWS Glue – ordentlich verpacktes Apache Spark „auf Steroiden“

Es stellte sich heraus, dass AWS eine „eigene“ Version des Stacks „Hive/Pig/Spark“ hat. Die Rolle von Hive, also das Katalogisieren von Dateien und ihren Typen im DataLake, ĂŒbernimmt der Service „Datenkatalog“, der nicht einmal seine KompatibilitĂ€t mit dem Apache Hive-Format verheimlicht. In diesen Service mĂŒssen Sie Informationen darĂŒber einfĂŒgen, wo sich Ihre Dateien befinden und in welchem Format sie vorliegen. Die Daten können nicht nur in s3, sondern auch in einer Datenbank gespeichert sein, aber das ist nicht Thema dieses Beitrags. So ist unser Datenkatalog fĂŒr DataLake organisiert:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Die Dateien sind registriert, alles bestens. Wenn die Dateien aktualisiert wurden, starten wir entweder manuell oder nach einem Zeitplan Crawler, die die Informationen ĂŒber sie aus dem See aktualisieren und speichern. Anschließend können die Daten aus dem See verarbeitet und die Ergebnisse irgendwohin exportiert werden. Im einfachsten Fall exportieren wir sie ebenfalls in s3. Die Datenverarbeitung kann ĂŒberall erfolgen, aber es wird empfohlen, den Verarbeitungsprozess auf einem Apache Spark-Cluster mit erweiterten Möglichkeiten ĂŒber die AWS Glue API einzurichten. Im Grunde kann man den guten alten und vertrauten Code in Python unter Verwendung der Bibliothek pyspark nehmen und seine AusfĂŒhrung auf N Knoten eines Clusters mit einer bestimmten Leistung einrichten, einschließlich Monitoring, ohne sich mit den Tiefen von Hadoop zu beschĂ€ftigen und Docker-Mocker-Container hin und her zu ziehen und AbhĂ€ngigkeitskonflikte zu beseitigen.

Noch einmal – eine einfache Idee. Es ist nicht nötig, Apache Spark einzurichten, man muss nur Python-Code fĂŒr pyspark schreiben, lokal auf dem Desktop testen und dann auf einem großen Cluster in der Cloud ausfĂŒhren, indem man angibt, wo die Quelldaten liegen und wo das Ergebnis gespeichert werden soll. Manchmal ist das notwendig und nĂŒtzlich, und so ist es bei uns eingerichtet:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

So, wenn man etwas auf einem Spark-Cluster mit Daten in s3 berechnen muss, schreibt man Python/pyspark-Code, testet ihn und ab ins Cloud.

Und was ist mit der Orchestrierung? Und wenn die Aufgabe gefallen und verschwunden ist? Ja, es wird vorgeschlagen, eine schöne Pipeline im Stil von Apache Pig zu erstellen, und wir haben sie sogar ausprobiert, aber beschlossen, vorerst unsere tiefgehend angepasste Orchestrierung in PHP und JavaScript zu verwenden (ich verstehe, dass ein kognitiver Dissonanz entsteht, aber es funktioniert, schon jahrelang und ohne Fehler).

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Das Format der im See gespeicherten Dateien ist der SchlĂŒssel zur Leistung

Es ist sehr, sehr wichtig, zwei weitere entscheidende Punkte zu verstehen. Damit die Anfragen zu den Daten der Dateien im See so schnell wie möglich ausgefĂŒhrt werden und die Leistung beim HinzufĂŒgen neuer Informationen nicht sinkt, mĂŒssen Sie:

  • Die Spalten der Dateien separat speichern (um nicht alle Zeilen lesen zu mĂŒssen, um zu verstehen, was in den Spalten steht). DafĂŒr haben wir das Parquet-Format mit Kompression gewĂ€hlt.
  • Es ist sehr wichtig, die Dateien nach Ordnern zu shardieren: Sprache, Jahr, Monat, Tag, Woche. Engines, die diesen Sharding-Typ verstehen, werden nur in die benötigten Ordner schauen, ohne alle Daten durchzugehen.

Im Grunde genommen legen Sie auf diese Weise die Ausgangsdaten in der effektivsten Form fĂŒr die darĂŒber liegenden Analyse-Engines zur VerfĂŒgung, die ebenfalls selektiv in die shardierten Ordner gehen und nur die benötigten Spalten aus den Dateien lesen können. Es ist nicht nötig, die Daten irgendwo zu "laden" (das Speicher könnte sonst einfach platzen) — legen Sie sie einfach gleich sinnvoll im richtigen Format in das Dateisystem. SelbstverstĂ€ndlich sollte hier klar sein, dass es nicht sehr sinnvoll ist, eine riesige CSV-Datei im DataLake zu speichern, die man zuerst zeilenweise mit einem Cluster lesen muss, um die Spalten zu extrahieren — denken Sie noch einmal ĂŒber die beiden obigen Punkte nach, wenn Sie nicht verstehen, wozu das alles gut sein soll.

AWS Athena — der "Teufel" aus der Tabakdose

Und hier, wĂ€hrend wir den See erstellen, sind wir zufĂ€llig auf Amazon Athena gestoßen. Plötzlich stellte sich heraus, dass wir, indem wir unsere riesigen Log-Dateien ordentlich nach Shards-Ordnern im richtigen (parquet) spaltenbasierten Format anordnen, sehr schnell Ă€ußerst informative Abfragen durchfĂŒhren und Berichte OHNE, ohne Apache Spark/Glue-Cluster erstellen können.

Die Athena-Engine, die mit Daten in S3 arbeitet, basiert auf dem legendĂ€ren Presto — Vertreter der MPP (massive parallel processing) AnsĂ€tze zur Datenverarbeitung, die Daten dort entnehmen, wo sie liegen, von s3 und Hadoop bis hin zu Cassandra und einfachen Textdateien. Man muss lediglich Athena auffordern, die SQL-Abfrage auszufĂŒhren, und der Rest „funktioniert schnell und selbststĂ€ndig“. Es ist wichtig zu erwĂ€hnen, dass Athena „intelligent“ ist, nur die benötigten shard-gerechten Ordner aufruft und nur die benötigten Spalten aus der Abfrage liest.

Die Anfragen an Athena werden ebenfalls interessant abgerechnet. Wir bezahlen fĂŒr das Volumen der gescannten Daten. Das heißt, nicht fĂŒr die Anzahl der Maschinen im Cluster pro Minute, sondern
 fĂŒr die tatsĂ€chlich gescannten, auf 100-500 Maschinen, nur die notwendigen Daten zur AusfĂŒhrung der Abfrage.

Und wenn man nur die benötigten Spalten aus den richtig shard-gerechten Ordnern abfragt, stellt sich heraus, dass uns der Service Athena nur einige Dutzend Dollar im Monat kostet. Na, das ist doch prima, fast kostenlos im Vergleich zu Analytics auf Clustern!

Übrigens, so shardieren wir unsere Daten in s3:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

In der Folge haben innerhalb kurzer Zeit in der Firma vollkommen verschiedene Abteilungen, von der Informationssicherheit bis zur Analyse, begonnen, aktiv Anfragen an Athena zu stellen und schnell, in Sekunden, nĂŒtzliche Antworten aus den "großen" Daten ĂŒber ziemlich lange ZeitrĂ€ume zu erhalten: Monate, Halbjahre usw.

Aber wir sind weitergegangen und haben begonnen, die Antworten in die Cloud zu holen ĂŒber den ODBC-Treiber: Ein Analyst schreibt in der gewohnten Konsole eine SQL-Abfrage, die auf 100-500 Maschinen „fĂŒr einen kleinen Preis“ die Daten in s3 durchforstet und die Antwort normalerweise in wenigen Sekunden zurĂŒckgibt. Bequem. Und schnell. Es ist immer noch kaum zu glauben.

Insgesamt haben wir, nachdem wir entschieden haben, die Daten in s3 im effektiven Spaltenformat und mit einer sinnvollen Shardung der Daten nach Ordnern zu speichern
 ein DataLake und eine schnelle und gĂŒnstige Analysesoftware - kostenlos. Und es wurde sehr beliebt im Unternehmen, da es SQL versteht und um ein Vielfaches schneller arbeitet als bei Start/Stop/Feinabstimmung von Clustern. "Und wenn das Ergebnis dasselbe ist, warum mehr bezahlen?"

Eine Anfrage an Athena sieht ungefĂ€hr so aus. Wenn gewĂŒnscht, kann man natĂŒrlich eine ausreichend komplexe und mehrseitige SQL-Abfrage, aber wir beschrĂ€nken uns auf eine einfache Gruppierung. Schauen wir, welche Antwortcodes der Kunde vor einigen Wochen in den Protokollen des Webservers hatte und stellen wir sicher, dass es keine Fehler gab:

Wie wir ein hochgradig effizientes und kostengĂŒnstiges DataLake organisiert haben und warum gerade so.

Das DBMS Tarantool ist ein attraktives, zukunftstrÀchtiges Produkt zur Erstellung von hochbelasteten Anwendungen.

Nach einem, wenn auch nicht langen, dafĂŒr aber schmerzhaften Weg, bei dem wir stĂ€ndig Risiken, den Schwierigkeitsgrad und die Kosten fĂŒr den Support angemessen bewertet haben, fanden wir eine Lösung fĂŒr DataLake und Analytics, die uns sowohl mit ihrer Geschwindigkeit als auch mit den Besitzkosten begeistert.

Es stellte sich heraus, dass es selbst fĂŒr erfahrene Entwickler, die niemals Architekten gewesen sind und es nicht gewohnt sind, Quadrate auf Quadraten mit Pfeilen zu zeichnen und 50 Begriffe aus dem Hadoop-Ökosystem zu kennen, durchaus möglich ist, ein effizientes, schnelles und kostengĂŒnstiges DataLake fĂŒr die BedĂŒrfnisse ganz unterschiedlicher Unternehmensabteilungen zu erstellen.

Zu Beginn des Weges platzte einem der Kopf von einer Vielzahl extrem verrĂŒckter Zoos von Open- und Closed-Source-Software und dem GefĂŒhl der Verantwortung, die man gegenĂŒber den Nachkommen hat. Beginnen Sie einfach damit, Ihr DataLake mit einfachen Werkzeugen zu bauen: nagios/munin -> elastic/kibana -> Hadoop/Spark/s3
, sammeln Sie Feedback und verstehen Sie tief die physikalischen Prozesse, die ablaufen. Alles Komplexe und Unklare — geben Sie es Ihren Feinden und Konkurrenten.

Wenn Sie nicht in die Cloud möchten und es lieben, Open-Source-Projekte zu unterstĂŒtzen, zu aktualisieren und zu patchen, können Sie ein Ă€hnliches System wie das unsere lokal auf preiswerten BĂŒrorechnern mit Hadoop und Presto oben drauf aufbauen. Das Wichtigste ist, nicht stehen zu bleiben und voranzukommen, zu zĂ€hlen, einfache und klare Lösungen zu suchen, und alles wird auf jeden Fall gelingen! Viel GlĂŒck an alle und bis zum nĂ€chsten Mal!

Quelle: habr.com

60GB SSD 8Gb DDR4