Hive Architecture
Last updated
Last updated
https://www.simplilearn.com/tutorials/hadoop-tutorial/hive
HiveQL
HiveQLμ νμ΄λΈμ SQLμΈμ΄μΈ HiveQLμ SQL-92, MySQL, μ€λΌν΄ SQLμ νΌν©ν κ²μ λλ€.
Apache Hiveλ λ°μ΄ν° μ¨μ΄νμ°μ€ μννΈμ¨μ΄ νλ‘μ νΈλ‘, λ³Έλ νλ‘ μμ½μμ€ν μ©μΌλ‘ κ°λ°λμμ΅λλ€. Hiveλ μ¨νλ λ―Έμ€μ ν΄λΌμ°λ λ΄μμ λ€μν μ€ν λ¦¬μ§ λ§€μ²΄(μ: HDFS, Azure ν΄λΌμ°λ μ€ν 리μ§, Amazon Web Services S3 μ€λΈμ νΈ μ€ν 리μ§, Google Cloud μ€ν λ¦¬μ§ λ±)μ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
Hiveλ λ°μ΄ν°λ₯Ό ν, μ΄, λ°μ΄ν° μ νμ ν¬ν¨ν ν μ΄λΈλ‘ νννλ μΆμν κ³μΈ΅μ μ 곡νλ©° SQL μΈν°νμ΄μ€, HiveQLλ‘ μΏΌλ¦¬νκ³ λΆμν©λλ€.
Hiveλ μΈλ©λͺ¨λ¦¬ λΆμ°ν μμ§ Apache Tezλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν¨
Apache Hiveλ Hive LLAPμμ νΈλμμ (ACID)μ μ§μν©λλ€. νΈλμμ μ μ΄μ©νλ©΄ λμμ μ¬λ¬ μ¬μ©μ/νλ‘μΈμ€κ° λ°μ΄ν°μ μ‘μΈμ€νμ¬ μμ±, μ½κΈ°, μ λ°μ΄νΈ λ° μμ (CRUD) μμ μ νλ νκ²½μμλ λ°μ΄ν°μ μΌκ΄λ 보기λ₯Ό 보μ₯ν©λλ€.
Hiveλ Optimized Row Columnar(ORC) νμΌ νμμ μ΅μ νλμκ³ Parquetλ μ§μν©λλ€.
Hive web interface
λͺ λ Ήμ€ μΈν°νμ΄μ€μ λ³λλ‘ Hiveλ Hive 쿼리 λ° λͺ λ Ήμ μ€ννκΈ° μν μΉ κΈ°λ° GUIλ μ 곡ν©λλ€.
hwi(νμ΄λΈ μΉ μΈν°νμ΄μ€)λ ν΄λ¬μ€ν°λ‘ λ‘κ·ΈμΈνκ±°λ CLIλ₯Ό μ¬μ©νμ§ μκ³ μΏΌλ¦¬λ λ€λ₯Έ λͺ λ Ήμ μννκΈ° μν κ°λ¨ν μΉ μΈν°νμ΄μ€
JDBC / ODBC Driver
Apache Hive λλΌμ΄λΈλ ν΄λΌμ΄μΈνΈκ° CLI, μΉ UI, Thrift, ODBC λλ JDBC μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ μΆν 쿼리λ₯Ό μμ νλ μν μ ν©λλ€. λλΌμ΄λ²λ metastoreμ μλ μ€ν€λ§μ λμμΌλ‘ ꡬ문 λΆμ, μ ν κ²μ¬ λ° μλ―Έ μ²΄κ³ λΆμμ΄ μνλλ μ»΄νμΌλ¬μ 쿼리λ₯Ό μ λ¬ν©λλ€ .
map-reduce μμ κ³Ό HDFS μμ μ DAG(Directed Acyclic Graph) ννλ‘ μ΅μ νλ λ Όλ¦¬μ κ³νμ μμ±νκ³ μ€ν μμ§μ Hadoopμ μ¬μ©νμ¬ μ’ μμ± μμλλ‘ μ΄λ¬ν μμ μ μ€νν©λλ€.
ODBC - μ ν리μΌμ΄μ νμ΄λΈλ₯Ό ν¬ν¨ν SQL μμ€ν μ μ κ·Όν μ μλλ‘ μ 곡νλ μ€ν λ°μ΄ν°λ² μ΄μ€ μ°κ²° API(Open Database Connection API)λ₯Ό λ»νλ©° μλ° μ ν리μΌμ΄μ μ λ³΄ν΅ JDBC APIλ₯Ό λμ μ¬μ©ν©λλ€.
JDBC - μλ° λ°μ΄ν°λ² μ΄μ€ μ°κ²° API(Java Database Connection API)λ μλ° μ½λλ₯Ό μ΄μ©ν΄ νμ΄λΈλ₯Ό ν¬ν¨ν SQL μμ€ν μ μ μνλ λ°©λ²μ μ 곡ν©λλ€.
Hive CLI(Command Line Interface)
Hive 쿼리 λ° λͺ λ Ήμ μ§μ μ€νν μ μλ Hiveμμ μ 곡νλ κΈ°λ³Έ μ Έμ λλ€.
CLI(λͺ λ Ήν μΈν°νμ΄μ€)λ ν μ΄λΈμ μ μνκ±°λ 쿼리 λ±μ μννκΈ° μν΄ μ¬μ©λλ©° λ€λ₯Έ μλΉμ€κ° λͺ μλμ΄ μμ§ μμΌλ©΄ κΈ°λ³Έ μλΉμ€λ‘ λμν©λλ€.
Thrift
νμ΄λΈλ νμ΄λΈ μλ²(HiveServer) λλ νμ΄λΈ μ°λ¦¬ννΈ(HiveThrift)λΌ λΆλ¦¬λ ꡬμ±μμλ₯Ό κ°μ§κ³ μμΌλ©° ν΄λΌμ΄μΈνΈλ νλμ ν¬νΈλ‘ νμ΄λΈμ μ κ·Όν μ μμ΅λλ€.
μ°λ¦¬ννΈλ νμ₯μ±(scalable)κ³Ό κ΅μ°¨ μΈμ΄μ (cross language. μλ‘ λ€λ₯Έ μΈμ΄ κ°μ ν΅μ μ΄ κ°λ₯νλ€λ μλ―Έ) νΉμ§μ κ°λ μννΈμ¨μ΄ νλ μμν¬μ λλ€.
μ°λ¦¬ννΈλ νμ΄μ€λΆμμ κ³ μν RPC μμ€ν μΌλ‘ νμ΄λΈμ ν΅ν©λμ΄ μμΌλ©° μ격 νλ‘μΈμ€μμ μ°λ¦¬ννΈλ₯Ό ν΅ν΄ νμ΄λΈμ λͺ λ Ήμ λ³΄λΌ μ μμ΅λλ€.
Metastore
https://hive.apache.org/
νμ΄λΈλ HDFSμ μ μ₯λ λ°μ΄ν°(λλ ν°λ¦¬/νμΌ)μ ꡬ쑰(μ€ν€λ§)λ₯Ό μ νλ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό ν μ΄λΈλ‘ ꡬ쑰νμν΅λλ€. ν μ΄λΈ μ€ν€λ§μ κ°μ λ©νλ°μ΄ν°λ λ©νμ€ν μ΄λΌ λΆλ¦¬λ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ©λλ€.
λ€μ€ ν΄λΌμ΄μΈνΈλ₯Ό μ§μνκΈ° μν΄μ νμ΄λΈ μΈλΆμ λ©νμ€ν μ΄λ₯Ό ꡬλνλ μλΉμ€
λ©νμ€ν μ΄ RDBMSλ Apache Hive λ©νλ°μ΄ν°μ μ€μ 리ν¬μ§ν 리μ λλ€. μ€ν€λ§ μ 보(μ: μ΄ μ΄λ¦, λ°μ΄ν° μ ν, λ°μ΄ν° νμΌ μμΉ, νν°μ , κΈ°ν λ©νλ°μ΄ν°)λ₯Ό ν¬ν¨νλ ν μ΄λΈ λ©νλ°μ΄ν°λ₯Ό μ μ₯ν©λλ€.
νμ΄λΈ λ©νλ°μ΄ν°μ ν΅μ¬ μ μ₯μ, λ©νμ€ν μ΄λ μλΉμ€μ λ°μ΄ν° λ³΄κ΄ μ μ₯μλ‘ λλ©λλ€.
https://wikidocs.net/28353
λ΄μ₯ν λ©ν μ€ν μ΄(embedded metastore) μ€μ
λ©νλ°μ΄ν° μλΉμ€λ νμ΄λΈ μλΉμ€μ λμΌν JVMμμ μ€νλκ³ λ‘컬 λμ€ν¬μ μ μ₯λλ λ΄μ₯ν λλΉ(Derby)λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€λ₯Ό ν¬ν¨ν©λλ€. λ΄μ₯ν λλΉ λ°μ΄ν°λ² μ΄μ€ μΈμ€ν΄μ€λ νλ²μ λμ€ν¬μ μμΉν λ°μ΄ν°λ² μ΄μ€ νμΌ νλμλ§ μ κ·Όν μ μμ΅λλ€.
λ‘컬 λ©νμ€ν μ΄(local metastore)
λ€μ€ μΈμ , μ¦ λ€μ€ μ¬μ©μλ₯Ό μ§μνλ λ°©λ²μ λ 립ν λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ κ²μ λλ€.
μ격 λ©νμ€ν μ΄(remote metastore)
νλ μ΄μμ λ©νμ€ν μ΄ μλ²κ° νμ΄λΈ μλΉμ€μ λ³λμ νλ‘μΈμ€λ‘ μ€νλ¨, λ°μ΄ν°λ² μ΄μ€ κ³μΈ΅μ΄ λ°©νλ²½μ μν μ λμ νκ³ , λ°λΌμ ν΄λΌμ΄μΈνΈλ λ°μ΄ν°λ² μ΄μ€ μ격 μ¦λͺ μ λ μ΄μ μ»μ νμκ° μκΈ° λλ¬Έμ κ΄λ¦¬μ±κ³Ό 보μμ±μ΄ λ λμμ§λλ€.
Hiveserver(νμ΄λΈ μλ²)
λ³λμ νλ‘μΈμ€μμ μ°λ¦¬ννΈ μ°κ²°μ μν΄ λκΈ°νκ³ μλ λ°λͺ¬
YARN
https://www.edureka.co/blog/hadoop-yarn-tutorial/
YARNμ μ¬μ©νλ©΄ κ·Έλν μ²λ¦¬, λνν μ²λ¦¬, μ€νΈλ¦Ό μ²λ¦¬, μΌκ΄ μ²λ¦¬μ κ°μ λ€μν λ°μ΄ν° μ²λ¦¬ λ°©λ²μ ν΅ν΄ HDFSμ μ μ₯λ λ°μ΄ν°λ₯Ό μ€ννκ³ μ²λ¦¬ν μ μμ
λ°λΌμ YARNμ Hadoopμ MapReduce μ΄μΈμ λ€λ₯Έ μ νμ λΆμ° μ ν리μΌμ΄μ μ κ°λ°©ν¨
리μμ€ κ΄λ¦¬ μΈμλ YARNμ μμ μμ½λ μν
YARNμ 리μμ€λ₯Ό ν λΉνκ³ μμ μ μμ½νμ¬ λͺ¨λ μ²λ¦¬ νλμ μνν¨
ꡬμ±μμ
리μμ€ κ΄λ¦¬μ : λ§μ€ν° λ°λͺ¬μμ μ€νλλ©° ν΄λ¬μ€ν°μ 리μμ€ ν λΉμ κ΄λ¦¬ν¨
λ Έλ κ΄λ¦¬μ: μ¬λ μ΄λΈ λ°λͺ¬μμ μ€νλλ©° λͺ¨λ λ¨μΌ λ°μ΄ν° λ Έλμμ μμ μ€νμ λ΄λΉν¨
μ ν리μΌμ΄μ λ§μ€ν°: κ°λ³ μ ν리μΌμ΄μ μ μ¬μ©μ μμ μλͺ μ£ΌκΈ° λ° λ¦¬μμ€ μꡬ μ¬νμ κ΄λ¦¬ν¨. Node Managerμ ν¨κ» μλνλ©° μμ μ€νμ λͺ¨λν°λ§ν¨
컨ν μ΄λ: λ¨μΌ λ Έλμ μλ RAM, CPU, λ€νΈμν¬, HDD λ±μ 리μμ€ ν¨ν€μ§
맡리λμ€(MapReduce)
λ°μ΄ν° 컬λ μ κ° μμ€λ₯Ό ν ννμμ λ€λ₯Έ ννλ‘ λ§΅ν(맡 λ¨κ³)νκ³ μ΄ λ§΅νλ λ°μ΄ν° 컬λ μ μ νλμ κ° λλ λ μμ 컬λ μ μΌλ‘ μ€μ΄λ (리λμ€ λ¨κ³) λ°μ΄ν° μ°μ°μ κΈ°λ°μ λ κ³μ° ν¨λ¬λ€μμΌλ‘ ꡬκΈμμ κ°λ°νμ΅λλ€.
맡리λμ€λ 맡과 리λμ€ λ¨κ³λ₯Ό νμ€ν¬λ‘ λλκ³ ν΄λ¬μ€ν°μ μ΄ νμ€ν¬λ₯Ό λΆμ°μν΄μΌλ‘μ¨ μν νμ₯λ κ³μ°μ΄ κ°λ₯νλλ‘ μ€κ³λμμ΅λλ€.
νλ‘μμ μ 곡νλ 맡리λμ€ λ°νμμ μ‘μ νμ€ν¬λ‘ λΆλ¦¬νκ³ ν΄λ¬μ€ν°μ νμ€ν¬λ₯Ό λΆμ°μν€λ©° νμ€ν¬μ μ λ ₯ λ°μ΄ν°λ₯Ό κ°μ§κ³ μλ μ₯λΉλ‘ ν΄λΉ νμ€ν¬λ₯Ό μ΄λμν€κ±°λ νμμ λ°λΌμλ λ°μ΄ν°λ₯Ό νμ€ν¬λ‘ μ΄λμν΅λλ€. μ€ν¨ν νμ€ν¬λ₯Ό μλμΌλ‘ μ¬μ€ννκ³ μλ¬λ₯Ό 볡ꡬνκ±°λ λ‘κΉ μλΉμ€λ₯Ό μ 곡νκΈ°λ ν©λλ€.
λ°μ΄ν° μ½κΈ°
맡리λμ€λ μ λ ₯ λ°μ΄ν°λ₯Ό μ½μ λ InputFormat μλ° ν΄λμ€λ₯Ό μ΄μ©ν©λλ€. μ΄ ν΄λμ€λ HDFSμμ λ°μ΄ν°λ₯Ό λ°λ‘ μ½μ΅λλ€. HBaseλ μΉ΄μ°λλΌ νΉμ κΈ°ν λ°μ΄ν° μμ€λ‘λΆν° λ°μ΄ν°λ₯Ό μ½λ InputFormat ꡬν체λ μμ΅λλ€.
λ°μ΄ν°λ₯Ό μΉμ (section)μΌλ‘ λλλ λ°©λ²μ μ μν΄ λ§΅λ¦¬λμ€μ 맡 νμ€ν¬μ λ³λ ¬ μ²λ¦¬λ₯Ό μ 곡ν©λλ€. λ λ²μ§Έλ RecordReaderλ₯Ό μ 곡ν©λλ€. μ΄ ν΄λμ€λ 맡리λμ€κ° μ λ ₯ μμ€λ‘λΆν° λ μ½λλ₯Ό μ½μ΄ 맡 νμ€ν¬κ° μ¬μ©ν μ μλ ννμΈ ν€μ κ° ννλ‘ λ³νμν€λ λ° μ¬μ©λ©λλ€.
HCatalogλ 맡리λμ€ μ¬μ©μκ° νμ΄λΈ λ°μ΄ν° μ¨μ΄νμ°μ€μ μ μ₯λμ΄ μλ λ°μ΄ν°λ₯Ό μ½μ μ μκ² HCatInputFormatμ μ 곡ν©λλ€. μ¬μ©μλ νμν ν μ΄λΈμ νν°μ κ³Ό 컬λΌμ μ½μ μ μκ³ νΈν 리μ€νΈ ννλ‘ λ μ½λλ₯Ό μ 곡ν©λλ€. μ¬μ©μλ λ°μ΄ν°λ₯Ό νμ±ν νμκ° μμ΅λλ€.
λ°μ΄ν° μ°κΈ°
ν λ²μ ν κ° μ΄μμ νν°μ μ μΈ μ μμ΅λλ€. μ΄λ₯Ό λμ νν°μ λ(dynamic partitioning)μ΄λΌ ν©λλ€. λ μ½λκ° λ°νμμ λμ μΌλ‘ νν°μ λ λκΈ° λλ¬Έμ λλ€.