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