Hive Architecture

  • image

    • 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

    • image

      • https://hive.apache.org/

    • ν•˜μ΄λΈŒλŠ” HDFS에 μ €μž₯된 데이터(디렉터리/파일)에 ꡬ쑰(μŠ€ν‚€λ§ˆ)λ₯Ό μž…νžˆλŠ” λ°©μ‹μœΌλ‘œ 데이터λ₯Ό ν…Œμ΄λΈ”λ‘œ κ΅¬μ‘°ν™”μ‹œν‚΅λ‹ˆλ‹€. ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆμ™€ 같은 λ©”νƒ€λ°μ΄ν„°λŠ” λ©”νƒ€μŠ€ν† μ–΄λΌ λΆˆλ¦¬λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ©λ‹ˆλ‹€.

    • 닀쀑 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄μ„œ ν•˜μ΄λΈŒ 외뢀에 λ©”νƒ€μŠ€ν† μ–΄λ₯Ό κ΅¬λ™ν•˜λŠ” μ„œλΉ„μŠ€

    • λ©”νƒ€μŠ€ν† μ–΄ RDBMSλŠ” Apache Hive λ©”νƒ€λ°μ΄ν„°μ˜ 쀑앙 λ¦¬ν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€. μŠ€ν‚€λ§ˆ 정보(예: μ—΄ 이름, 데이터 μœ ν˜•, 데이터 파일 μœ„μΉ˜, νŒŒν‹°μ…˜, 기타 메타데이터)λ₯Ό ν¬ν•¨ν•˜λŠ” ν…Œμ΄λΈ” 메타데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

    • ν•˜μ΄λΈŒ λ©”νƒ€λ°μ΄ν„°μ˜ 핡심 μ €μž₯μ†Œ, λ©”νƒ€μŠ€ν† μ–΄λŠ” μ„œλΉ„μŠ€μ™€ 데이터 보관 μ €μž₯μ†Œλ‘œ λ‚˜λ‰©λ‹ˆλ‹€.

    • image

      • https://wikidocs.net/28353

      • λ‚΄μž₯ν˜• 메타 μŠ€ν† μ–΄(embedded metastore) μ„€μ •

        • 메타데이터 μ„œλΉ„μŠ€λŠ” ν•˜μ΄λΈŒ μ„œλΉ„μŠ€μ™€ λ™μΌν•œ JVMμ—μ„œ μ‹€ν–‰λ˜κ³  둜컬 λ””μŠ€ν¬μ— μ €μž₯λ˜λŠ” λ‚΄μž₯ν˜• 더비(Derby)λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. λ‚΄μž₯ν˜• 더비 λ°μ΄ν„°λ² μ΄μŠ€ μΈμŠ€ν„΄μŠ€λŠ” ν•œλ²ˆμ— λ””μŠ€ν¬μ— μœ„μΉ˜ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 파일 ν•˜λ‚˜μ—λ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

      • 둜컬 λ©”νƒ€μŠ€ν† μ–΄(local metastore)

        • 닀쀑 μ„Έμ…˜, 즉 닀쀑 μ‚¬μš©μžλ₯Ό μ§€μ›ν•˜λŠ” 방법은 λ…λ¦½ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

      • 원격 λ©”νƒ€μŠ€ν† μ–΄(remote metastore)

        • ν•˜λ‚˜ μ΄μƒμ˜ λ©”νƒ€μŠ€ν† μ–΄ μ„œλ²„κ°€ ν•˜μ΄λΈŒ μ„œλΉ„μŠ€μ™€ λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ 싀행됨, λ°μ΄ν„°λ² μ΄μŠ€ 계측이 λ°©ν™”λ²½μ˜ 역할을 λŒ€μ‹ ν•˜κ³ , λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” λ°μ΄ν„°λ² μ΄μŠ€ 자격 증λͺ…을 더 이상 얻을 ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— 관리성과 λ³΄μ•ˆμ„±μ΄ 더 λ†’μ•„μ§‘λ‹ˆλ‹€.

  • Hiveserver(ν•˜μ΄λΈŒ μ„œλ²„)

    • λ³„λ„μ˜ ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ“°λ¦¬ν”„νŠΈ 연결을 μœ„ν•΄ λŒ€κΈ°ν•˜κ³  μžˆλŠ” 데λͺ¬

  • YARN

    • image

      • 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)이라 ν•©λ‹ˆλ‹€. λ ˆμ½”λ“œκ°€ λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ νŒŒν‹°μ…”λ‹ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

Last updated