{"id":92508,"date":"2020-08-28T07:42:10","date_gmt":"2020-08-28T05:42:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak"},"modified":"2020-08-28T07:42:10","modified_gmt":"2020-08-28T05:42:10","slug":"kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak","title":{"rendered":"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u017byjemy w niezwyk\u0142ych czasach, kiedy mo\u017cna szybko i \u0142atwo po\u0142\u0105czy\u0107 kilka gotowych narz\u0119dzi open source, skonfigurowa\u0107 je z \"wy\u0142\u0105czonym umys\u0142em\" na podstawie porad ze stackoverflow, nie wg\u0142\u0119biaj\u0105c si\u0119 w \"wielkie litery\" i wprowadzi\u0107 do u\u017cytku komercyjnego. A kiedy przyjdzie czas na aktualizacje\/rozszerzenia lub kto\u015b przypadkowo zrestartuje kilka maszyn \u2014 zrozumie\u0107, \u017ce rozpocz\u0105\u0142 si\u0119 jaki\u015b natr\u0119tny z\u0142y sen na jawie, wszystko nagle sta\u0142o si\u0119 nie do poznania, nie ma drogi powrotnej, przysz\u0142o\u015b\u0107 jest niepewna i bezpieczniej jest zamiast programowania hodowa\u0107 pszczo\u0142y i robi\u0107 ser.<\/p>\n<p>Nie ma w tym nic dziwnego, \u017ce bardziej do\u015bwiadczeni koledzy, z g\u0142owami posypanymi siwizn\u0105 od b\u0142\u0119d\u00f3w, kontempluj\u0105c nieprawdopodobnie szybkie wdro\u017cenie paczek \"kontener\u00f3w\" w \"kostkach\" na dziesi\u0105tkach serwer\u00f3w w \"modnych j\u0119zykach\" z wbudowan\u0105 obs\u0142ug\u0105 asynchronicznego, nieblokuj\u0105cego wej\u015bcia-wyj\u015bcia \u2014 skromnie si\u0119 u\u015bmiechaj\u0105. I milcz\u0105co wci\u0105\u017c przegl\u0105daj\u0105 \"man ps\", do krwi w oczy wg\u0142\u0119biaj\u0105 si\u0119 w \u017ar\u00f3d\u0142a \"nginx\" i pisz\u0105-pisz\u0105-pisz\u0105 testy jednostkowe. Koledzy wiedz\u0105, \u017ce najciekawsza cz\u0119\u015b\u0107 dopiero przed nimi, kiedy \"to wszystko\" pewnej nocy stanie si\u0119 koszmarem przed Nowym Rokiem. Ich jedyn\u0105 pomoc\u0105 b\u0119dzie g\u0142\u0119boka znajomo\u015b\u0107 natury unix, zapami\u0119tane tabele stan\u00f3w TCP\/IP oraz podstawowe algorytmy sortowania i wyszukiwania.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAch tak, troch\u0119 zszed\u0142em z tematu, ale mam nadziej\u0119, \u017ce uda\u0142o si\u0119 odda\u0107 stan oczekiwania.<br \/>\nDzi\u015b chcia\u0142bym podzieli\u0107 si\u0119 naszym do\u015bwiadczeniem w wdra\u017caniu wygodnego i niedrogiego stosu dla DataLake, kt\u00f3ry rozwi\u0105zuje wi\u0119kszo\u015b\u0107 problem\u00f3w analitycznych w firmie dla zupe\u0142nie r\u00f3\u017cnych dzia\u0142\u00f3w.<\/p>\n<p>Jaki\u015b czas temu doszli\u015bmy do zrozumienia, \u017ce firmy coraz bardziej potrzebuj\u0105 owoc\u00f3w zar\u00f3wno analityki produktowej, jak i technicznej (nie wspominaj\u0105c o \"wisienkach na torcie\" w postaci machine learning) i aby zrozumie\u0107 trendy i ryzyka \u2014 trzeba gromadzi\u0107 i analizowa\u0107 coraz wi\u0119cej i wi\u0119cej metryk.<\/p>\n<h3>Podstawowa analityka techniczna w \"Bitrix24\"<\/h3>\n<p>\nKilka lat temu, r\u00f3wnocze\u015bnie z uruchomieniem serwisu \u201eBitrix24\u201d, aktywnie inwestowali\u015bmy czas i zasoby w stworzenie prostej i niezawodnej platformy analitycznej, kt\u00f3ra pomog\u0142aby szybko dostrzega\u0107 problemy w infrastrukturze i zaplanowa\u0107 najbli\u017cszy krok. Oczywi\u015bcie, woleli\u015bmy skorzysta\u0107 z gotowych narz\u0119dzi, maksymalnie prostych i intuicyjnych. W rezultacie wybrano nagios do monitorowania oraz munin do analityki i wizualizacji. Teraz mamy tysi\u0105ce kontroli w nagiosie, setki wykres\u00f3w w muninie, a koledzy codziennie i skutecznie z nich korzystaj\u0105. Metryki s\u0105 zrozumia\u0142e, wykresy klarowne, system dzia\u0142a niezawodnie od kilku lat, a regularnie dodawane s\u0105 nowe testy i wykresy: wprowadzamy now\u0105 us\u0142ug\u0119 do eksploatacji \u2014 dodajemy kilka test\u00f3w i wykres\u00f3w. Powodzenia.<\/p>\n<h3>R\u0119ka na pulsie \u2014 rozszerzona analiza techniczna<\/h3>\n<p>\nPragnienie uzyskania informacji o problemach \u201ejak najszybciej\u201d sk\u0142oni\u0142o nas do aktywnych eksperyment\u00f3w z prostymi i przejrzystymi narz\u0119dziami \u2014 pinba i xhprof.<\/p>\n<p>Pinba przesy\u0142a\u0142a nam w pakietach UDP statystyki dotycz\u0105ce pr\u0119dko\u015bci dzia\u0142ania cz\u0119\u015bci stron internetowych na PHP, a w trybie online mogli\u015bmy zobaczy\u0107 w magazynie MySQL (pinba dostarcza w\u0142asny silnik MySQL do szybkiej analizy zdarze\u0144) kr\u00f3tki wykaz problem\u00f3w i szybko na nie reagowa\u0107. A xhprof automatycznie zbiera\u0142 wykresy wykonania najwolniejszych stron PHP klient\u00f3w i analizowa\u0142, co mog\u0142o do tego prowadzi\u0107 \u2014 na spokojnie, popijaj\u0105c herbat\u0119 lub co\u015b mocniejszego.<\/p>\n<p>Jaki\u015b czas temu narz\u0119dzia zosta\u0142y wzbogacone o kolejny, do\u015b\u0107 prosty i przejrzysty silnik oparty na algorytmie indeksowania odwrotnego, doskonale zaimplementowany w legendarnej bibliotece Lucene \u2014 Elastic\/Kibana. Prosta idea wielow\u0105tkowego zapisu dokument\u00f3w do indeksu odwrotnego Lucene w oparciu o zdarzenia w logach oraz szybkie wyszukiwanie z u\u017cyciem podzia\u0142u na fasety \u2014 okaza\u0142a si\u0119 naprawd\u0119 przydatna.<\/p>\n<p>Pomimo do\u015b\u0107 technicznego wygl\u0105du wizualizacji w Kibanie z \u201eprzeciekaj\u0105cymi w g\u00f3r\u0119\u201d niskopoziomowymi koncepcjami typu \u201ebucket\u201d i na nowo wynalezionym j\u0119zykiem zapomnianej r\u00f3wno\u015bci algebraicznej \u2014 narz\u0119dzie sta\u0142o si\u0119 dla nas du\u017c\u0105 pomoc\u0105 w nast\u0119puj\u0105cych zadaniach:<\/p>\n<ul>\n<li>Ile b\u0142\u0119d\u00f3w PHP mia\u0142a klient Bitrix24 na portalu p1 w ci\u0105gu ostatniej godziny i jakie to by\u0142y? Zrozumie\u0107, wybaczy\u0107 i szybko naprawi\u0107.<\/li>\n<li>Ile wideo po\u0142\u0105cze\u0144 zosta\u0142o zrealizowanych na portalach w Niemczech w ci\u0105gu ostatnich 24 godzin, w jakiej jako\u015bci i czy wyst\u0105pi\u0142y problemy z kana\u0142em\/sieci\u0105?<\/li>\n<li>Jak dobrze dzia\u0142a funkcjonalno\u015b\u0107 systemu (nasze rozszerzenie w C dla PHP), skompilowana z \u017ar\u00f3de\u0142 w ostatniej aktualizacji serwisu i wypuszczona dla klient\u00f3w? Czy nie ma segfault\u00f3w?<\/li>\n<li>Czy dane klient\u00f3w s\u0105 przechowywane w pami\u0119ci PHP? Czy nie wyst\u0119puj\u0105 b\u0142\u0119dy przekroczenia przydzielonej pami\u0119ci proces\u00f3w: \u201eout of memory\u201d? Znale\u017a\u0107 i neutralizowa\u0107.<\/li>\n<\/ul>\n<p>\nOto konkretny przyk\u0142ad. Mimo dok\u0142adnego i wielowarstwowego testowania, klient w bardzo nietypowym przypadku i z uszkodzonymi danymi wej\u015bciowymi napotka\u0142 nieprzyjemny i niespodziewany b\u0142\u0105d. Rozleg\u0142 si\u0119 sygna\u0142 alarmowy i rozpocz\u0119to proces szybkiej naprawy:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/8a802dba41b5d1a85c0dc41dfbf8b84e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDodatkowo, kibana umo\u017cliwia organizacj\u0119 powiadomie\u0144 o wskazanych zdarzeniach i w kr\u00f3tkim czasie z narz\u0119dzia zacz\u0119\u0142o korzysta\u0107 dziesi\u0105tki pracownik\u00f3w z r\u00f3\u017cnych dzia\u0142\u00f3w \u2014 od wsparcia technicznego i rozwoju po QA.<\/p>\n<p>Aktywno\u015b\u0107 ka\u017cdego dzia\u0142u w firmie sta\u0142a si\u0119 \u0142atwa do \u015bledzenia i mierzenia \u2014 zamiast r\u0119cznej analizy log\u00f3w na serwerach wystarczy raz skonfigurowa\u0107 parsowanie log\u00f3w i ich wysy\u0142anie do klastra elastic, aby cieszy\u0107 si\u0119 na przyk\u0142ad obserwowaniem w dashboardzie kibana liczby sprzedanych dwug\u0142owych koci\u0105t, wydrukowanych na drukarce 3D w zesz\u0142ym miesi\u0105cu ksi\u0119\u017cycowym.<\/p>\n<h3>Podstawowa analiza biznesowa<\/h3>\n<p>\nWszystkie firmy wiedz\u0105, \u017ce cz\u0119sto analiza biznesowa zaczyna si\u0119 od ekstremalnie aktywnego korzystania, tak, tak, z Excela. Ale najwa\u017cniejsze, aby na nim si\u0119 nie sko\u0144czy\u0142a. Dobrze robi jeszcze chmurny Google Analytics \u2014 do dobrego szybko si\u0119 przyzwyczajamy.<\/p>\n<p>W naszej, harmonijnie rozwijaj\u0105cej si\u0119 firmie, zacz\u0119li si\u0119 pojawia\u0107 \"prorocy\" bardziej intensywnej pracy z wi\u0119kszymi danymi. Regularnie pojawia\u0142y si\u0119 wymagania dotycz\u0105ce g\u0142\u0119bszych i bardziej wieloaspektowych raport\u00f3w, a staraniami ch\u0142opak\u00f3w z r\u00f3\u017cnych dzia\u0142\u00f3w zorganizowano proste i praktyczne rozwi\u0105zanie \u2014 po\u0142\u0105czenie ClickHouse i PowerBI.<\/p>\n<p>Przez do\u015b\u0107 d\u0142ugi czas to elastyczne rozwi\u0105zanie doskonale pomaga\u0142o, ale stopniowo zacz\u0119\u0142o dociera\u0107 zrozumienie, \u017ce ClickHouse \u2014 nie jest gumowy i nie mo\u017cna nad nim tak si\u0119 zn\u0119ca\u0107.<\/p>\n<p>Wa\u017cne jest, aby dobrze zrozumie\u0107, \u017ce ClickHouse, podobnie jak Druid, Vertica czy Amazon RedShift (kt\u00f3ry bazuje na Postgres), to silniki analityczne zoptymalizowane do wygodnej analizy (suma, agregacje, minimum-maksimum w kolumnach i troch\u0119 mo\u017cna do\u0142\u0105cza\u0107), poniewa\u017c s\u0105 zorganizowane dla efektywnego przechowywania kolumn r tabeli relacyjnych, w przeciwie\u0144stwie do znanego nam MySQL i innych baz danych (o uk\u0142adzie wierszy).<\/p>\n<p>W istocie ClickHouse to jedynie bardziej pojemna \u201ebaza\u201d danych, z niezbyt wygodnym wstawianiem punktowym (tak zaplanowane, wszystko w porz\u0105dku), ale z przyjemn\u0105 analityk\u0105 i zestawem interesuj\u0105cych, pot\u0119\u017cnych funkcji do pracy z danymi. Tak, mo\u017cna nawet stworzy\u0107 klaster \u2014 ale rozumiecie, \u017ce nie jest ca\u0142kiem poprawne u\u017cywa\u0107 mikroskopu do wbijania gwo\u017adzi i zacz\u0119li\u015bmy szuka\u0107 innych rozwi\u0105za\u0144.<\/p>\n<h3>Popyt na Pythona i analityk\u00f3w<\/h3>\n<p>\nW naszej firmie jest wielu programist\u00f3w, kt\u00f3rzy pisz\u0105 kod prawie ka\u017cdego dnia przez 10-20 lat w PHP, JavaScript, C#, C\/C++, Java, Go, Rust, Python, Bash. Mamy r\u00f3wnie\u017c wielu do\u015bwiadczonych administrator\u00f3w system\u00f3w, kt\u00f3rzy przeszli przez niejedn\u0105 ca\u0142kowicie niewiarygodn\u0105 katastrof\u0119, kt\u00f3ra nie mie\u015bci si\u0119 w prawach statystyki (na przyk\u0142ad, gdy wi\u0119kszo\u015b\u0107 dysk\u00f3w w RAID-10 zostaje zniszczona podczas silnego uderzenia pioruna). W takich warunkach przez d\u0142ugi czas nie by\u0142o jasne, czym jest \u201eanalityk w Pythonie\u201d. Python jest jak PHP, tylko nazwa jest nieco d\u0142u\u017csza, a \u015blad substancji zmieniaj\u0105cych \u015bwiadomo\u015b\u0107 w kodzie \u017ar\u00f3d\u0142owym interpretera jest nieco mniejszy. Jednak w miar\u0119 tworzenia coraz to nowszych raport\u00f3w analitycznych do\u015bwiadczeni programi\u015bci coraz bardziej zacz\u0119li dostrzega\u0107 znaczenie w\u0105skiej specjalizacji w narz\u0119dziach takich jak numpy, pandas, matplotlib, seaborn.<br \/>\nDecyduj\u0105c\u0105 rol\u0119, prawdopodobnie, odegra\u0142y nag\u0142e omdlenia pracownik\u00f3w w wyniku po\u0142\u0105czenia s\u0142\u00f3w \u201eregresja logistyczna\u201d oraz demonstracja efektywnego tworzenia raport\u00f3w na du\u017cych zbiorach danych z pomoc\u0105, tak, tak, pyspark.<\/p>\n<p>Apache Spark, jego paradygmat funkcyjny, na kt\u00f3ry doskonale pasuje algebra relacyjna, wywar\u0142 tak ogromne wra\u017cenie na programistach przyzwyczajonych do MySQL, \u017ce konieczno\u015b\u0107 wzmocnienia szereg\u00f3w do\u015bwiadczonymi analitykami sta\u0142a si\u0119 jasna jak dzie\u0144.<\/p>\n<h3>Dalsze pr\u00f3by Apache Spark\/Hadoop wznie\u015b\u0107 si\u0119 i co posz\u0142o nie ca\u0142kiem zgodnie ze scenariuszem<\/h3>\n<p>\nJednak wkr\u00f3tce sta\u0142o si\u0119 jasne, \u017ce ze Spark, najwyra\u017aniej, co\u015b systemowo nie jest w porz\u0105dku, b\u0105d\u017a po prostu trzeba lepiej my\u0107 r\u0119ce. Je\u015bli stos Hadoop\/MapReduce\/Lucene by\u0142 tworzony przez do\u015bwiadczonych programist\u00f3w, co jest oczywiste, je\u015bli spojrze\u0107 na \u017ar\u00f3d\u0142a w Javie lub pomys\u0142y Douga Cuttinga w Lucene, to Spark, nagle, napisany jest w bardzo kontrowersyjnym z praktycznego punktu widzenia, nie rozwijaj\u0105cym si\u0119 egzotycznym j\u0119zyku Scala. A regularne awarie oblicze\u0144 w klastrze Spark z powodu nielogicznej i niezbyt przejrzystej pracy z alokacj\u0105 pami\u0119ci pod operacje reduce (wylatuje od razu wiele kluczy) \u2014 stworzy\u0142o wok\u00f3\u0142 niego aur\u0119 czego\u015b, co ma du\u017co do zrobienia. Dodatkowo sytuacj\u0119 pogarsza\u0142a du\u017ca liczba dziwnych otwartych port\u00f3w, tymczasowych plik\u00f3w rosn\u0105cych w najmniej zrozumia\u0142ych miejscach i ogromna liczba zale\u017cno\u015bci jar \u2014 co wywo\u0142ywa\u0142o u administrator\u00f3w system\u00f3w jedn\u0105, dobrze znan\u0105 od dziecka emocj\u0119: niezmiern\u0105 nienawi\u015b\u0107 (a mo\u017ce trzeba by\u0142o my\u0107 r\u0119ce myd\u0142em).<\/p>\n<p>Prze\u017cyli\u015bmy kilka wewn\u0119trznych projekt\u00f3w analitycznych, kt\u00f3re intensywnie wykorzystywa\u0142y Apache Spark (w tym Spark Streaming, Spark SQL) oraz ekosystem Hadoop (i inne temu podobne). Pomimo tego, \u017ce z czasem nauczyli\u015bmy si\u0119 dobrze przygotowywa\u0107 i monitorowa\u0107 \u201eto\u201d i \u201eono\u201d praktycznie przesta\u0142o niespodziewanie pada\u0107 z powodu zmiany charakteru danych i nier\u00f3wnowagi r\u00f3wnomiernego haszowania RDD, coraz silniejsze by\u0142o pragnienie posiadania czego\u015b ju\u017c gotowego, aktualizowanego i zarz\u0105dzanego gdzie\u015b w chmurze. W tym czasie spr\u00f3bowali\u015bmy skorzysta\u0107 z gotowej chmurowej wersji Amazon Web Services \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/emr\/\">EMR<\/a><\/noindex> i nast\u0119pnie starali\u015bmy si\u0119 rozwi\u0105zywa\u0107 zadania ju\u017c na niej. EMR to przygotowany przez Amazona Apache Spark z dodatkowym oprogramowaniem z ekosystemu, mniej wi\u0119cej jak zestaw Cloudera\/Hortonworks.<\/p>\n<h3>\u201eGumowe\u201d magazynowanie plik\u00f3w do analizy \u2014 pilna potrzeba<\/h3>\n<p>\nDo\u015bwiadczenie \u201eprzygotowywania\u201d Hadoop\/Spark z oparzeniami r\u00f3\u017cnych cz\u0119\u015bci cia\u0142a nie posz\u0142o na marne. Coraz wyra\u017aniej rysowa\u0142a si\u0119 potrzeba stworzenia jednego niedrogiego i niezawodnego magazynu plik\u00f3w, kt\u00f3ry by\u0142by odporny na awarie sprz\u0119towe i w kt\u00f3rym mo\u017cna by\u0142oby przechowywa\u0107 pliki w r\u00f3\u017cnych formatach z r\u00f3\u017cnych system\u00f3w oraz wykonywa\u0107 na tych danych efektywne i w rozs\u0105dnym czasie realizowane wybory do raport\u00f3w.<\/p>\n<p>Chcia\u0142bym, aby aktualizacja oprogramowania tej platformy nie zamienia\u0142a si\u0119 w noworoczn\u0105 nocn\u0105 koszmar z czytaniem 20-stronicowych \u015blad\u00f3w Java i analizowaniem kilometr\u00f3w szczeg\u00f3\u0142owych log\u00f3w dzia\u0142ania klastra za pomoc\u0105 Spark History Server i lupy. Chcia\u0142bym mie\u0107 prosty i przejrzysty instrument, kt\u00f3ry nie wymaga\u0142by regularnego zag\u0142\u0119biania si\u0119 w szczeg\u00f3\u0142y, je\u015bli standardowe zapytanie MapReduce przestaje dzia\u0142a\u0107 z powodu braku pami\u0119ci w\u0119z\u0142a redukuj\u0105cego dane przy nie najlepiej dobranym algorytmie partycjonowania danych \u017ar\u00f3d\u0142owych.<\/p>\n<h3>Amazon S3 - kandydat na DataLake?<\/h3>\n<p>\nDo\u015bwiadczenie z Hadoop\/MapReduce nauczy\u0142o mnie, \u017ce potrzebna jest zar\u00f3wno skalowalna, niezawodna system plik\u00f3w, jak i skalowalne w\u0119z\u0142y robocze, kt\u00f3re \"przybywaj\u0105\" bli\u017cej danych, aby nie przesy\u0142a\u0107 danych przez sie\u0107. W\u0119z\u0142y robocze powinny umie\u0107 czyta\u0107 dane w r\u00f3\u017cnych formatach, ale raczej nie powinny odczytywa\u0107 zb\u0119dnych informacji i powinny mie\u0107 mo\u017cliwo\u015b\u0107 przechowywania danych w formatach wygodnych dla w\u0119z\u0142\u00f3w roboczych.<\/p>\n<p><b>Jeszcze raz - g\u0142\u00f3wny pomys\u0142.<\/b> Nie ma ochoty na \"za\u0142adowanie\" du\u017cych danych do jednego silnika analitycznego klastra, kt\u00f3ry i tak pr\u0119dzej czy p\u00f3\u017aniej si\u0119 b\u0119dzie dusi\u0142 i b\u0119dzie konieczne jego brzydkie dzielenie. Chcia\u0142bym przechowywa\u0107 pliki, po prostu pliki, w zrozumia\u0142ym formacie i wykonywa\u0107 na nich efektywne zapytania analityczne r\u00f3\u017cnymi, ale zrozumia\u0142ymi narz\u0119dziami. A plik\u00f3w w r\u00f3\u017cnych formatach b\u0119dzie coraz wi\u0119cej. I lepiej podzieli\u0107 nie silnik, lecz dane \u017ar\u00f3d\u0142owe. Potrzebujemy skalowalnego i uniwersalnego DataLake, postanowili\u015bmy\u2026<\/p>\n<p>A co je\u015bli przechowywa\u0107 pliki w znanym i wielu osobom skalowalnym chmurze Amazon S3, nie martwi\u0105c si\u0119 o w\u0142asne przygotowanie bitewnych kotlet\u00f3w z Hadoop?<\/p>\n<p>Jasne, danych osobowych \u201enie mo\u017cna\u201d, ale inne dane, je\u015bli przenie\u015b\u0107 je tam i \u201eefektywnie nimi operowa\u0107\u201d?<\/p>\n<h3>Klastrowo-bigdata-analizuj\u0105cy ekosystem Amazon Web Services - bardzo prostymi s\u0142owami<\/h3>\n<p>\nS\u0105dz\u0105c po naszym do\u015bwiadczeniu z AWS, tam od dawna i aktywnie u\u017cywa si\u0119 pod r\u00f3\u017cnymi sosami Apache Hadoop\/MapReduce, na przyk\u0142ad w us\u0142udze DataPipeline (pozdrawiam koleg\u00f3w, nauczyli si\u0119 to dobrze przygotowywa\u0107). Tutaj skonfigurowali\u015bmy kopie zapasowe z r\u00f3\u017cnych us\u0142ug z tabel DynamoDB:<br \/>\n<img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/058dc54ed032a7bf3e9e129646202440.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI s\u0105 one regularnie wykonywane na wbudowanych klastrach Hadoop\/MapReduce jak zegarki od kilku lat. \u201eSkonfigurowa\u0142em i zapomnia\u0142em\u201d:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/a6569da8cafdb96c63250bb32bf51704.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cna r\u00f3wnie\u017c skutecznie zajmowa\u0107 si\u0119 datasa\u0144skim, uruchamiaj\u0105c dla analityk\u00f3w notebooki Jupiter w chmurze i wykorzystuj\u0105c je do szkolenia oraz wdra\u017cania modeli AI na platformie AWS SageMaker. Oto jak to u nas wygl\u0105da:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/c825d979c9278a8edf8e1e747ef6def8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak, mo\u017cna uruchomi\u0107 notebooka w chmurze dla siebie lub analityka i pod\u0142\u0105czy\u0107 go do klastra Hadoop\/Spark, obliczy\u0107 i wszystko p\u00f3\u017aniej \"za\u0142atwi\u0107\":<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/73cea18c54d2a9ce8d0441463991808b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJest to rzeczywi\u015bcie wygodne dla poszczeg\u00f3lnych projekt\u00f3w analitycznych, a w niekt\u00f3rych z powodzeniem wykorzystywali\u015bmy us\u0142ug\u0119 EMR do masowych oblicze\u0144 i analiz. A co z systemowym rozwi\u0105zaniem dla DataLake, czy uda si\u0119? W tym momencie byli\u015bmy na granicy nadziei i rozpaczy i kontynuowali\u015bmy poszukiwania.<\/p>\n<h3>AWS Glue to starannie zapakowany Apache Spark \"na sterydach\".<\/h3>\n<p>\nOkaza\u0142o si\u0119, \u017ce AWS ma \"swoj\u0105\" wersj\u0119 stosu \"Hive\/Pig\/Spark\". Rol\u0119 Hive, czyli katalogu plik\u00f3w i ich typ\u00f3w w DataLake, pe\u0142ni us\u0142uga \u201eData catalog\u201d, kt\u00f3ra nie ukrywa swojej kompatybilno\u015bci z formatem Apache Hive. W tej us\u0142udze nale\u017cy doda\u0107 informacje o tym, gdzie znajduj\u0105 si\u0119 Twoje pliki i w jakim s\u0105 formacie. Dane mog\u0105 by\u0107 przechowywane nie tylko w s3, ale i w bazie danych, ale o tym nie w tym po\u015bcie. Oto jak zorganizowany jest u nas katalog danych DataLake:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/adb45d09698fdacbf41c86bbadde8bb2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPliki s\u0105 zarejestrowane, \u015bwietnie. Je\u015bli pliki zosta\u0142y zaktualizowane \u2014 uruchamiamy r\u0119cznie lub wed\u0142ug harmonogramu crawler\u00f3w, kt\u00f3re zaktualizuj\u0105 informacje o nich z jeziora i zapisz\u0105 je. Nast\u0119pnie dane z jeziora mo\u017cna przetwarza\u0107, a wyniki gdzie\u015b eksportowa\u0107. W najprostszym przypadku \u2014 tak\u017ce eksportujemy do s3. Przetwarzanie danych mo\u017cna przeprowadza\u0107 wsz\u0119dzie, ale proponuje si\u0119 skonfigurowanie procesu przetwarzania na klastrze Apache Spark, wykorzystuj\u0105c rozszerzone mo\u017cliwo\u015bci poprzez API AWS Glue. W istocie mo\u017cna wzi\u0105\u0107 stary dobry i znany kod w Pythonie z wykorzystaniem biblioteki pyspark i skonfigurowa\u0107 jego uruchomienie na N w\u0119z\u0142ach klastra o jakiej\u015b mocy z monitoringiem, bez grzebania w tajnikach Hadoop i przenoszenia kontener\u00f3w dockerowych oraz rozwi\u0105zywania konflikt\u00f3w zale\u017cno\u015bci.<\/p>\n<p><b>Jeszcze raz \u2014 prosta idea.<\/b> Nie trzeba konfigurowa\u0107 Apache Spark, wystarczy napisa\u0107 kod w Pythonie dla pyspark, przetestowa\u0107 go lokalnie na komputerze stacjonarnym, a nast\u0119pnie uruchomi\u0107 na du\u017cym klastrze w chmurze, wskazuj\u0105c, gdzie znajduj\u0105 si\u0119 dane \u017ar\u00f3d\u0142owe i gdzie umie\u015bci\u0107 wynik. Czasami jest to potrzebne i u\u017cyteczne, a oto jak to jest skonfigurowane u nas:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/dc03181573bb3f5cfcc3a8760bc7e07b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW ten spos\u00f3b, je\u015bli trzeba obliczy\u0107 co\u015b na klastrze Spark na danych w s3 \u2014 piszemy kod w Pythonie\/pyspark, testujemy i w drog\u0119 do chmury.<\/p>\n<p>A co z orkiestracj\u0105? A je\u015bli zadanie si\u0119 nie uda? Tak, proponuje si\u0119 stworzenie \u0142adnego pipeline'u w stylu Apache Pig i nawet to przetestowali\u015bmy, ale zdecydowali\u015bmy si\u0119 na u\u017cycie naszego g\u0142\u0119boko dostosowanego systemu orkiestracji opartego na PHP i JavaScript (rozumiem, \u017ce mo\u017ce to budzi\u0107 m\u00f3j wewn\u0119trzny dysonans, ale dzia\u0142a od lat i bez b\u0142\u0119d\u00f3w).<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/e00ed2047c5c6492e36fccc82e7278a3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Format plik\u00f3w przechowywanych w jeziorze danych \u2014 klucz do wydajno\u015bci<\/h3>\n<p>\nBardzo, bardzo wa\u017cne jest zrozumienie jeszcze dw\u00f3ch kluczowych kwestii. Aby zapytania o dane pliki w jeziorze by\u0142y jak najszybsze i aby wydajno\u015b\u0107 nie spada\u0142a przy dodawaniu nowej informacji, nale\u017cy:<\/p>\n<ul>\n<li>Kolumny plik\u00f3w przechowywa\u0107 osobno (aby nie by\u0142o potrzeby czytania wszystkich wierszy, by zrozumie\u0107, co jest w kolumnach). W tym celu przyj\u0119li\u015bmy format parquet z kompresj\u0105<\/li>\n<li>Bardzo wa\u017cne jest dzielenie plik\u00f3w na foldery w duchu: j\u0119zyk, rok, miesi\u0105c, dzie\u0144, tydzie\u0144. Silniki, kt\u00f3re rozumiej\u0105 ten typ shardingu, b\u0119d\u0105 przeszukiwa\u0107 tylko odpowiednie foldery, nie przeszukuj\u0105c wszystkich danych po kolei.<\/li>\n<\/ul>\n<p>\nW zasadzie w ten spos\u00f3b dostarczasz dane \u017ar\u00f3d\u0142owe w najbardziej efektywnej formie dla nak\u0142adanych powy\u017cej silnik\u00f3w analitycznych, kt\u00f3re r\u00f3wnie\u017c potrafi\u0105 selektywnie wchodzi\u0107 do podzielonych folder\u00f3w i czyta\u0107 z plik\u00f3w tylko potrzebne kolumny. Nie trzeba nigdzie \u201ewrzuca\u0107\u201d danych (bo przechowalnia mo\u017ce po prostu nie wytrzyma\u0107) \u2014 po prostu od razu rozs\u0105dnie umie\u015b\u0107 je w systemie plik\u00f3w w odpowiednim formacie. Oczywi\u015bcie nale\u017cy zrozumie\u0107, \u017ce przechowywanie ogromnego pliku csv w DataLake, kt\u00f3ry trzeba najpierw odczyta\u0107 liniami klastrami, aby wydoby\u0107 kolumny \u2014 nie jest zbyt rozs\u0105dne. Przemy\u015bl jeszcze raz dwa powy\u017csze punkty, je\u015bli nie jest jasne, po co to wszystko.<\/p>\n<h3>AWS Athena \u2014 \u201ediabe\u0142\u201d z pude\u0142ka<\/h3>\n<p>\nI tu, tworz\u0105c jezioro, natkn\u0119li\u015bmy si\u0119 nieco przypadkowo na Amazon Athena. Okaza\u0142o si\u0119, \u017ce starannie u\u0142o\u017cone pliki ogromnych log\u00f3w w odpowiednim (parquet) formacie kolumnowym w shardach-folderach \u2014 mo\u017cna bardzo szybko przeszukiwa\u0107 i tworzy\u0107 niezwykle informacyjne raporty BEZ klastr\u00f3w Apache Spark\/Glue.<\/p>\n<p>Silnik Athena, dzia\u0142aj\u0105cy na danych w s3, oparty jest na legendarnym <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/big-data\/what-is-presto\/\">Presto<\/a><\/noindex> \u2014 przedstawiciel rodziny podej\u015b\u0107 MPP (massive parallel processing) do przetwarzania danych, pobieraj\u0105cy dane tam, gdzie le\u017c\u0105, od s3 i Hadoop do Cassandry i zwyk\u0142ych plik\u00f3w tekstowych. Wystarczy poprosi\u0107 Athen\u0119 o wykonanie zapytania SQL, a reszta \u201edzia\u0142a szybko i sama\u201d. Wa\u017cne jest, \u017ce Athena jest \u201einteligentna\u201d, wchodzi tylko do potrzebnych sharded folder\u00f3w i odczytuje tylko potrzebne kolumny w zapytaniu.<\/p>\n<p>Op\u0142aty za zapytania do Atheny s\u0105 r\u00f3wnie\u017c ciekawe. P\u0142acimy za <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/ru\/athena\/pricing\/\">obj\u0119to\u015b\u0107 przeszukiwanych danych<\/a><\/noindex>. Tzn. nie za liczb\u0119 maszyn w klastrze co minut\u0119, ale\u2026 za rzeczywi\u015bcie przeszukane na 100-500 maszynach dane, kt\u00f3re s\u0105 niezb\u0119dne do wykonania zapytania.<\/p>\n<p>A zapraszaj\u0105c tylko potrzebne kolumny z odpowiednio sharded folder\u00f3w, okaza\u0142o si\u0119, \u017ce us\u0142uga Athena kosztuje nas dziesi\u0105tki dolar\u00f3w miesi\u0119cznie. To \u015bwietnie, prawie za darmo, w por\u00f3wnaniu do analityki na klastrach!<\/p>\n<p>Oto, jak shardujemy swoje dane w s3:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/00bd9ae48c1cd13f3c4f7d32692c9209.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW efekcie, w kr\u00f3tkim czasie, w firmie bardzo r\u00f3\u017cne dzia\u0142y, od bezpiecze\u0144stwa informacji po analityk\u0119, zacz\u0119\u0142y aktywnie sk\u0142ada\u0107 zapytania do Atheny i szybko, w ci\u0105gu sekund, otrzymywa\u0107 przydatne odpowiedzi z \u201ewielkich\u201d danych za do\u015b\u0107 d\u0142ugie okresy: miesi\u0105ce, p\u00f3\u0142rocze itd.<\/p>\n<p>Ale poszli\u015bmy dalej i zacz\u0119li\u015bmy szuka\u0107 odpowiedzi w chmurze <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.aws.amazon.com\/athena\/latest\/ug\/connect-with-odbc.html\">przez ODBC-driver<\/a><\/noindex>: analityk w znanej konsoli pisze zapytanie SQL, kt\u00f3re na 100-500 maszyn \u201eza grosze\u201d przeszukuje dane w s3 i zazwyczaj zwraca odpowied\u017a w jednostkach sekund. Wygodne. I szybkie. Nadal w to nie wierz\u0119.<\/p>\n<p>W rezultacie, decyduj\u0105c si\u0119 na przechowywanie danych w s3, w efektywnym formacie kolumnowym z rozs\u0105dnym shardowaniem danych w folderach\u2026 otrzymali\u015bmy DataLake oraz szybki i tani silnik analityczny \u2014 za darmo. I sta\u0142 si\u0119 on bardzo popularny w firmie, poniewa\u017c rozumie SQL i dzia\u0142a znacznie szybciej ni\u017c poprzez uruchamianie\/zatrzymywanie\/konfigurowanie klastr\u00f3w. \u201eA je\u015bli wynik jest taki sam, po co p\u0142aci\u0107 wi\u0119cej?\u201d<\/p>\n<p>Zapytanie do Atheny wygl\u0105da mniej wi\u0119cej tak. Oczywi\u015bcie, je\u015bli chcesz, mo\u017cesz stworzy\u0107 do\u015b\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/prestodb.io\/docs\/0.172\/index.html\">skomplikowane i wielostronicowe zapytanie SQL<\/a><\/noindex>, ale ograniczymy si\u0119 do prostego grupowania. Zobaczmy, jakie kody odpowiedzi mia\u0142 klient kilka tygodni temu w logach pracy serwera WWW i upewnijmy si\u0119, \u017ce nie ma b\u0142\u0119d\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"Jak zorganizowali\u015bmy wysoko wydajny i niedrogi DataLake oraz dlaczego w\u0142a\u015bnie w ten spos\u00f3b\" src=\"\/wp-content\/uploads\/2020\/08\/30028991467b9e52f597faa617d374b5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Wnioski<\/h3>\n<p>\nPrzechodz\u0105c, mo\u017cna powiedzie\u0107, \u017ce d\u0142ugo, ale bolesn\u0105 drog\u0119, nieustannie oceniali\u015bmy ryzyka oraz poziom z\u0142o\u017cono\u015bci i koszty wsparcia, znale\u017ali\u015bmy rozwi\u0105zanie dla DataLake i analityki, kt\u00f3re ci\u0105gle nas zachwyca swoj\u0105 pr\u0119dko\u015bci\u0105 i kosztem posiadania.<\/p>\n<p>Okaza\u0142o si\u0119, \u017ce zbudowanie efektywnego, szybkiego i taniego w eksploatacji DataLake dla potrzeb zupe\u0142nie r\u00f3\u017cnych dzia\u0142\u00f3w firmy \u2014 jest na wyci\u0105gni\u0119cie r\u0119ki nawet dla do\u015bwiadczonych programist\u00f3w, kt\u00f3rzy nigdy nie pracowali jako architekci i nie potrafi\u0105 rysowa\u0107 kwadrat\u00f3w na kwadratach ze strza\u0142kami oraz znaj\u0105c 50 termin\u00f3w z ekosystemu Hadoop.<\/p>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0443\u0442\u0438 \u0433\u043e\u043b\u043e\u0432\u0430 \u0440\u0430\u0441\u043a\u0430\u043b\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u0438\u0447\u0430\u0439\u0448\u0438\u0445 \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u043e\u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0433\u0440\u0443\u0437\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0432\u043e\u0439 DataLake \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432: nagios\/munin -&gt; elastic\/kibana -&gt; Hadoop\/Spark\/s3 &#8230;, \u0441\u043e\u0431\u0438\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044f \u0444\u0438\u0437\u0438\u043a\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0412\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0438 \u043c\u0443\u0442\u043d\u043e\u0435 \u2014 \u043e\u0442\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0440\u0430\u0433\u0430\u043c \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u0430\u043c.<\/p>\n<p>Je\u015bli nie chcesz do chmury i lubisz wspiera\u0107, aktualizowa\u0107 i \u0142ata\u0107 otwarte projekty, mo\u017cna zbudowa\u0107 podobny do naszego model lokalnie, na tanich biurowych komputerach z Hadoop i Presto na g\u00f3rze. Najwa\u017cniejsze \u2014 nie zatrzymywa\u0107 si\u0119 i i\u015b\u0107 naprz\u00f3d, liczy\u0107, szuka\u0107 prostych i jasnych rozwi\u0105za\u0144, a na pewno si\u0119 uda! Powodzenia wszystkim i do zobaczenia!<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/bitrix\/blog\/516374\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0441 \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c\u00bb \u043f\u043e \u0441\u043e\u0432\u0435\u0442\u0430\u043c stackoverflow, \u043d\u0435 \u0432\u043d\u0438\u043a\u0430\u044f \u0432 \u00ab\u043c\u043d\u043e\u0433\u043e\u0431\u0443\u043a\u0432\u00bb, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0443\u044e \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f\/\u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u043f\u0430\u0440\u0443 \u043c\u0430\u0448\u0438\u043d \u2014 \u043e\u0441\u043e\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0430\u0432\u044f\u0437\u0447\u0438\u0432\u044b\u0439 \u0434\u0443\u0440\u043d\u043e\u0439 \u0441\u043e\u043d \u043d\u0430\u044f\u0432\u0443, \u0432\u0441\u0435 \u0440\u0435\u0437\u043a\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u043e\u0441\u044c \u0434\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92508","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0441 \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c\u00bb \u043f\u043e \u0441\u043e\u0432\u0435\u0442\u0430\u043c stackoverflow, \u043d\u0435 \u0432\u043d\u0438\u043a\u0430\u044f \u0432 \u00ab\u043c\u043d\u043e\u0433\u043e\u0431\u0443\u043a\u0432\u00bb, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u0435 DataLake \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0441 \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c\u00bb \u043f\u043e \u0441\u043e\u0432\u0435\u0442\u0430\u043c stackoverflow, \u043d\u0435 \u0432\u043d\u0438\u043a\u0430\u044f \u0432 \u00ab\u043c\u043d\u043e\u0433\u043e\u0431\u0443\u043a\u0432\u00bb, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-28T05:42:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-28T05:42:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Jak zorganizowali\u015bmy wysokoefektywny i niedrogi DataLake i dlaczego w\u0142a\u015bnie tak | ProHoster","description":"\u017byjemy w niesamowitym czasie, kiedy mo\u017cna szybko i \u0142atwo po\u0142\u0105czy\u0107 kilka gotowych narz\u0119dzi otwartych, skonfigurowa\u0107 je z \"wy\u0142\u0105czonym umys\u0142em\" zgodnie z poradami stackoverflow, nie wnikaj\u0105c w \"wielkie litery\", uruchomi\u0107.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0438 \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u0435 DataLake \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a | ProHoster","og:description":"\u041c\u044b \u0436\u0438\u0432\u0435\u043c \u0432 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u044b\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u0445 \u0441 \u00ab\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c\u00bb \u043f\u043e \u0441\u043e\u0432\u0435\u0442\u0430\u043c stackoverflow, \u043d\u0435 \u0432\u043d\u0438\u043a\u0430\u044f \u0432 \u00ab\u043c\u043d\u043e\u0433\u043e\u0431\u0443\u043a\u0432\u00bb, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/kak-my-organizovali-vysokoeffektivnoe-i-nedorogoe-datalake-i-pochemu-imenno-tak","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-28T05:42:10+00:00","article:modified_time":"2020-08-28T05:42:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92508","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:07:39","updated":"2022-10-01 09:50:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92508","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=92508"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/92508\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/92509"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=92508"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=92508"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=92508"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}