Paras vastaus
Kaikissa mahdollisissa vertailuarvoissa Spark Sql on paljon nopeampi kuin Hive. Vaikka Facebook keksi Preston – halvan kopion Sparkin suunnittelusta, joka laitettiin pesän konepellin alle, ja Tezissä on myös uudempia versioita pesästä – jonka väärinkäytökset DAG: iden kanssa on dokumentoitu hyvin täällä Tezin tragedia , mutta kaikissa SQL: ään liittyvissä tehtävissä (esim. Kartanpuoleiset sqls => suodatin, datamutaatio tai pienennä sivupiirit = = Lajittelu / yhdistäminen / Ikkuna-toiminnot), Spark loistaa edelleen kirkkaasti.
Koska kysymyksessä ei kysytä ”Miksi”, en käsittelisi paljoakaan näitä teknisiä yksityiskohtia. Ajattele vain hajautettua tietojenkäsittelymallia, jossa jokaisen tehtävän on kirjoitettava koko tietojoukko (replikoinnilla), jota se pitää ennen suorittamista, missä sovellus ei pysty arvioimaan resurssien käyttöä yksin ja missä sovellus on klusterinhallinnan armo käynnistettäessä tehtävää / suoritusvaihetta ja vertaa sitä toiseen hajautettuun tietojenkäsittelymalliin, jossa tehtävät voivat elää suurimman osan ajasta muistissa, jossa moottori voi jakaa resurssit älykkäästi ja missä kehys voi istua klusterinhallinnan kärjessä ja riippuu klusterinhallinnasta – paitsi säilön allokoinnista (ja vähän De / Serializationista, joka voidaan jopa ohittaa)
(ja pitääkseen sen lyhyesti, ei mainitse jopa Spark 1.6 / 2.x: n tehostaminen pelissä Tungsten- tai simd-sovelluksella kyselyjen optimoimiseksi)
Minkä mallin luulet voittavan viivästystaidon?
Vastaa
Aloitetaan kyselystäsi : Hive toteuttaa SQL-osajoukon – Hive-kielen ( LanguageManual – Apache Hive – Apache Software Foundation ), joka on ominaista Hiveen ja Hadoopin ominaisuuksiin. Lähetetty kysely on jaoteltu paloiksi, predikaateiksi, jotka voidaan toteuttaa toiminnoissa tai vaiheissa. SELECT col1 , col2 ,… coln määrittää, mitkä sarakkeet kustakin palautetusta rivistä säilytetään ja palautetaan ratkaisusarjassa. Samoin VASEN tai OIKEA liitos toteutettaisiin tietyssä tilassa, todennäköisesti Map-Reduce (M\_R) -vaiheessa. Kun kyselysi on jaettu osiin, jotka vastaavat tiettyjä toimintoja, kustannuspohjainen optimoija (CBO) käyttää kerättyjä ja tallennettuja tilastoja tekemään älykkäitä päätöksiä siitä, miten kukin näistä vaiheista suoritetaan. Esimerkiksi WHERE-lause voidaan toteuttaa taulukon skannauksena, ellei se ole kovin spesifinen (matala kardinaalisuus) tai jos taulukkoa ei ole osioitu, tai se voi johtaa osioiden eliminointiin, jos taulukko on osioitu ja WHERE-lauseke määrittää osiosarakkeet korkealla spesifisyydellä. Jos kysely määrittää useita liittymiä, kukin liitos toteutetaan Map-Reduce -vaiheena. Jos yksi liitostaulukoista on hyvin pieni, CBO voi valita Map-Join-ohjelman suoritettavaksi paremman suorituskyvyn saavuttamiseksi.
Kun keskuspankki laatii suoritussuunnitelman, vaiheet ajoitetaan ja suoritetaan, yleensä useina MR-vaiheina. Voit tutkia suoritussuunnitelmaa, jota keskuspankki käyttäisi tietyn kyselyn suorittamiseen suorittamalla kyselyssä SELKEÄ.
Minulla oli videoalalla asiakas, joka keräsi tilastoja käyttäjiensa katselutottumuksista. Nämä tilastot koottiin yhdeksi erittäin suureksi taulukoksi (100 TiB: tä), jonka asiakas halusi yhdistää noin 20 suhteellisen pieneen taulukkoon, jotka sisälsivät tietoja kustakin videosta, videon toimijoista, kunkin videon juonista, tuotantotiedoista jne. Loin näkymiä, jotka liittyivät peräkkäin pienempiin taulukoihin, jotka lopulta liitettiin katselutaulukkoon tulosnäkymään, joka sitten kirjoitettiin tulostaulukkoon. Kun lähetin yksinkertaisen kyselyn valita tulosnäkymästä lähtötaulukkoon (LUO TAULUKKO-lähtö (…) VALITAAN * FROM results\_view) Hive loi 25-vaiheisen kyselyn, joka toteutti kaikki välinäkymät lopulliseen näkymään, joka sitten kirjoitettiin tulostaulukkoon. Koska jokainen vaihe oli M-R-työ (langalle) ja M-R-työn asennusaika oli noin 30 sekuntia tälle klusterille, M-R-asennusaikaan käytettiin noin 12–14 minuuttia. Suurin osa M-R-vaiheista suoritettiin 5 sekunnissa, joista 2/3 oli M-R-asennusaikaa ja 1/3 varsinaista suoritusta. Pienempien taulukoiden lopullinen liittäminen katsojatilastotaulukkoon kesti vielä 20 minuuttia. Luomalla joukko näkymiä, jotka on yhdistetty peräkkäin tulostaulukkoon, sain luoda putkilinjan, joka koottiin joukolla suhteellisen yksinkertaisia kyselyjä, sen sijaan, että yrittäisin luoda massiivista kyselyä, joka yrittäisi liittää yli 20 taulukkoa yhteen kyselyyn.