Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Nous vivons une Ă©poque incroyable oĂč il est possible de relier rapidement et simplement plusieurs outils open source prĂȘts Ă  l'emploi, de les configurer avec un « esprit dĂ©connectĂ© » selon les conseils de stackoverflow, sans se plonger dans des termes complexes, et de les lancer en exploitation commerciale. Et quand il faudra mettre Ă  jour/Ă©tendre ou si quelqu'un redĂ©marre accidentellement quelques machines, on rĂ©alisera que l'on a commencĂ© Ă  rĂȘver un mauvais rĂȘve obsĂ©dant, que tout est devenu Ă©trangement compliquĂ© Ă  en devenir mĂ©connaissable, qu'il n'y a pas de retour en arriĂšre, que l'avenir est incertain et qu'il vaut mieux, plutĂŽt que de programmer, se consacrer Ă  l'apiculture et Ă  la fabrication de fromage.

Ce n'est pas en vain que des collĂšgues plus expĂ©rimentĂ©s, les cheveux dĂ©jĂ  grisonnants Ă  force de faire face Ă  de nombreux bugs, contemplent le dĂ©ploiement incroyablement rapide de paquets « containers » dans des « cubes » sur des dizaines de serveurs dans des « langages Ă  la mode » avec un support intĂ©grĂ© pour l'entrĂ©e/sortie asynchrone non bloquante — ils sourient modestement. Et ils continuent silencieusement Ă  relire le « man ps », se plongent jusqu'Ă  avoir les yeux en sang dans le code source de « nginx » et Ă©crivent, Ă©crivent, Ă©crivent des tests unitaires. Les collĂšgues savent que le plus intĂ©ressant est Ă  venir, lorsque « tout cela » deviendra un cauchemar au rĂ©veillon du Nouvel An. Et la seule chose qui les sauvera sera une comprĂ©hension profonde de la nature d'unix, de la table d'Ă©tats TCP/IP dans la tĂȘte et des algorithmes de tri et de recherche de base. Pour redonner vie au systĂšme au son des cloches.

Ah oui, je me suis un peu éloigné, mais j'espÚre avoir transmis un état d'anticipation.
Aujourd'hui, je veux partager notre expérience de déploiement d'une pile pratique et abordable pour DataLake, répondant à la majorité des besoins analytiques de l'entreprise pour des départements structurels trÚs variés.

Il y a quelque temps, nous avons réalisé que les entreprises avaient de plus en plus besoin des résultats tant de l'analytique produit que technique (sans parler des cerises sur le gùteau que sont le machine learning) et qu'il fallait collecter et analyser de plus en plus de métriques pour comprendre les tendances et les risques.

L'analytique technique de base dans « Bitrix24 »

Il y a quelques annĂ©es, en mĂȘme temps que le lancement du service « Bitrix24 », nous avons investi activement du temps et des ressources dans la crĂ©ation d'une plateforme analytique simple et fiable, qui permettrait de repĂ©rer rapidement les problĂšmes dans l'infrastructure et de planifier les Ă©tapes suivantes. Bien entendu, il Ă©tait prĂ©fĂ©rable de choisir des outils prĂȘts Ă  l'emploi, simples et comprĂ©hensibles. En fin de compte, nous avons choisi nagios pour le monitoring et munin pour l'analyse et la visualisation. Maintenant, nous avons des milliers de vĂ©rifications dans nagios, des centaines de graphiques dans munin, et nos collĂšgues les utilisent quotidiennement et avec succĂšs. Les mĂ©triques sont claires, les graphiques sont limpides, le systĂšme fonctionne de maniĂšre fiable depuis plusieurs annĂ©es et de nouveaux tests et graphiques y sont rĂ©guliĂšrement ajoutĂ©s : lorsque nous mettons un nouveau service en production, nous ajoutons quelques tests et graphiques. Bon voyage.

Avoir le pouls — analytics techniques avancĂ©es

Le dĂ©sir d'obtenir des informations sur les problĂšmes « le plus rapidement possible » nous a conduits Ă  expĂ©rimenter activement avec des outils simples et comprĂ©hensibles — pinba et xhprof.

Pinba nous envoyait par paquets UDP des statistiques sur la vitesse de fonctionnement des parties des pages web sur PHP et il Ă©tait possible de voir en temps rĂ©el dans le stockage MySQL (pinba utilise son propre moteur MySQL pour une analyse rapide des Ă©vĂ©nements) une courte liste de problĂšmes et d’y rĂ©agir. Xhprof permettait en mode automatique de collecter les graphes d'exĂ©cution des pages PHP les plus lentes chez les clients et d'analyser ce qui pouvait en ĂȘtre la cause — tranquillement, en se servant une tasse de thĂ© ou quelque chose de plus fort.

Il y a quelque temps, les outils ont Ă©tĂ© enrichis d'un autre moteur assez simple et comprĂ©hensible basĂ© sur un algorithme d'indexation inversĂ©e, magnifiquement rĂ©alisĂ© dans la lĂ©gendaire bibliothĂšque Lucene — Elastic/Kibana. La simple idĂ©e d'enregistrement multithread de documents dans l'index inversĂ© de Lucene basĂ© sur des Ă©vĂ©nements dans les journaux et de recherche rapide Ă  l'aide d'une division en facettes s'est avĂ©rĂ©e, en effet, trĂšs utile.

MalgrĂ© l'aspect assez technique des visualisations dans Kibana avec des concepts de bas niveau tels que « bucket » et un langage rĂ©inventĂ© de l'algĂšbre relationnelle qui n'est pas encore oubliĂ© — l'outil nous a Ă©tĂ© trĂšs utile pour les tĂąches suivantes :

  • Combien d'erreurs PHP a eu le client Bitrix24 sur le portail p1 au cours de la derniĂšre heure et lesquelles ? Comprendre, pardonner et corriger rapidement.
  • Combien d'appels vidĂ©o ont Ă©tĂ© effectuĂ©s sur les portails en Allemagne au cours des derniĂšres 24 heures, avec quelle qualitĂ© et y a-t-il eu des problĂšmes avec le canal/rĂ©seau ?
  • Comment fonctionne la fonctionnalitĂ© systĂšme (notre extension en C pour PHP), compilĂ©e Ă  partir des sources dans la derniĂšre mise Ă  jour du service et dĂ©ployĂ©e aux clients ? Y a-t-il des segfaults ?
  • Les donnĂ©es des clients sont-elles stockĂ©es dans la mĂ©moire PHP ? Y a-t-il des erreurs de dĂ©passement de mĂ©moire allouĂ©e aux processus : « out of memory » ? Trouvez et corrigez-le.

Voici un exemple concret. Malgré des tests approfondis et multilbles, un client a rencontré une erreur déroutante et inattendue dans un cas trÚs atypique avec des données d'entrée corrompues, une alarme s'est déclenchée et le processus de correction rapide a commencé :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

De plus, Kibana permet d'organiser des alertes sur des Ă©vĂ©nements spĂ©cifiĂ©s et en peu de temps, des dizaines d'employĂ©s de diffĂ©rents dĂ©partements — de l'assistance technique au dĂ©veloppement en passant par le QA — ont commencĂ© Ă  utiliser cet outil.

L'activitĂ© de chaque dĂ©partement au sein de l'entreprise est dĂ©sormais facile Ă  suivre et Ă  mesurer — au lieu d'une analyse manuelle des journaux sur les serveurs, il suffit de configurer une fois le parsing des journaux et leur envoi vers un cluster Elastic, pour apprĂ©cier, par exemple, le nombre de chatons Ă  deux tĂȘtes imprimĂ©s en 3D vendus au cours du dernier mois lunaire sur un tableau de bord Kibana.

Analyse d'affaires de base

Tout le monde sait que l'analyse d'affaires dans les entreprises commence souvent par une utilisation extrĂȘmement active, oui, oui, d'Excel. Mais, surtout, il ne faut pas que cela s'arrĂȘte lĂ . Le cloud Google Analytics alimente encore un peu plus le feu — on s'habitue rapidement aux bonnes choses.

Dans notre entreprise en pleine croissance, des « prophĂštes » d'une travail plus intensif avec des donnĂ©es plus volumineuses ont commencĂ© Ă  apparaĂźtre ici et lĂ . Il est devenu nĂ©cessaire de produire des rapports plus approfondis et variĂ©s et, grĂące aux efforts des Ă©quipes de diffĂ©rents dĂ©partements, une solution simple et pratique a Ă©tĂ© mise en place il y a quelque temps — la combinaison de ClickHouse et PowerBI.

Pendant un certain temps, cette solution flexible a bien fonctionné, mais il est devenu progressivement clair que ClickHouse n'est pas élastique et qu'on ne peut pas l'exploiter de cette maniÚre.

Il est important de comprendre que ClickHouse, tout comme Druid, Vertica et Amazon RedShift (qui est basé sur Postgres), sont des moteurs d'analyse optimisés pour une analyse assez conviviale (sommes, agrégations, minimum-maximum sur une colonne et quelques jointures), car ils sont conçus pour un stockage efficace des colonnes des tables relationnelles, contrairement à MySQL et aux autres bases de données orientées ligne.

En essence, ClickHouse n'est rien de plus qu'une « base » de donnĂ©es plus spacieuse, avec une insertion ponctuelle pas trĂšs pratique (c'est intentionnel, tout va bien), mais avec une analyse agrĂ©able et un ensemble de fonctions puissantes pour travailler avec les donnĂ©es. Oui, on peut mĂȘme crĂ©er un cluster — mais vous comprenez que battre des clous avec un microscope n'est pas tout Ă  fait correct et nous avons commencĂ© Ă  chercher d'autres solutions.

La demande pour Python et les analystes

Dans notre entreprise, il y a beaucoup de développeurs qui codent presque tous les jours depuis 10 à 20 ans en PHP, JavaScript, C#, C/C++, Java, Go, Rust, Python, Bash. Il y a également de nombreux administrateurs systÚmes expérimentés, ayant vécu des catastrophes incroyables qui ne rentrent pas dans les lois de la statistique (par exemple, quand la plupart des disques en RAID-10 sont détruits par un coup de foudre). Dans ces conditions, il était longtemps difficile de comprendre ce qu'était un « analyste Python ». Python, c'est comme PHP, juste un nom un peu plus long et avec moins de traces de substances altérant la conscience dans le code source de l'interpréteur. Cependant, alors que de nouveaux rapports analytiques étaient continuellement créés, les développeurs expérimentés ont réalisé de plus en plus l'importance d'une spécialisation dans des outils comme numpy, pandas, matplotlib, seaborn.
Le rÎle décisif a probablement été joué par les évanouissements soudains des employés à cause de l'association des mots « régression logistique » et la démonstration de la construction efficace de rapports sur de grands volumes de données grùce à, oui, pyspark.

Apache Spark, sa paradigme fonctionnelle sur laquelle l'algÚbre relationnelle s'applique parfaitement, a tellement impressionné les développeurs habitués à MySQL que la nécessité de renforcer les rangs avec des analystes expérimentés est devenue aussi claire que le jour.

Les tentatives ultérieures d'Apache Spark/Hadoop de réussir et ce qui ne s'est pas exactement passé comme prévu

Cependant, il est vite devenu clair qu'il y avait quelque chose de systĂ©mique qui clochait avec Spark, ou peut-ĂȘtre qu'il fallait simplement mieux se laver les mains. Si la stack Hadoop/MapReduce/Lucene Ă©tait dĂ©veloppĂ©e par des programmeurs expĂ©rimentĂ©s, ce qui est Ă©vident si l'on examine minutieusement le code source en Java ou les idĂ©es de Doug Cutting dans Lucene, Spark, lui, est soudainement Ă©crit dans un langage exotique en voie de disparition et discutable du point de vue de la praticitĂ© : Scala. La chute rĂ©guliĂšre des calculs sur un cluster Spark due Ă  une gestion de la mĂ©moire pour les opĂ©rations de rĂ©duction (un grand nombre de clĂ©s apparaissent d'un coup) a créé autour de lui une aura de quelque chose qui a encore beaucoup de chemin Ă  parcourir. De plus, la situation Ă©tait aggravĂ©e par un grand nombre de ports ouverts Ă©tranges, de fichiers temporaires qui poussaient dans les endroits les plus incomprĂ©hensibles et une multitude de dĂ©pendances jar — ce qui suscitait chez les administrateurs systĂšmes un sentiment bien connu depuis l'enfance : une haine fĂ©roce (Ă  moins qu'il n'ait fallu se laver les mains avec du savon).

Nous avons donc "survĂ©cu" Ă  plusieurs projets internes d'analyse, utilisant activement Apache Spark (y compris Spark Streaming, Spark SQL) et l'Ă©cosystĂšme Hadoop (et tout le reste). Bien que, avec le temps, nous ayons appris Ă  "prĂ©parer" cela correctement et Ă  le surveiller, et qu'il ait pratiquement cessĂ© de tomber de maniĂšre inattendue Ă  cause de la nature changeante des donnĂ©es et du dĂ©sĂ©quilibre du hachage uniforme des RDD, le dĂ©sir de prendre quelque chose de dĂ©jĂ  prĂȘt, mis Ă  jour et administrĂ© quelque part dans le cloud est devenu de plus en plus pressant. C'est Ă  cette Ă©poque que nous avons essayĂ© d'utiliser une distribution cloud prĂȘte d'Amazon Web Services — EMR et, par la suite, nous avons essayĂ© de rĂ©soudre des problĂšmes sur cette plateforme. EMR c'est une version d'Apache Spark prĂ©parĂ©e par Amazon avec un logiciel supplĂ©mentaire de l'Ă©cosystĂšme, un peu comme les distributions Cloudera/Hortonworks.

Un espace de stockage "flexible" pour l'analytique — un besoin urgent

L'expĂ©rience de "prĂ©parer" Hadoop/Spark avec des brĂ»lures sur diffĂ©rentes parties du corps n'est pas passĂ©e inaperçue. La nĂ©cessitĂ© de crĂ©er un espace de stockage fiable et peu coĂ»teux, rĂ©sistant aux pannes matĂ©rielles, se dessinait de plus en plus clairement. Cet espace devrait permettre de stocker des fichiers dans diffĂ©rents formats en provenance de diffĂ©rents systĂšmes et d'effectuer des requĂȘtes efficaces et exĂ©cutables dans des dĂ©lais raisonnables pour les rapports.

Il Ă©tait Ă©galement souhaitable que la mise Ă  jour des logiciels de cette plateforme ne devienne pas un cauchemar nocturne de NoĂ«l, avec la lecture de trace Java de 20 pages et l'analyse de kilomĂštres de journaux dĂ©taillĂ©s du fonctionnement du cluster Ă  l'aide de Spark History Server et d'une loupe avec un Ă©clairage. Nous voulions un outil simple et transparent, qui ne nĂ©cessite pas de plonger rĂ©guliĂšrement sous le capot, si un dĂ©veloppeur cesse d'exĂ©cuter une requĂȘte MapReduce standard lorsque les donnĂ©es de rĂ©duction sortent de la mĂ©moire du worker Ă  cause d'un algorithme de partitionnement mal choisi.

Amazon S3 — candidat pour un DataLake ?

L'expĂ©rience de travail avec Hadoop/MapReduce m'a appris qu'une systĂšme de fichiers fiable et Ă©volutif est nĂ©cessaire, ainsi que des workers scalables, "proches" des donnĂ©es, afin de ne pas faire circuler les donnĂ©es sur le rĂ©seau. Les workers doivent ĂȘtre capables de lire des donnĂ©es dans diffĂ©rents formats, mais idĂ©alement, sans lire d'informations superflues et en permettant de stocker les donnĂ©es au prĂ©alable dans des formats adaptĂ©s aux workers.

Encore une fois — l'idĂ©e principale. Nous n'avons pas envie de « dĂ©verser » de grandes donnĂ©es dans un moteur analytique clusterisĂ© unique, qui finira par se noyer tĂŽt ou tard et qu'il faudra alors shard mal. Nous souhaitons stocker des fichiers, juste des fichiers, dans un format comprĂ©hensible et exĂ©cuter sur eux des requĂȘtes analytiques efficaces avec divers outils, mais clairs. Et le nombre de fichiers dans diffĂ©rents formats ne fera qu'augmenter. Il vaut donc mieux shard les donnĂ©es source que le moteur lui-mĂȘme. Nous avons besoin d'un DataLake extensible et universel, avons-nous dĂ©cidĂ©...

Et si nous stockions des fichiers dans le traditionnel et bien connu stockage cloud Ă©volutif d'Amazon S3, sans avoir Ă  prĂ©parer nous-mĂȘmes des cĂŽtelettes Ă  partir de Hadoop ?

D'accord, les donnĂ©es personnelles ne peuvent pas ĂȘtre stockĂ©es lĂ , mais d'autres donnĂ©es, si elles sont transfĂ©rĂ©es et « efficacement traitĂ©es » ?

L'Ă©cosystĂšme d'analyse big data clusterisĂ© d'Amazon Web Services — en des termes trĂšs simples

D'aprÚs notre expérience avec AWS, Apache Hadoop/MapReduce est utilisé depuis longtemps et activement sous différentes formes, par exemple dans le service DataPipeline (je jalouse mes collÚgues, ils ont vraiment appris à bien le préparer). Ici, nous avons configuré des sauvegardes à partir de différents services des tables DynamoDB :
Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Et elles s'exécutent réguliÚrement sur des clusters Hadoop/MapReduce intégrés comme une horloge depuis plusieurs années. « Configuré et oublié » :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Il est également possible de pratiquer efficacement le data-satanisme en déployant des notebooks Jupiter dans le cloud pour les analystes et en utilisant le service AWS SageMaker pour l'entraßnement et le déploiement des modÚles d'IA. Voici à quoi cela ressemble chez nous :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Et oui, on peut déployer un notebook dans le cloud pour soi ou pour un analyste et le connecter à un cluster Hadoop/Spark, effectuer des calculs et ensuite tout "clouer" :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

C'est vraiment pratique pour des projets analytiques individuels et pour certains, nous avons rĂ©ussi Ă  utiliser le service EMR pour des calculs et des analyses Ă  grande Ă©chelle. Qu'en est-il de la solution systĂ©mique pour DataLake, sera-t-elle possible ? À ce moment-lĂ , nous Ă©tions Ă  la frontiĂšre de l'espoir et du dĂ©sespoir et nous poursuivions notre recherche.

AWS Glue - une version d'Apache Spark "stéroïdée" bien emballée

Il s'est avéré qu'AWS a sa propre version de la stack "Hive/Pig/Spark". Le rÎle de Hive, c'est-à-dire le catalogue des fichiers et de leurs types dans le DataLake, est rempli par le service "Data catalog", qui ne cache pas sa compatibilité avec le format Apache Hive. Il faut ajouter des informations à ce service sur l'emplacement de vos fichiers et sur leur format. Les données peuvent se trouver non seulement dans S3, mais aussi dans une base de données, mais ce n'est pas le sujet de ce post. Voici comment notre catalogue de données DataLake est organisé :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Les fichiers sont enregistrĂ©s, excellent. Si les fichiers sont mis Ă  jour, nous lançons soit manuellement soit selon un calendrier des crawlers qui mettront Ă  jour les informations Ă  leur sujet depuis le lac et les sauvegarderont. Ensuite, les donnĂ©es du lac peuvent ĂȘtre traitĂ©es et les rĂ©sultats peuvent ĂȘtre exportĂ©s quelque part. Dans le cas le plus simple, nous les exportons aussi vers S3. Le traitement des donnĂ©es peut ĂȘtre effectuĂ© n'importe oĂč, mais il est suggĂ©rĂ© de configurer le processus de traitement sur un cluster Apache Spark en utilisant les fonctionnalitĂ©s avancĂ©es via l'API AWS Glue. En fait, on peut prendre le vieux et familier code en Python avec la bibliothĂšque pyspark et configurer son exĂ©cution sur N nƓuds d'un cluster d'une certaine puissance avec monitoring, sans avoir Ă  fouiller dans les entrailles de Hadoop, traĂźner des conteneurs Docker et rĂ©soudre les conflits de dĂ©pendances.

Encore une fois - une idĂ©e simple. Il n'est pas nĂ©cessaire de configurer Apache Spark, il suffit d'Ă©crire du code en Python pour pyspark, de le tester localement sur le bureau, puis de le lancer sur un grand cluster dans le cloud, en indiquant oĂč se trouvent les donnĂ©es sources et oĂč mettre le rĂ©sultat. Parfois, c'est nĂ©cessaire et utile, et voici comment cela est configurĂ© chez nous :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Ainsi, si vous devez effectuer des calculs sur un cluster Spark avec des données dans S3, écrivez du code en Python/pyspark, testez-le et en route vers le cloud.

Qu'en est-il de l'orchestration ? Que se passe-t-il si une tĂąche Ă©choue et disparaĂźt ? Oui, on propose de crĂ©er un pipeline esthĂ©tique Ă  la maniĂšre d'Apache Pig, et nous l'avons mĂȘme essayĂ©, mais nous avons dĂ©cidĂ© de continuer Ă  utiliser notre orchestration profondĂ©ment personnalisĂ©e en PHP et JavaScript (je comprends qu'il y a un dĂ©calage cognitif, mais ça fonctionne, et ce, sans erreurs depuis des annĂ©es).

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Le format des fichiers stockés dans le lac de données est la clé de la performance.

Il est trĂšs, trĂšs important de comprendre deux autres points clĂ©s. Afin que les requĂȘtes sur les fichiers dans le lac de donnĂ©es soient exĂ©cutĂ©es le plus rapidement possible et que la performance ne se dĂ©grade pas lors de l'ajout de nouvelles informations, il faut :

  • Stocker les colonnes des fichiers sĂ©parĂ©ment (pour ne pas avoir Ă  lire toutes les lignes pour comprendre ce qu'il y a dans les colonnes). Pour cela, nous avons choisi le format Parquet avec compression.
  • Il est trĂšs important de shard les fichiers en dossiers comme : langue, annĂ©e, mois, jour, semaine. Les moteurs qui comprennent ce type de sharding ne regarderont que dans les bons dossiers, sans avoir Ă  fouiller dans toutes les donnĂ©es en continu.

En fait, de cette maniĂšre, vous prĂ©parez les donnĂ©es brutes dans le format le plus efficace pour les moteurs analytiques qui peuvent accĂ©der sĂ©lectivement aux dossiers shardĂ©s et lire uniquement les colonnes nĂ©cessaires. Il n'est pas nĂ©cessaire de "charger" les donnĂ©es ailleurs (le stockage finirait par exploser) — il suffit de les placer directement dans le systĂšme de fichiers dans le bon format. Bien entendu, il doit ĂȘtre clair qu'il n'est pas trĂšs judicieux de stocker un Ă©norme fichier CSV dans un DataLake, qui doit d'abord ĂȘtre lu ligne par ligne par le cluster pour en extraire les colonnes. RĂ©flĂ©chissez encore une fois Ă  ces deux points mentionnĂ©s ci-dessus si cela n'est pas encore clair.

AWS Athena — le "diable" dans la boüte.

Et ici, en créant le lac de données, nous sommes tombés presque par hasard sur Amazon Athena. Il s'est avéré que, en rangeant soigneusement nos fichiers de journaux énormes par dossiers shardés dans le bon format (Parquet), il est possible d'effectuer des sélections trÚs informatives et de générer des rapports SANS cluster Apache Spark/Glue trÚs rapidement.

Le moteur Athena, qui fonctionne sur les donnĂ©es dans S3, est basĂ© sur la lĂ©gendaire. Presto — reprĂ©sentant de la famille MPP (traitement parallĂšle massif) pour le traitement des donnĂ©es, prenant les donnĂ©es lĂ  oĂč elles sont, de s3 et Hadoop Ă  Cassandra et des fichiers texte ordinaires. Il suffit de demander Ă  Athena d'exĂ©cuter une requĂȘte SQL, et ensuite tout « fonctionne rapidement et tout seul ». Il est important de noter qu'Athena est « intelligente », elle ne va que dans les dossiers shardĂ©s nĂ©cessaires et ne lit que les colonnes requises dans la requĂȘte.

Les requĂȘtes Ă  Athena sont Ă©galement tarifĂ©es de maniĂšre intĂ©ressante. Nous payons pour le volume de donnĂ©es scannĂ©es. C'est-Ă -dire, pas pour le nombre de machines dans le cluster par minute, mais
 pour les donnĂ©es rĂ©ellement scannĂ©es sur 100-500 machines, uniquement celles nĂ©cessaires Ă  l'exĂ©cution de la requĂȘte.

Et en ne demandant que les colonnes nécessaires des bons dossiers shardés, il s'est avéré que le service Athena nous coûte des dizaines de dollars par mois. Eh bien, c'est presque gratuit, comparé à l'analyse sur des clusters !

Voici comment nous shardons nos données dans s3 :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

En consĂ©quence, en peu de temps, des dĂ©partements trĂšs diffĂ©rents au sein de l'entreprise, de la sĂ©curitĂ© de l'information Ă  l'analyse, ont commencĂ© Ă  faire des requĂȘtes Ă  Athena et Ă  obtenir rapidement, en quelques secondes, des rĂ©ponses utiles Ă  partir de « grandes » donnĂ©es sur des pĂ©riodes assez longues : mois, semestre, etc.

Mais nous sommes allĂ©s plus loin et avons commencĂ© Ă  chercher des rĂ©ponses dans le cloud via un pilote ODBC: un analyste dans sa console habituelle Ă©crit une requĂȘte SQL, qui scrute les donnĂ©es dans s3 sur 100-500 machines « pour quelques centimes » et retourne gĂ©nĂ©ralement une rĂ©ponse en moins de secondes. Pratique. Et rapide. Je n'arrive toujours pas Ă  y croire.

En fin de compte, ayant dĂ©cidĂ© de stocker les donnĂ©es dans s3, dans un format colonne efficace et avec un sharding raisonnable des donnĂ©es par dossiers
 nous avons obtenu un DataLake et un moteur analytique rapide et bon marchĂ© — gratuitement. Et il est devenu trĂšs populaire dans l'entreprise, car il comprend SQL et fonctionne des ordres de grandeurs plus rapidement que par le biais de lancements/arrĂȘts/rĂ©glages de clusters. « Et si le rĂ©sultat est le mĂȘme, pourquoi payer plus ? »

Une requĂȘte Ă  Athena ressemble Ă  peu prĂšs Ă  cela. Si on le souhaite, bien sĂ»r, on peut formuler une requĂȘte SQL assez complexe et multi-pages, mais nous nous limiterons Ă  un simple regroupement. Voyons quels codes rĂ©ponses le client avait il y a quelques semaines dans les journaux de fonctionnement du serveur web et vĂ©rifions qu'il n'y a pas d'erreurs :

Comment nous avons organisé un DataLake hautement efficace et peu coûteux et pourquoi nous avons choisi cette approche

Conclusions

AprÚs un parcours qui n'était pas si long mais douloureux, en évaluant constamment les risques et le niveau de complexité ainsi que le coût de maintenance, nous avons trouvé une solution pour le DataLake et l'analyse qui nous ravit tant par sa rapidité que par son coût de possession.

Il s'est avĂ©rĂ© que construire un DataLake efficace, rapide et peu coĂ»teux Ă  exploiter pour les besoins de diffĂ©rentes unitĂ©s de l'entreprise est parfaitement rĂ©alisable mĂȘme pour des dĂ©veloppeurs expĂ©rimentĂ©s, qui n'ont jamais Ă©tĂ© architectes et qui ne savent pas dessiner des carrĂ©s avec des flĂšches tout en connaissant 50 termes de l'Ă©cosystĂšme Hadoop.

Au début, j'étais complÚtement perdu face à la multitude de logiciels open source et propriétaires, et à la lourdeur de la responsabilité envers les générations futures. Commencez simplement à construire votre DataLake avec des outils basiques : nagios/munin -> elastic/kibana -> Hadoop/Spark/s3..., en collectant des retours et en comprenant profondément la physique des processus. Laissez les aspects complexes et flous à vos concurrents.

Si vous ne souhaitez pas passer au cloud et prĂ©fĂ©rez maintenir, mettre Ă  jour et patcher des projets open source, vous pouvez construire une architecture similaire Ă  la nĂŽtre localement, sur de petites machines de bureau avec Hadoop et Presto au-dessus. L'essentiel est de ne pas s'arrĂȘter, d'aller de l'avant, de compter, de rechercher des solutions simples et claires, et tout ira bien ! Bonne chance Ă  tous et Ă  bientĂŽt !

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster