Hadoop 6. Hive

skh951225·2023년 4월 12일
0

Hadoop 입문

목록 보기
6/14

Hive 개요

What is Hive?

  • Hive 는 Hadoop cluster를 SQL DB처럼 보이게 해준다.
  • SQL 을 MapReduce 혹은 TEZ 명령어로 변환한 후 실행

Why Hive?

  • SQL로 할수 있는 것은 HiveQL로 할 수 있음
  • interactive
  • scalable
    • cluster에 분산되어 있는 데이터를 활용할 수 있음
    • data-warehouse 유형의 application(대용량의 데이터)을 다루는 강력한 기술
  • MapReduce in Java 를 활용하는 것보다 SQL sytax를 활용하는 Hive를 활용하는 것이 훨씬 쉬움
  • 높은 확장성
    • 사용자 정의 함수 사용 가능
    • exposes the Thrift server (다양한 언어와 Hive가 소통하게 해줌)
    • it actually exposes the JDBC and ODBC driver to make Hive look just like any other database

Why not Hive?

  • "high throughput, low latency" 를 요구하는 상황에는 Hive를 쓰는것이 적절치 않음
    • SQL을 MapReduce로 변환하고, MapReduce를 실행하는 것은 latency가 큼
  • Hive는 denormalized data를 다룸
  • 복잡한 쿼리를 사용할땐 Pig나 Spark를 사용하는 것이 더 적절함
  • it's not a real database.
    • no transactions
    • no record-level updates, inserts or deletes
    • it's just big flat text files that you're chugging through with mappers and reducers

HiveQL

  • HiveQL : variation of SQL used by Hive
  • MySQL과 문법이 유사함
  • HiveQL has a bunch of extensions to allow you to specify exactly how the data you're reading in is structured and stored and partitioned

Schema On Read

  • RDB의 경우 Schema on write 방식을 사용. (Schema에 맞춰 데이터를 저장하는 방식)
  • Hive는 Schema on read 방식을 사용.
    • 데이터의 저장된 형식은 그대로 두고 읽을때 Schema에 맞춤
  • metastore에 schema를 저장
    • HCatalog can expose that schema to other services as well
CREATE TABLE ratings (
userID INT,
movieID INT,
rating INT,
time INT)
ROW FORMAT DELIMTED
FIELDS TERMINATED BY ’\t’
STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH ‘${env:HOME}/ml-100k/u.data’
OVERWRITE INTO TABLE ratings;

Where is the data

  • LOAD DATA
    • distributed filesystem에서 Hive로 MOVE(COPY 아님)
    • Hive 가 ownership을 가짐 DROP TABLE; 하면 실제로 삭제됨
  • LOAD DATA LOCAL
    • locat filesystem에서 Hive로 COPY
  • Managed vs External tables
    • "CREATE TABLE" vs "CREATE EXTERNAL TABLE"
    • External table에 대해서 Hive는 ownership을 가지지 않음. 그래서 DROP TABLE; 을 해도 metadata만 삭제됨
    • External table은 다른 systemr과 데이터를 공유하는 상황에서 유용함

Partitioning

  • partitioned subdirectories 에 데이터를 저장할 수 있음
  • 데이터가 방대하고 특정 데이터에 대한 쿼리를 하고싶을때 partitioning이 유용함
  • partitioning을 연쇄적으로 걸 수 있음 디렉토리처럼
CREATE TABLE customers (
name STRING,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING);

Ways to use Hive

  • through Web UI(Ambari/Hue).
  • Hive prompt
    • cluster에 "hive"를 입력하여 prompt 생성
    • 명령어를 한줄씩 입력하여 상호작용가능(DB를 쓰는 것 처럼)
  • save your query files
    • hive –f /somepath/queries.hql
  • through JDBC / ODBC server
    • DB처럼 연결해서 사용할 수 있음
  • Through Thrift service
    • But remember, Hive is not suitable for OLTP
  • through Oozie
    • 클러스터 전체를 관리하는 툴, Hadoop cluster에 복잡한 job을 스케줄하게 해줌

Thrift vs JDBC/ODBC

Thrift와 JDBC/ODBC는 모두 데이터 액세스 기술입니다. 그러나 각각의 기술은 서로 다른 목적과 사용 사례를 가지고 있습니다.

Thrift는 분산 시스템 간의 통신에 사용되는 RPC(Remote Procedure Call) 프레임워크입니다. 이를 사용하여 클라이언트 애플리케이션과 서버 애플리케이션 간에 데이터를 주고받을 수 있습니다. Thrift는 여러 언어에서 사용할 수 있으며, 프로토콜 버퍼(Protocol Buffers)와 비슷한 바이너리 직렬화를 사용하여 데이터를 전송합니다.

반면에, JDBC(Java Database Connectivity)와 ODBC(Open Database Connectivity)는 데이터베이스에 액세스하기 위한 API(Application Programming Interface)입니다. JDBC는 자바 애플리케이션에서 데이터베이스를 액세스하기 위한 API이며, ODBC는 C, C++, .NET 등의 다른 언어에서 데이터베이스를 액세스하기 위한 API입니다. JDBC와 ODBC는 SQL(Structured Query Language)을 사용하여 데이터를 쿼리하고 결과를 반환합니다.

따라서 Thrift는 분산 시스템 간의 통신을 위해 사용되는 RPC 프레임워크이며, JDBC와 ODBC는 데이터베이스 액세스를 위한 API입니다. Thrift는 클라이언트-서버 간의 통신을 지원하고 여러 언어에서 사용할 수 있으며, JDBC와 ODBC는 데이터베이스에 대한 SQL 쿼리를 지원합니다.

RPC?

RPC(Remote Procedure Call) 프레임워크는 분산 시스템에서 프로세스 간 통신을 위한 프레임워크입니다. RPC를 사용하면 로컬 프로세스에서 수행하는 것과 동일한 방식으로 원격 프로세스에서 함수를 호출할 수 있습니다.

일반적으로 클라이언트-서버 아키텍처에서 사용되며, 클라이언트에서 요청을 보내면 서버에서 처리하고 결과를 반환합니다. 이를 통해 분산 시스템에서 서로 다른 머신 간에 함수 호출을 수행할 수 있으며, 이를 통해 시스템의 유연성과 확장성을 향상시킬 수 있습니다.

RPC 프레임워크에는 Thrift, gRPC, Apache Axis 등이 있으며, 각각 다양한 프로그래밍 언어에서 지원됩니다. 이러한 프레임워크를 사용하면 개발자가 직접 프로토콜을 구현하거나 네트워크 통신을 처리할 필요 없이 함수 호출을 원격지에서 간단하게 처리할 수 있습니다.

0개의 댓글