HIVE

  • Snaha přivést SQL do světa Hadoop
  • Nástroj pro dotazování a manipulaci s daty
  • Vlastní jazyk HQL (variace na SQL)

Přístup k datům

  • Přístup k datům je prostřednictvím „klasických DB“ tabulek
    • Data jsou ukládána v HDFS
      • externí tabulky - rozdíl od managed jen při drop table
      • managed tabulky
  • Tabulka je celý adresář
    • Obsahuje více souborů, nebo i dalších podadresářů
  • Data jsou ukládána ve vhodném formátu
    • Parquet, Avro, CSV, ORC…
  • Metadata jsou uložena v Metastore
  • Hive vytváří pro každou tabulku alespoň jeden soubor
    • pokud je dat hodně, vytvoří se více souborů
    • :!: Ale pozor – při každém INSERT se vytvoří vždy aspoň jeden nový soubor!
    • Nedává tedy smysl INSERTovat záznam po záznamu jako v RDBMS
    • Vždy INSERT z tabulky (např. pomocí externí tabulky)

Jazyk

  • DDL - create/drop/alter/truncate table
  • DML - insert/delete/insert overwite table
  • Query - select
  • :!: Nelze: update, delete
  • Load data into - to samé co mv na Linuxu
    • takže nekontroluje schéma, což se projeví u selectů
  • DROP TABLE vymaže metadata a data
    • při mazání externí tabulky data v tabulce nejsou smazána z FS
  • virtuální sloupce
    • INPUT__FILE__NAME - jméno vstupního souboru pro úlohu mapperu
    • BLOCK__OFFSET__INSIDE__FILE - současná globální pozice souboru

Partitioning a bucketing

  • Partitioning
    • logické rozdělení struktury tabulky do podadresářů
  • Bucketing
    • rozděluje data do definovaného počtu „kyblíčků“ podle zvoleného sloupce
  • rozdíl - pokud bychom dělali partitioning podle timestamp, pro každou sekundu by se vytvořil nový soubor, což je neefektivní
    • je lepší na začátku říci, do kolika bucketů se mají řádky rozdělit

Impala

  • Nástroj podobný Hive
  • velmi kompatibilní query language
  • sdílí Metastore, tj. tabulky vytvoření v Impala jsou viditelné v Hive a (téměř) vice versa
  • Impala je ale rezidentní
  • Omezenější v pestrosti

Postup v HIVE

  • Vytvoříme externí tabulku vázanou na zdrojové soubory
CREATE EXTERNAL TABLE IF NOT EXISTS ap_temp (...)
ROW FORMAT
DELIMITED FIELDS TERMINATED BY '~'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION ‘...’;
  • Vytvoříme prázdnou optimalizovanou tabulku
CREATE TABLE IF NOT EXISTS ap (...)
PARTITIONED BY (BUS_PROD_TP_DESCR VARCHAR(255))
CLUSTERED BY (ACC_KEY) INTO 32 BUCKETS
STORED AS ORC tblproperties
("orc.compress"="SNAPPY");
  • Nahrajeme data do optimalizované tabulky
INSERT OVERWRITE TABLE ap
PARTITION (BUS_PROD_TP_DESCR)
SELECT
 ...
FROM ap_temp;
 
DROP TABLE ap_temp;
kj/hive.txt · Poslední úprava: 18.09.2017 15:51 autor: kj

Nástroje pro stránku