Hvad er Hive? Architecture & Modes

โšก Smart opsummering

Hive er SQL-laget i Hadoop-รธkosystemet, der omdanner HiveQL-sรฆtninger til distribuerede job, der lรฆser strukturerede data, der allerede findes pรฅ HDFS, sรฅ analytikere forespรธrger petabyte-tabeller uden selv at skrive MapReduce-kode.

  • ???? Hvad er det: Et ETL- og datalagringsvรฆrktรธj, der tilfรธjer tabeller, rรฆkker og kolonner oven pรฅ filer gemt i HDFS.
  • ๐Ÿ—‚๏ธ Metastore: Skemaoplysninger findes i et relationelt metastore, bakket op af Derby for รฉn bruger og af MySQL for delt adgang.
  • ๐Ÿ†š Mod et RDBMS: Hive validerer skemaet ved lรฆsning, skalerer horisontalt og favoriserer store scanninger frem for de opdateringer pรฅ rรฆkkeniveau, som en database hรฅndterer.
  • ๐Ÿ—๏ธ Tre lag: Klienter, tjenester og lagring danner arkitekturen, hvor driveren koordinerer compiler, metastore og udfรธrelsesmotor.
  • ๐Ÿ”€ To tilstande: Lokal tilstand passer til en enkelt dataknude og smรฅ filer, mens MapReduce-tilstand spreder udfรธrelsen pรฅ tvรฆrs af en klynge med flere noder.
  • ๐Ÿ”Œ HiveServer2: Den Thrift-baserede HS2-grรฆnseflade tilfรธjer samtidighed mellem flere klienter og godkendelse til fjernsessioner.

Hive-arkitektur og -tilstande

Hvad er Hive?

Hive er et ETL- og datalagringsvรฆrktรธj udviklet oven pรฅ Hadoop Distributed File System (HDFS). Hive gรธr det nemt at udfรธre operationer som f.eks.

  • Dataindkapsling
  • Ad hoc forespรธrgsler
  • Analyse af enorme datasรฆt

Vigtige egenskaber ved Hive

Punkterne nedenfor forklarer, hvad der adskiller Hive fra et almindeligt MapReduce-program.

  • I Hive oprettes fรธrst tabeller og databaser, og derefter indlรฆses data i disse tabeller.
  • Hive er et datalager designet til at administrere og forespรธrge udelukkende strukturerede data, der er gemt i tabeller.
  • Nรฅr det gรฆlder strukturerede data, har MapReduce ikke optimerings- og brugervenlighedsfunktioner som UDF'er, men det har Hive-frameworket. Forespรธrgselsoptimering refererer til en effektiv mรฅde at udfรธre forespรธrgsler pรฅ med hensyn til ydeevne.
  • Hives SQL-inspirerede sprog adskiller brugeren fra kompleksiteten i MapReduce-programmering. Det genbruger velkendte koncepter fra relationsdatabaseverdenen, sรฅsom tabeller, rรฆkker, kolonner og skemaer, for at lette lรฆringen.
  • Hadoops programmering fungerer pรฅ flade filer. Sรฅ Hive kan bruge mappestrukturer til at "skillevรฆg" data for at forbedre ydeevnen pรฅ bestemte forespรธrgsler.
  • En vigtig komponent i Hive er metastoren, der bruges til at lagre skemainformation. Denne metastore findes typisk i en relationsdatabase. Vi kan interagere med Hive ved hjรฆlp af metoder som
    • Web GUI
    • Java Database Connectivity (JDBC) interface
  • De fleste interaktioner finder typisk sted via en kommandolinjegrรฆnseflade (CLI). Hive leverer en CLI til at skrive Hive-forespรธrgsler ved hjรฆlp af Hive Query Language (HQL).
  • Generelt ligner HQL-syntaksen SQL syntaks, som de fleste dataanalytikere er bekendt med. Eksempelforespรธrgslen nedenfor viser alle de poster, der findes i det nรฆvnte tabelnavn.
    • Eksempel forespรธrgsel : Vรฆlg * fra
  • Hive understรธtter fire filformater, disse er TEXTFILE, SEQUENCEFILE, ORC og RCFILE (Optag kolonnefil).
  • Til lagring af metadata for รฉn bruger bruger Hive Derby-databasen, og til metadata for flere brugere eller delte metadata bruger Hive MySQL.

Til opsรฆtning MySQL som databasen og for at gemme metadataoplysninger, se vejledningen pรฅ konfiguration af Hive-metastoren med MySQL, som fรธlger efter den Hive installationsvejledning.

Nogle af hovedpunkterne om Hive:

  • Den stรธrste forskel mellem HQL og SQL er, at en Hive-forespรธrgsel udfรธres pรฅ Hadoops infrastruktur i stedet for pรฅ en traditionel database.
  • Udfรธrelse af Hive-forespรธrgsler er en rรฆkke automatisk genererede KortReducer beskรฆftigelse.
  • Hive understรธtter partition- og bucket-koncepter for nem hentning af data, nรฅr klienten udfรธrer forespรธrgslen.
  • Hive understรธtter brugerdefineret UDF'er (brugerdefinerede funktioner) til datarensning, filtrering og lignende arbejde. I henhold til programmรธrernes krav kan man definere Hive UDF'er.

Hive vs relationelle databaser

Hive udfรธrer funktioner, som relationelle databaser ikke kan. Nรฅr data kรธrer i petabytes, er det vigtigt at returnere resultater i sekunder, og Hive gรธr dette effektivt. De vigtigste forskelle er fรธlgende.

Relationelle databaser er af "Skema ved lรฆsning og skema ved skrivning"Fรธrst oprettes en tabel, derefter indsรฆttes data i tabellen. Pรฅ relationelle databasetabeller kan funktioner som indsรฆttelser, opdateringer og รฆndringer udfรธres.

Bistade er "Skema kun skrivebeskyttet"Sรฅ funktioner som opdatering og รฆndring fungerede ikke i tidlige udgivelser, fordi en Hive-forespรธrgsel i en typisk klynge kรธrer pรฅ tvรฆrs af flere DataNodes, hvilket gjorde det umuligt at opdatere og รฆndre data pรฅ tvรฆrs af flere noder (Hive-versioner under 0.13).

Hive understรธtter ogsรฅ "Lรฆs mange, skriv รฉn gang" mรธnster, sรฅ i nyere versioner kan en tabel opdateres efter indsรฆttelse.

BEMร†RK VENLIGST: Nyere versioner af Hive kommer med opdaterede funktioner. Hive 0.14 introducerede UPDATE og DELETE som nye funktioner, og senere udgivelser tilfรธjede fuld understรธttelse af ACID-transaktioner.

Tabellen nedenfor kondenserer sammenligningen.

Aspect Relationel database Apache Hive
Skema validering Ved skrivning Lรฆst
Typisk datavolumen Gigabyte til terabyte Terabyte til petabyte
arbejdsbyrde OLTP pรฅ rรฆkkeniveau lรฆser og skriver Fuld scanning af batchanalyser
Forespรธrgselssprog SQL HQL, en SQL-inspireret dialekt
Udfรธrelse Database motor Distribuerede klyngejob

Hive Architecture

Diagrammet nedenfor forklarer Apache Hive-arkitektur i detaljer.

Apache Hive-arkitekturdiagram, der viser klienter, tjenester, lagring og databehandling

Hive bestรฅr hovedsageligt af 3 kernedele:

  1. Hive-klienter
  2. Hive-tjenester
  3. Hive-lagring og -databehandling

Hive-kunder

Hive leverer forskellige drivere til kommunikation med forskellige typer applikationer. Til Thrift-baserede applikationer leverer den en Thrift-klient til kommunikation.

Til Java Til relaterede applikationer leverer den JDBC-drivere. Til alle andre typer applikationer leverer den ODBC-drivere. Disse klienter og drivere kommunikerer til gengรฆld med Hive-serveren i Hive-tjenesterne.

Hive Services

Klientinteraktioner med Hive udfรธres via Hive-tjenester. Hvis klienten รธnsker at udfรธre en forespรธrgselsrelateret handling i Hive, skal den kommunikere via Hive-tjenester.

CLI'en fungerer som Hive-tjenesten til DDL-operationer. Alle drivere kommunikerer med Hive-serveren og hoveddriveren i Hive-tjenester, som vist i arkitekturdiagrammet ovenfor.

Driveren i Hive-tjenester er den primรฆre driver: den kommunikerer med JDBC, ODBC og andre klientspecifikke applikationer og sender derefter deres anmodninger til metastoret og filsystemet til videre behandling.

Hive Storage og Computing

Hive-tjenester sรฅsom metastoren, filsystemet og jobklienten kommunikerer til gengรฆld med Hive-lagring og udfรธrer fรธlgende handlinger:

  • Metadataoplysninger om tabeller oprettet i Hive gemmes i Hive metastore-database.
  • Forespรธrgselsresultater og data, der indlรฆses i tabellerne, gemmes i Hadoop-klyngen pรฅ HDFS.

Jobudfรธrelsesflow

Diagrammet nedenfor tracsender รฉn forespรธrgsel fra brugergrรฆnsefladen til DataNodes og tilbage.

Flowdiagram for udfรธrelse af Hive-job tracsende en forespรธrgsel fra brugergrรฆnsefladen til DataNodes

Ud fra ovenstรฅende diagram kan vi forstรฅ jobudfรธrelsesflowet i Hive med Hadoop. Dataflowet i Hive opfรธrer sig i fรธlgende mรธnster.

  1. Udfรธrelse af en forespรธrgsel fra brugergrรฆnsefladen
  2. Driveren interagerer med compileren for at hente planen. (Her refererer plan til forespรธrgselsudfรธrelsesprocessen og dens relaterede indsamling af metadatainformation.)
  3. Compileren opretter planen for det job, der skal udfรธres. Compileren kommunikerer med metastoret for at hente metadataanmodningen.
  4. Metastoren sender metadatainformation tilbage til compileren
  5. Compileren kommunikerer med driveren med den foreslรฅede plan for at udfรธre forespรธrgslen.
  6. Chauffรธren sender udfรธrelsesplaner til udfรธrelsesmotoren
  7. Udfรธrelsesmotoren (EE) fungerer som en bro mellem Hive og Hadoop for at behandle forespรธrgslen, inklusive DFS-operationer:
    • EE kontakter fรธrst NameNode og derefter DataNodes for at hente de vรฆrdier, der er gemt i tabellerne.
    • EE henter de รธnskede poster fra DataNodes. De faktiske tabeldata findes kun pรฅ datanoderne; fra NameNode henter den kun metadata til forespรธrgslen.
    • Den indsamler faktiske data fra datanoderne relateret til den nรฆvnte forespรธrgsel.
    • EE kommunikerer tovejs med metastoren for at udfรธre DDL (data definition language) operationer sรฅsom OPRET, SLIP og ร†NDRE pรฅ tabeller og databaser. Metastoren gemmer kun database-, tabel- og kolonnenavne.
    • EE kommunikerer til gengรฆld med Hadoop-daemoner sรฅsom NameNode, DataNodes og job. tracker til at udfรธre forespรธrgslen oven pรฅ Hadoop-filsystemet
  1. Henter resultater fra driveren
  2. Sender resultater til udfรธrelsesmotoren. Nรฅr resultaterne er hentet fra datanoderne til EE'en, sender den resultaterne tilbage til driveren og til brugergrรฆnsefladen (frontend).

Hive holder kontakten med Hadoop-filsystemet og dets dรฆmoner via eksekveringsmotoren. Den stiplede pil i diagrammet viser denne kommunikation.

Forskellige tilstande af Hive

Hive kan fungere i to tilstande afhรฆngigt af stรธrrelsen af โ€‹โ€‹datanoderne i Hadoop. Disse tilstande er:

  • Lokal tilstand
  • MapReduce-tilstand

Hvornรฅr skal man bruge lokal tilstand

  • Hvis Hadoop er installeret i pseudodistribueret tilstand med รฉn datanode, bruger vi Hive i denne tilstand.
  • Hvis datastรธrrelsen er lille nok til at vรฆre begrรฆnset til en enkelt lokal maskine, kan vi bruge denne tilstand
  • Behandlingen vil vรฆre meget hurtig pรฅ mindre datasรฆt, der findes pรฅ den lokale maskine

Hvornรฅr skal MapReduce-tilstand bruges

  • Hvis Hadoop har flere datanoder, og data er fordelt pรฅ tvรฆrs af de forskellige noder, bruger vi Hive i denne tilstand
  • Den arbejder pรฅ store mรฆngder data, og forespรธrgslen udfรธres parallelt.
  • Behandling af store datasรฆt med bedre ydeevne kan opnรฅs gennem denne tilstand

I Hive kan vi indstille en egenskab, der angiver, hvilken tilstand Hive skal fungere i. Som standard fungerer den i MapReduce-tilstand, og til lokal tilstand kan du bruge fรธlgende indstilling:

SET mapred.job.tracker=local;

Fra Hive version 0.7 og fremefter understรธttes en tilstand, der automatisk kรธrer MapReduce-job i lokal tilstand. Pรฅ Hive 4.x er standardmotoren Apache Tez, sรฅ denne egenskab gรฆlder for den รฆldre MapReduce-sti.

Hvad er Hive Server2 (HS2)?

HiveServer2 (HS2) er en servergrรฆnseflade, der udfรธrer fรธlgende funktioner:

  • Gรธr det muligt for fjernklienter at udfรธre forespรธrgsler mod Hive
  • Henter resultaterne af disse forespรธrgsler

Nuvรฆrende versioner tilfรธjer avancerede funktioner baseret pรฅ Thrift RPC, sรฅsom:

  • Multi-klient samtidighed
  • Godkendelse

HS2 ligger bag Beeline og alle JDBC- eller ODBC-sessioner, hvilket er grunden til, at den erstattede Hive CLI til รฉn bruger. HiveQL-operatorer og indbyggede funktioner Reference er det naturlige nรฆste skridt.

Ofte Stillede Spรธrgsmรฅl

Hive er et batch-forespรธrgselslag, der scanner store tabeller gennem distribuerede job. HBase er et NoSQL-lager, der er bygget til tilfรฆldige lรฆsninger og skrivninger pรฅ millisekunder pรฅ enkelte rรฆkker. De lรธser modsatte adgangsmรธnstre og kรธrer ofte side om side.

Hive kรธrer pรฅ MapReduce, Apache Tez eller Apache SparkMapReduce er udfaset, og Hive 4.x bruger som standard Tez, som gemmer mellemresultater i hukommelsen i stedet for at skrive dem til disken mellem faserne.

En administreret tabel giver Hive ejerskab over metadata og filer, sรฅ dropping den sletter dataene fra lagermappen. En ekstern tabel gemmer kun metadata, og slipperping det lader de underliggende filer vรฆre uberรธrte.

Lรฆrte omkostningsmodeller fรธrer udfรธrelsesstatistikker tilbage til planlรฆggeren for at forudsige scanningsvolumen, join-rรฆkkefรธlge og partitionsbeskรฆring mere prรฆcist end statiske estimater. Cloudplatforme viser de samme signaler som komprimering og anbefalinger til partitionslayout.

Copilot laver udkast til HiveQL-joins, vinduesfunktioner og Java UDF-skeletter fra en kommentar, hvilket forkorter standardarbejdet. Kolonnenavne, partitionsnรธgler og datatyper skal stadig fรธrst kontrolleres mod den rigtige metastore.

Ja. Hive 0.14 tilfรธjede UPDATE og DELETE, og senere udgivelser leverede fuld ACID-understรธttelse af transaktionelle tabeller. Hive 4.x udvider dette gennem Apache Iceberg-tabeller med snapshot-isolering og skemaudvikling.

Alle tre eksponerer SQL over de samme filer. Hive foretrรฆkker lange batchjob og ejer den metastore, som de andre lรฆser. Spark SQL er egnet til blandede pipelines; Trino er rettet mod interaktive forespรธrgsler pรฅ tvรฆrs af flere kilder.

Ja, primรฆrt gennem Hive Metastore, som fortsat er katalogstandarden Spark, Trino, Presto og Flink lรฆser alle. Hive hรฅndterer stadig planlagte batchtransformationer og lagerbelastninger.

Opsummer dette indlรฆg med: