Hadoop Ecosystem/Hive
[Hive] Compile 상세 과정 #2 - Optimization 종류와 소스 코드 분석
이전 글에 이어서 Hive의 Compile 상세 과정 중 Optimization의 여러 종류와 Compile 과정의 소스 코드를 분석하도록 하겠습니다. Hive Optimization 종류 Hive는 쿼리를 최종적인 Task Tree로 만들기까지의 Compile 과정에서 여러 종류의 Optimization을 수행합니다. 3가지 종류의 Optimization에 대해서 소개하도록 하겠습니다. CBO (Cost-Based Optimization) Semantic Analyzer가 AST를 OP Tree로 만드는 과정에서의 Optimization. - 참고 링크 : https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive C..
[Hive] Compile 상세 과정 #1 - 쿼리 변화 과정과 형태
Hive를 이용하면서 Client로부터 제출된 쿼리가 어떻게 MR Job으로까지 변환이 될까라는 궁금증이 항상 있었습니다. 그래서 내부적인 Compile 과정에 대해서 공부를 하게 되었고, 소스 코드를 직접 분석해 봤습니다. 이전에 작성한 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore 글을 먼저 읽으면 본 게시글을 이해하는데 도움이 될 겁니다. Hive Architecture Review - 주요 프로세스로 HiveServer2, Metastore 존재 - Driver가 중심에서 컴파일 과정, Task 전달 등 수행. - Hive 쿼리의 변화 과정을 알기 위해선 위 그림의 Compiler 과정을 알아야함. Hive 쿼리 처리 과정 - Hive 쿼리가 최종적으로 Map..
[Hive] Complex Json 데이터 테이블 생성하기 (Json SerDe)
Json 데이터를 사용하다보면 Json의 스키마 자체가 상당히 복잡하고 거대한 경우가 있습니다. 이번 글에서는 complex Json 데이터를 이용해 Hive 테이블을 생성하는 방법에 대해 소개하겠습니다. Json 데이터로 Hive 테이블 만들기 Json 데이터로 Hive 테이블을 만드는 방법은 여러가지가 있겠지만 이번 글에서는 Json SerDe를 이용한 방법을 소개할 예정입니다. 우선 Json SerDe를 위한 jar 파일부터 아래 링크에서 다운받도록 하겠습니다. https://jar-download.com/maven-repository-class-search.php?search_box=org.openx.data.jsonserde.JsonSerDe Download dependencies for jav..
[Hive] IntelliJ로 Runtime Debugging하기
이번 글에서는 Hive를 Runtime 중에 소스 코드 레벨에서 Debugging하는 방법에 대해 소개하겠습니다. Hive를 사용할 때 발생하는 에러는 보통 구글링을 해서 해결하곤 합니다. 하지만 구글링으로도 방법을 찾을 수 없을 때 근본적인 원인 파악을 위해 소스 코드 레벨에서 분석해야만 할 때가 있습니다. 아래의 방법으로 IntelliJ로 소스 코드 레벨에서 Debugging을 한다면 좀 더 쉽고 정확한 문제 해결을 할 수 있습니다. 사전 준비 Hive Debugging을 위해서 아래의 두가지를 준비합니다. IntelliJ 설치 https://www.jetbrains.com/ko-kr/idea/download/#section=mac Hive 소스 코드 다운로드 ( 사용하는 버전에 맞게 ) https:..
[Hive] limit 사용 시 leastNumRows 에러 발생 이슈
이번 글에서는 Hive 쿼리를 limit 절과 함께 사용할 때 발생하는 leastNumRows 에러 발생 이슈와 해결 과정에 대해 공유하겠습니다. 문제 발견 Hive 테이블을 select 할 때 limit 절을 사용하면 에러가 발생하는 문제를 발견하게 되었습니다. Hive CLI에서 실행시킨 쿼리 예제와 발생하는 에러는 아래와 같았습니다. select AA_COL from AA_TABLE where partition_p=p1 limit 35; java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: leastNumRows check failed 문제 상황 다양한 케이스들에 따라 위의 에러 발생 여부가 달랐습니다. 일단 사전에 설정되었던..
[Hive] Metastore의 heap memory 증가 이슈 해결 과정
이번 글에서는 토이 프로젝트를 진행하면서 Hive Metastore의 heap memory가 비정상적으로 증가하는 이슈의 해결 과정에 대해 공유하겠습니다. 해당 이슈 해결 과정을 보기에 앞서 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore 글을 읽으면 좀 더 이해하기 쉬울 것이라고 생각됩니다. 문제 발견 Hive를 사용하면서 Hive 쿼리가 정상적으로 수행되지 않는 문제를 발견하게 되었습니다. 처음에는 Hiveserver2가 다운된 문제라고 생각했습니다. 하지만 이상한 점은 Hiveserver2 프로세스가 죽지 않고 살아있었다는 점입니다. 어쨌든 문제의 원인을 파악하기 위해 Hiveserver2의 로그를 분석했습니다. 로그 분석 hiveserver2.log WARN [..
[Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore
이번 글에서는 Hive의 디테일한 아키텍처와 HiveServer2, Hive Metastore의 내용을 주로 다루도록 하겠습니다. Hive 아키텍쳐 Hive 아키텍처는 크게 HiveServer와 RDB, Hadoop의 관계로 구성할 수 있습니다. HiveServer는 Apache Thrift를 기반으로 만들어졌습니다. 여기서 Thrift는 서로 다른 언어 간의 통신을 가능하게 해주는 cross-language RPC 프레임워크로써, HiveServer2 이전에는 HiveServer를 Thrift server라고 부르곤 했습니다. 이번 글에서는 편의상 HiveServer2 이전 버전을 HiveServer1이라고 하겠습니다. - Client : Client가 Hive 쿼리를 사용할 수 있는 인터페이스. ..
[Hive] Unable to fetch table .null 에러 해결 방법
이번 글에서는 빅데이터 클러스터를 운영하면서 Hive 관련 "Unable to fetch table .null" 에러가 발생했던 경험을 공유하겠습니다. 문제 상황 & 분석 과정 클러스터 운영 중에 특정 Hive Table이 에러가 발생하며 drop을 포함한 모든 명령어가 먹히지 않는 문제가 발생했습니다. 문제 상황은 아래와 같았습니다. - Hiveserver 정상 - Hive에 접속해 Table 리스트를 보면 존재함 - Hue에서 UI를 통한 Hive Table 조회시 에러 발생 - 문제가 되던 특정 Table에 HQL 수행 시 에러 발생 - 해당 Table drop도 불가능 Failed: SemanticException Unable to fetch table [table_name].null 해당 문제..