데이터 엔지니어링/HIVE 5

[Hive] 하이브 Query 주의 사항

업무상 데이터분석가분들과 업무를 자주 하게 되는데 아무래도 주력이 Python이신 분들이 많다 보니 쿼리 사용에 미숙한 채로 Workflow를 개발하여 3~4시간 동안 서버의 cpu, memory를 전부 잡아먹는 배치를 만드는 경우가 잦아 쿼리 튜닝 중 자주 발생하는 문제점 몇 가지 주의사항을 공유하겠습니다. 1. 조건절 내부 사용자 정의함수(UDF) 제거 Hive 버전마다 상이하긴 하지만 UDF를 조건절에 사용하는 경우 optimizer가 제대로 된 실행계획을 작성하지 못하는 경우가 발생합니다. 따라서 UDF를 최대한 피하는 방향으로 쿼리를 작성하여야 합니다. 2. Partition column의 조회 Partition column을 substring 등으로 변경하지 않는다. Partition의 경우 ..

[Hive]하이브 관련 튜닝 옵션 정리

Hive 관련 업무를 진행하면서 지속적으로 찾게 되는 Hive관련 옵션들을 정리하였습니다. 아래 순서는 튜닝순서와는 전혀 관련이 없으며 Hive 배치들을 튜닝하며 사용한 옵션들을 메모해 놓은 것을 정리하였습니다. 혹시 틀린부분이 있다면 댓글로 정정부탁드립니다. 감사합니다. Tez SET hive.execution.engine=tez; Hive query의 실행 엔진을 tez엔진으로 세팅한다. mr엔진 혹은 spark로도 변경할 수 있으며 각각 옵션은 mr, spark이다. Hive 2.x 버전부터 default는 tez SET tez.am.container.reuse.enabled=true; tez 엔진이 동일한 컨테이너를 재사용하여 여러 쿼리를 실행할지 여부를 결정 매개변수를 활성화 하면 모든 쿼리에 ..

[Hive] Hive-맵리듀스(2)

맵리듀스 맵리듀스는 큰 데이터를 다루는 job을 여러 태스크로 나누어 다수의 서버로 구성된 클러스터에서 병렬 처리하는 연산 모델이다. 맵리듀스는 맵과 리듀스라는 두 개의 기본 데이터 변환 연산에서 나왔다. 맵(Map) : 컬렉션의 모든 원소를 한 형태에서 다른 형태로 변환한다. 이때 입력된 key-value쌍은 0~N개의 key-value로 변환되며 같은 키를 가진 모든 key-value 쌍은 컬렉션의 형태로 동일한 리듀스 함수로 전달된다. 리듀스(Reduce) : 리듀스 함수는 값 컬렉션을 합계, 평균과 같은 값으로 변경하거나 다른 컬렉션으로 변경하여 최종 key-value쌍을 만든다. 하둡 인프라에서는 잡을 수행하기위해 많은 일을 처리하는데 수행되는 잡을 어떻게 맵-리듀스 태스크로 나누어 수행할지 결..

[Hive] Hive-Intro-(1)

컨셉 하이브(Hive)는 하둡(Hadoop)기반 데이터 웨어하우징 인프라이다. 하둡은 상용 하드웨어에서 데이터 저장 및 처리를 위한 대규모 스케일아웃 및 내결함성을 제공한다. 하이브는 대량의 데이터를 SQL로 쉽게 요약하고 분석을 진행할수 있도록 설계되었다. 3년간 Hive를 써오면서 느낀 장점은 다양한 포맷(csv, json, xml 등등)의 데이터들을 비교적 쉬운 SQL로 처리할 수 있는점 같다. 다양한 포맷 데이터를 읽고 변환하여 재적재하는 프로그램들을 일일히 만들어야하는 공수가 적은점이 최고 장점아닐까...? 다만 하이브는 맵리듀스 기동 부하로 인해 간단한 쿼리도 DMBS보다 매우 긴 응답시간을 가지지만 일반적으로 Hive로 처리하는 대규모 데이터가 가지는 처리시간에 비하면 짧다. 실제로 Hive..

[Hive] Hive-시작-(0)

신입때 부터 Hive를 이용해서 Workflow를 만들어 왔고 관련해서 정리도 했지만.... 개발자 다들 하는 블로그로 지식 정리겸... 시작해보려고 한다..(첫날임...) 전체적인 내용은 'Programming Hive' 이라는 책에 있는 내용을 토대로 Hive document 와 같이 정리하려고 한다.... 해당 책은 초반 발행일이 2013년이기도하고 Hive 버전이 2이기 때문에 프로젝트 마다 설정이 다르고 적용하지 못하거나 이미 적용되어있는 경우도 많아 document와 비교하여 정리하려고 한다.